protected void checkMethod(MethodInfo methodInfo) { List<MethodInfo> methodsByName = methodMap.get(methodInfo.getName()); if (methodsByName != null) { // Overloaded methods must have same return type for (MethodInfo meth: methodsByName) { if (!meth.isContainingAnyJavaType() && !meth.getReturnType().equals(methodInfo.getReturnType())) { throw new GenException(this.modelElt, "Overloaded method " + methodInfo.getName() + " must have the same return type " + meth.getReturnType() + " != " + methodInfo.getReturnType()); } } } }
@Test public void testIgnore() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceWithIgnoredElements.class); assertEquals(InterfaceWithIgnoredElements.class.getName(), model.getIfaceFQCN()); assertEquals(InterfaceWithIgnoredElements.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); List<MethodInfo> methods = model.getMethods(); assertEquals(2, methods.size()); checkMethod(methods.get(0), "foo", 1, "void", MethodKind.OTHER); checkMethod(methods.get(1), "bar", 1, "void", MethodKind.OTHER); assertFalse(methods.get(0).isContainingAnyJavaType()); assertFalse(methods.get(1).isContainingAnyJavaType()); }
@Test public void testValidJavaTypeReturn() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithValidJavaTypeReturn.class); assertEquals(4, model.getAnyJavaTypeMethods().size()); MethodInfo method = model.getAnyJavaTypeMethods().get(0); checkMethod(method, "methodWithReturn", 0, new TypeLiteral<Socket>(){}, MethodKind.OTHER); assertTrue(method.isContainingAnyJavaType()); method = model.getAnyJavaTypeMethods().get(1); checkMethod(method, "methodWithListReturn", 0, new TypeLiteral<List<Socket>>(){}, MethodKind.OTHER); assertTrue(method.isContainingAnyJavaType()); method = model.getAnyJavaTypeMethods().get(2); checkMethod(method, "methodWithSetReturn", 0, new TypeLiteral<Set<Socket>>(){}, MethodKind.OTHER); assertTrue(method.isContainingAnyJavaType()); method = model.getAnyJavaTypeMethods().get(3); checkMethod(method, "methodWithMapReturn", 0, new TypeLiteral<Map<String, Socket>>(){}, MethodKind.OTHER); assertTrue(method.isContainingAnyJavaType()); }
checkParam(params.get(2), "setSocket", new TypeLiteral<Set<Socket>>(){}); checkParam(params.get(3), "mapSocket", new TypeLiteral<Map<String, Socket>>(){}); assertTrue(method.isContainingAnyJavaType()); checkParam(params.get(2), "setSocketHandler", new TypeLiteral<Handler<Set<Socket>>>(){}); checkParam(params.get(3), "mapSocketHandler", new TypeLiteral<Handler<Map<String, Socket>>>(){}); assertTrue(method.isContainingAnyJavaType()); checkParam(params.get(2), "setSocketHandler", new TypeLiteral<Handler<AsyncResult<Set<Socket>>>>(){}); checkParam(params.get(3), "mapSocketHandler", new TypeLiteral<Handler<AsyncResult<Map<String, Socket>>>>(){}); assertTrue(method.isContainingAnyJavaType()); checkParam(params.get(2), "setSocketFunction", new TypeLiteral<Function<Set<Socket>, Set<Socket>>>(){}); checkParam(params.get(3), "mapSocketFunction", new TypeLiteral<Function<Map<String, Socket>, Map<String, Socket>>>(){}); assertTrue(method.isContainingAnyJavaType()); checkParam(params.get(0), "byteArray", new TypeLiteral<byte[]>(){}); checkParam(params.get(1), "booleanArray", new TypeLiteral<boolean[]>(){}); assertTrue(method.isContainingAnyJavaType()); params = method.getParams(); checkParam(params.get(0), "iterableString", new TypeLiteral<Iterable<String>>(){}); assertTrue(method.isContainingAnyJavaType());