public static boolean isMethodNeedsOverride(String callingClassName, MethodInfo method) { if (method.getName().equals("toString") && method.getParams().isEmpty()) { return true; } else { /*There is only one entry in here (0 would be a bug)*/ for (ClassTypeInfo ownerType : method.getOwnerTypes()) { if (!ownerType.getName().equals(callingClassName)) { return true; } } return false; } }
ExecutableType t2 = (ExecutableType) modelMethod.asType(); if (typeUtils.isSubsignature(t1, t2) && typeUtils.isSubsignature(t2, t1)) { otherMethod.getValue().getOwnerTypes().addAll(methodInfo.getOwnerTypes()); return null;
@Test public void testMethodOverride() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceWithMethodOverride.class, VertxGenInterface.class); List<MethodInfo> methods = model.getMethods(); assertEquals(1, methods.size()); checkMethod(methods.get(0), "bar", 1, "void", MethodKind.OTHER); assertEquals(set( TypeReflectionFactory.create(InterfaceWithMethodOverride.class), TypeReflectionFactory.create(VertxGenInterface.class) ), methods.get(0).getOwnerTypes()); checkParam(methods.get(0).getParams().get(0), "str", String.class); }
@Test public void testMethodOverrideParameterRenamed() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceWithMethodOverrideParameterRenamed.class, VertxGenInterface.class); List<MethodInfo> methods = model.getMethods(); assertEquals(1, methods.size()); checkMethod(methods.get(0), "bar", 1, "void", MethodKind.OTHER); assertEquals(set( TypeReflectionFactory.create(InterfaceWithMethodOverrideParameterRenamed.class), TypeReflectionFactory.create(VertxGenInterface.class) ), methods.get(0).getOwnerTypes()); checkParam(methods.get(0).getParams().get(0), "str_renamed", String.class); }
@Test public void testInterfaceWithTypeVariableArgument() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceWithTypeVariableArgument3.class, InterfaceWithTypeVariableArgument2.class, InterfaceWithTypeVariableArgument1.class); List<MethodInfo> methods = model.getMethods(); assertEquals(1, methods.size()); checkMethod(methods.get(0), "foo", 0, InterfaceWithTypeVariableArgument3.class, MethodKind.OTHER); assertEquals(set( TypeReflectionFactory.create(InterfaceWithTypeVariableArgument1.class), TypeReflectionFactory.create(InterfaceWithTypeVariableArgument2.class) ), methods.get(0).getOwnerTypes()); }
@Test public void testMethodWithSameSignatureInheritedFromDistinctInterfaces() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithSameSignatureInheritedFromDistinctInterfaces.class, SameSignatureMethod1.class, SameSignatureMethod2.class); List<MethodInfo> methods = model.getMethods(); assertEquals(1, methods.size()); checkMethod(methods.get(0), "foo", 0, "U", MethodKind.OTHER); assertEquals(set(TypeReflectionFactory.create(SameSignatureMethod1.class), TypeReflectionFactory.create(SameSignatureMethod2.class)), methods.get(0).getOwnerTypes()); }
@Test public void testInterfaceWithGenericMethodOverride() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceWithGenericMethodOverride.class, GenericAbstractInterface.class); List<MethodInfo> methods = model.getMethods(); assertEquals(5, methods.size()); checkMethod(methods.get(0), "foo", 0, String.class, MethodKind.OTHER); checkMethod(methods.get(1), "bar", 0, new TypeLiteral<List<String>>() {}, MethodKind.OTHER); checkMethod(methods.get(2), "juu", 1, "void", MethodKind.FUTURE); checkMethod(methods.get(3), "daa", 1, "void", MethodKind.HANDLER); checkMethod(methods.get(4), "collargol", 1, "void", MethodKind.OTHER); for (int i = 0;i < 5;i++) { assertEquals(set( TypeReflectionFactory.create(InterfaceWithGenericMethodOverride.class), TypeReflectionFactory.create(GenericAbstractInterface.class) ), methods.get(i).getOwnerTypes()); } checkParam(methods.get(2).getParams().get(0), "handler", new TypeLiteral<Handler<AsyncResult<String>>>() { }); checkParam(methods.get(3).getParams().get(0), "handler", new TypeLiteral<Handler<String>>() { }); checkParam(methods.get(4).getParams().get(0), "t", String.class); }
@Test public void testMethodWithDiamond() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithDiamond.class, DiamondMethod1.class, DiamondMethod2.class, DiamondMethod3.class); List<MethodInfo> methods = model.getMethods(); assertEquals(1, methods.size()); checkMethod(methods.get(0), "foo", 0, "U", MethodKind.OTHER); assertEquals(set(TypeReflectionFactory.create(DiamondMethod1.class), TypeReflectionFactory.create(DiamondMethod2.class), TypeReflectionFactory.create(DiamondMethod3.class)), methods.get(0).getOwnerTypes()); }