@Override public Collection<MetaClass> provideTypesToExpose() { final Set<MetaClass> types = new HashSet<MetaClass>(); for (final MetaClass metaClass : ClassScanner.getTypesAnnotatedWith(Remote.class)) { for (final MetaMethod method : metaClass.getDeclaredMethods()) { if (!method.getReturnType().isVoid()) { types.add(method.getReturnType().getErased()); } for (final MetaParameter parameter : method.getParameters()) { final MetaClass type = parameter.getType(); types.add(type.getErased()); final MetaParameterizedType parameterizedType = type.getParameterizedType(); if (parameterizedType != null) { for (final MetaType tp : parameterizedType.getTypeParameters()) { if (tp instanceof MetaClass) { types.add(((MetaClass) tp).getErased()); } } } } } } return types; } }
static MetaClass[] getParameterTypes(final MetaMethod producerMethod) { final MetaClass[] paramTypes = new MetaClass[producerMethod.getParameters().length]; for (int i = 0; i < paramTypes.length; i++) { paramTypes[i] = producerMethod.getParameters()[i].getType(); } return paramTypes; }
private String ensureSafeLocalVariableName(String name, final MetaMethod method) { final MetaParameter[] params = method.getParameters(); if (params != null) { for (final MetaParameter param : params) { if (name.equals(param.getName())) { name = "_" + name; break; } } } return name; }
private Object[] getParametersForInvocation(final MetaMethod method, final Object... prependedParams) { final int paramLength = method.getParameters().length + prependedParams.length; final Object[] params = new Object[paramLength]; for (int i = 0; i < prependedParams.length; i++) { params[i] = prependedParams[i]; } final MetaParameter[] declaredParams = method.getParameters(); for (int i = 0; i < declaredParams.length; i++) { params[prependedParams.length+i] = loadVariable(declaredParams[i].getName()); } return params; }
private String ensureSafeLocalVariableName(String name, final MetaMethod method) { final MetaParameter[] params = method.getParameters(); if (params != null) { for (final MetaParameter param : params) { if (name.equals(param.getName())) { name = "_" + name; break; } } } return name; }
/** * Returns true if the method signature is the same as the methods generated by BindableProxyGenerator */ private boolean isBindableProxyGeneratedMethod(MetaMethod method) { if(method.getName().equals("get") && method.getParameters().length == 1 && method.getParameters()[0].getType().isAssignableFrom(String.class)) { return true; } if(method.getName().equals("set") && method.getParameters().length == 2 && method.getParameters()[0].getType().isAssignableFrom(String.class)) { return true; } return false; }
public static String createCallSignature(final MetaMethod m) { final StringBuilder append = new StringBuilder(m.getName()).append(':'); for (final MetaParameter parm : m.getParameters()) { append.append(parm.getType().getCanonicalName()).append(':'); } return append.toString(); }
public static boolean isMethodInInterface(final MetaClass iface, final MetaMethod member) { if (iface.getMethod(member.getName(), Arrays.stream(member.getParameters()).map(p -> p.getType()).toArray(MetaClass[]::new)) != null) return true; return false; }
public static boolean isMethodInInterface(final MetaClass iface, final MetaMethod member) { if (iface.getMethod(member.getName(), Arrays.stream(member.getParameters()).map(p -> p.getType()).toArray(MetaClass[]::new)) != null) return true; return false; }
public static DefParameters from(final MetaMethod method) { final List<Parameter> parameters = new ArrayList<Parameter>(); int i = 0; for (final MetaParameter parm : method.getParameters()) { parameters.add(Parameter.of(parm.getType(), "a" + i++)); } return new DefParameters(parameters); }
public static DefParameters from(final MetaMethod method) { final List<Parameter> parameters = new ArrayList<Parameter>(); int i = 0; for (final MetaParameter parm : method.getParameters()) { parameters.add(Parameter.of(parm.getType(), "a" + i++)); } return new DefParameters(parameters); }
public String hashString() { if (_hashString != null) return _hashString; return _hashString = MetaMethod.class + ":" + getDeclaringClass().getFullyQualifiedName() + "." + getName() + "(" + Arrays.toString(getParameters()) + ")"; }
public String hashString() { if (_hashString != null) return _hashString; return _hashString = MetaMethod.class + ":" + getDeclaringClass().getFullyQualifiedName() + "." + getName() + "(" + Arrays.toString(getParameters()) + ")"; }
public static String getPrivateMethodName(final MetaMethod method) { final MetaClass declaringClass = method.getDeclaringClass(); String name = declaringClass.getName() + "_" + method.getName(); if (method.getParameters() != null) { for (final MetaParameter p : method.getParameters()) { name += "_" + getTypeName(p.getType()); } } return name; }
public static DefParameters from(final MetaMethod method, final Parameter... parms) { final List<Parameter> parameters = new ArrayList<Parameter>(); int i = 0; for (final MetaParameter parm : method.getParameters()) { parameters.add(Parameter.of(parm.getType(), parms[i].getName(), parms[i++].isFinal())); } return new DefParameters(parameters); }
private Parameter[] getParametersForDeclaration(final MetaMethod method) { final MetaParameter[] metaParams = method.getParameters(); final Parameter[] params = new Parameter[metaParams.length]; for (int i = 0; i < params.length; i++) { params[i] = Parameter.of(metaParams[i].getType().getErased(), metaParams[i].getName()); } return params; }
private ObjectBuilder createAnonymousImpl(final MetaClass type) { final AnonymousClassStructureBuilder builder = newObject(type).extend(); stream(type.getMethods()) .filter(m -> m.isPublic() && m.isAbstract()) .forEach(m -> { builder .publicOverridesMethod(m.getName(), of(m.getParameters())) .append(Stmt.throw_(RuntimeException.class)) .finish(); }); return builder.finish(); }
private void addDisposerDependencies(final Injectable producedInjectable, final MetaMethod disposer, final DependencyGraphBuilder builder) { for (final MetaParameter param : disposer.getParameters()) { if (param.isAnnotationPresent(Disposes.class)) { builder.addDisposesMethodDependency(producedInjectable, disposer.getDeclaringClass(), qualFactory.forSink(disposer.getDeclaringClass()), disposer); } else { builder.addDisposesParamDependency(producedInjectable, param.getType(), qualFactory.forSink(param), param.getIndex(), param); } } }
public static String initCachedMethod(final ClassStructureBuilder<?> classBuilder, final MetaMethod m) { createJavaReflectionMethodInitializerUtilMethod(classBuilder); final String fieldName = PrivateAccessUtil.getPrivateMethodName(m) + "_meth"; classBuilder.privateField(fieldName, Method.class).modifiers(Modifier.Static) .initializesWith(Stmt.invokeStatic(classBuilder.getClassDefinition(), JAVA_REFL_METH_UTIL_METH, m.getDeclaringClass(), m.getName(), MetaClassFactory.asClassArray(m.getParameters()))).finish(); return fieldName; }
public static String initCachedMethod(final ClassStructureBuilder<?> classBuilder, final MetaMethod m) { createJavaReflectionMethodInitializerUtilMethod(classBuilder); final String fieldName = PrivateAccessUtil.getPrivateMethodName(m) + "_meth"; classBuilder.privateField(fieldName, Method.class).modifiers(Modifier.Static) .initializesWith(Stmt.invokeStatic(classBuilder.getClassDefinition(), JAVA_REFL_METH_UTIL_METH, m.getDeclaringClass(), m.getName(), MetaClassFactory.asClassArray(m.getParameters()))).finish(); return fieldName; }