public GWTConstructor(final TypeOracle oracle, final JConstructor c) { this.constructor = c; this.annotations = c.getAnnotations(); this.declaringClass = GWTClass.newInstance(oracle, c.getEnclosingType()); this.oracle = oracle; }
public GWTConstructor(final TypeOracle oracle, final JConstructor c) { this.constructor = c; this.annotations = c.getAnnotations(); this.declaringClass = GWTClass.newInstance(oracle, c.getEnclosingType()); this.oracle = oracle; }
if (ctor.getEnclosingType().getQualifiedSourceName().equals(typeName)) { GwtRetention retention = ctor.getAnnotation(GwtRetention.class); if (retention == null)
if (ctor.getEnclosingType().getQualifiedSourceName().equals(typeName)) { GwtRetention retention = ctor.getAnnotation(GwtRetention.class); if (retention == null) {
private boolean generateConstructors(TreeLogger logger, ReflectionManifest manifest, SourceBuilder<Object> classBuilder, ReflectionGeneratorContext context) throws UnableToCompleteException { Collection<ReflectionUnit<JConstructor>> ctors = manifest.getConstructors(); if (ctors.size() > 0) { MethodBuffer initMethod = classBuilder.getClassBuffer() .createMethod("public static void enhanceConstructors(Class<?> cls)") .println("JsMemberPool map = JsMemberPool.getMembers(cls);") .addImports("com.google.gwt.reflect.shared.JsMemberPool"); TypeOracle oracle = context.getTypeOracle(); for (ReflectionUnit<JConstructor> unit : ctors) { JConstructor ctor = unit.getNode(); String ctorFactoryName = MemberGenerator.getConstructorFactoryName(ctor.getEnclosingType(), ctor.getParameters()); JClassType existing; String factory; existing = oracle.findType(ctor.getEnclosingType().getPackage().getName(), ctorFactoryName); if (existing == null) factory = manifests.generateConstructorFactory(logger, context, ctor, ctorFactoryName, manifest); else { factory = existing.getQualifiedSourceName(); } factory = initMethod.addImport(factory); initMethod.println("map.addConstructor("+factory+".instantiate());"); } return true; } return false; }
private boolean generateConstructors(final TreeLogger logger, final ReflectionManifest manifest, final SourceBuilder<Object> classBuilder, final ReflectionGeneratorContext context) throws UnableToCompleteException { final Collection<ReflectionUnit<JConstructor>> ctors = manifest.getConstructors(); if (ctors.size() > 0) { final MethodBuffer initMethod = classBuilder.getClassBuffer() .createMethod("public static void enhanceConstructors(Class<?> cls)") .println("JsMemberPool map = JsMemberPool.getMembers(cls);") .addImports("com.google.gwt.reflect.shared.JsMemberPool"); final TypeOracle oracle = context.getTypeOracle(); for (final ReflectionUnit<JConstructor> unit : ctors) { final JConstructor ctor = unit.getNode(); final String ctorFactoryName = ConstructorGenerator.getConstructorFactoryName(ctor.getEnclosingType(), ctor.getParameters()); JClassType existing; String factory; existing = oracle.findType(ctor.getEnclosingType().getPackage().getName(), ctorFactoryName); if (existing == null) { factory = constructorGenerator.generateConstructorFactory(logger, context, ctor, ctorFactoryName, manifest); } else { factory = existing.getQualifiedSourceName(); } factory = initMethod.addImport(factory); initMethod.println("map.addConstructor("+factory+".instantiate());"); } return true; } return false; }
public String getOrMakeConstructorFactory(final TreeLogger logger, final ReflectionGeneratorContext ctx, final JConstructor ctor, final com.google.gwt.core.ext.typeinfo.JType classType, final ReflectionManifest manifest, final boolean declaredOnly) throws UnableToCompleteException { // get cached manifest for this type final String clsName = classType.getQualifiedSourceName(); final TypeOracle oracle = ctx.getGeneratorContext().getTypeOracle(); final JClassType cls = oracle.findType(clsName); if (cls == null) { logger.log(Type.ERROR, "Unable to find enclosing class "+clsName); throw new UnableToCompleteException(); } final String constructorFactoryName = ConstructorGenerator.getConstructorFactoryName(cls, ctor.getParameters()); JClassType factory; final String pkgName = ctor.getEnclosingType().getPackage().getName(); factory = oracle.findType(pkgName, constructorFactoryName); if (factory == null) { return generateConstructorFactory(logger, ctx, ctor, constructorFactoryName, manifest); } else { return (pkgName.length()==0?"":pkgName+".")+ constructorFactoryName; } }
public String getOrMakeConstructorFactory(TreeLogger logger, ReflectionGeneratorContext ctx, JConstructor ctor, com.google.gwt.core.ext.typeinfo.JType classType, ReflectionManifest manifest, boolean declaredOnly) throws UnableToCompleteException { // get cached manifest for this type String clsName = classType.getQualifiedSourceName(); TypeOracle oracle = ctx.getGeneratorContext().getTypeOracle(); JClassType cls = oracle.findType(clsName); if (cls == null) { logger.log(Type.ERROR, "Unable to find enclosing class "+clsName); throw new UnableToCompleteException(); } String constructorFactoryName = getConstructorFactoryName(cls, ctor.getParameters()); JClassType factory; String pkgName = ctor.getEnclosingType().getPackage().getName(); factory = oracle.findType(pkgName, constructorFactoryName); if (factory == null) { return generateConstructorFactory(logger, ctx, ctor, constructorFactoryName, manifest); } else return (pkgName.length()==0?"":pkgName+".")+ constructorFactoryName; }
public JMethodCall getConstructorProvider(final TreeLogger logger, final ReflectionGeneratorContext ctx, final JConstructor ctor, final boolean declared) throws UnableToCompleteException { final JClassLiteral classLit = ctx.getClazz(); final UnifyAstView ast = ctx.getAst(); final String clsName = classLit.getRefType().getName(); final ReflectionManifest manifest = ReflectionManifest.getReflectionManifest(logger, clsName, ast.getGeneratorContext()); final String factoryCls = getOrMakeConstructorFactory(logger, ctx, ctor, ctor.getEnclosingType(), manifest, declared); ctx.finish(logger); final JDeclaredType factory = ast.searchForTypeBySource(factoryCls); // pull out the static accessor method for (final JMethod factoryMethod : factory.getMethods()) { if (factoryMethod.isStatic() && factoryMethod.getName().equals("instantiate")) { return new JMethodCall(factoryMethod.getSourceInfo(), null, factoryMethod); } } logger.log(Type.ERROR, "Unable to find static initializer for Constructor subclass "+factoryCls); throw new UnableToCompleteException(); }
public JMethodCall getConstructorProvider(TreeLogger logger, ReflectionGeneratorContext ctx, JConstructor ctor, boolean declared) throws UnableToCompleteException { // // TODO Auto-generated method stub // return null; // } // // public JMethodCall getConstructorProvider(TreeLogger logger, UnifyAstView ast, // JConstructor ctor, // JClassLiteral classLit, boolean declaredOnly) throws UnableToCompleteException { JClassLiteral classLit = ctx.getClazz(); UnifyAstView ast = ctx.getAst(); String clsName = classLit.getRefType().getName(); ReflectionManifest manifest = ReflectionManifest.getReflectionManifest(logger, clsName, ast.getGeneratorContext()); String factoryCls = getOrMakeConstructorFactory(logger, ctx, ctor, ctor.getEnclosingType(), manifest, declared); ast.getRebindPermutationOracle().getGeneratorContext().finish(logger); JDeclaredType factory = ast.searchForTypeBySource(factoryCls); // pull out the static accessor method for (JMethod factoryMethod : factory.getMethods()) { if (factoryMethod.isStatic() && factoryMethod.getName().equals("instantiate")) { return new JMethodCall(factoryMethod.getSourceInfo(), null, factoryMethod); } } logger.log(Type.ERROR, "Unable to find static initializer for Constructor subclass "+factoryCls); throw new UnableToCompleteException(); }
public String generateConstructorFactory(TreeLogger logger, ReflectionGeneratorContext ctx, JConstructor ctor, String factory, ReflectionManifest manifest) throws UnableToCompleteException { JClassType type = ctor.getEnclosingType(); String pkg = type.getPackage().getName(); factory = factory.replace('.', '_'); .indent() .println("ctor = new Constructor<"+simpleName+">(") .print(ctor.getEnclosingType().getQualifiedSourceName()+".class, ") .print(ReflectionUtilType.getModifiers(ctor)+", ") .println("invoker(), ")
throws UnableToCompleteException { final JClassType type = ctor.getEnclosingType(); final String pkg = type.getPackage().getName(); factory = factory.replace('.', '_');