@Override public String getCanonicalString(final Context context) { final BlockBuilder<AnonymousClassStructureBuilder> initBlock = ObjectBuilder.newInstanceOf(HashMap.class, context).extend().initialize(); for (final Map.Entry<Object, Object> v : getValue().entrySet()) { initBlock.append(Stmt.loadVariable("this").invoke("put", LiteralFactory.getLiteral(v.getKey()), LiteralFactory.getLiteral(v.getValue()))); } return initBlock.finish().finish().toJavaString(); } }
@Override public String getCanonicalString(final Context context) { final BlockBuilder<AnonymousClassStructureBuilder> initBlock = ObjectBuilder.newInstanceOf(HashMap.class, context).extend().initialize(); for (final Map.Entry<Object, Object> v : getValue().entrySet()) { initBlock.append(Stmt.loadVariable("this").invoke("put", LiteralFactory.getLiteral(v.getKey()), LiteralFactory.getLiteral(v.getValue()))); } return initBlock.finish().finish().toJavaString(); } }
@Override public String getCanonicalString(final Context context) { final BlockBuilder<AnonymousClassStructureBuilder> initBlock = ObjectBuilder.newInstanceOf(ArrayList.class, context).extend().initialize(); for (final Object v : getValue()) { initBlock.append(Stmt.loadVariable("this").invoke("add", LiteralFactory.getLiteral(context, v))); } return initBlock.finish().finish().toJavaString(); } }
@Override public String getCanonicalString(final Context context) { final BlockBuilder<AnonymousClassStructureBuilder> initBlock = ObjectBuilder.newInstanceOf(ArrayList.class, context).extend().initialize(); for (final Object v : getValue()) { initBlock.append(Stmt.loadVariable("this").invoke("add", LiteralFactory.getLiteral(context, v))); } return initBlock.finish().finish().toJavaString(); } }
@Override public String getCanonicalString(final Context context) { final BlockBuilder<AnonymousClassStructureBuilder> initBlock = ObjectBuilder.newInstanceOf(HashSet.class, context).extend().initialize(); for (final Object v : getValue()) { initBlock.append(Stmt.loadVariable("this").invoke("add", LiteralFactory.getLiteral(v))); } return initBlock.finish().finish().toJavaString(); } }
@Override public String getCanonicalString(final Context context) { final BlockBuilder<AnonymousClassStructureBuilder> initBlock = ObjectBuilder.newInstanceOf(HashSet.class, context).extend().initialize(); for (final Object v : getValue()) { initBlock.append(Stmt.loadVariable("this").invoke("add", LiteralFactory.getLiteral(v))); } return initBlock.finish().finish().toJavaString(); } }
private BlockBuilder<AnonymousClassStructureBuilder> getSubscriptionCallback(final Decorable decorable, final FactoryController controller) { final MetaParameter parm = decorable.getAsParameter(); final MetaClass eventType = parm.getType().asBoxed(); final String parmClassName = eventType.getFullyQualifiedName(); final List<Annotation> annotations = InjectUtil.extractQualifiers(parm); final Annotation[] qualifiers = annotations.toArray(new Annotation[annotations.size()]); final Set<String> qualifierNames = new HashSet<>(CDI.getQualifiersPart(qualifiers)); final MetaClass callBackType = parameterizedAs(AbstractCDIEventCallback.class, typeParametersOf(eventType)); AnonymousClassStructureBuilder callBack = Stmt.newObject(callBackType).extend(); BlockBuilder<AnonymousClassStructureBuilder> callBackBlock; if (!qualifierNames.isEmpty()) { callBackBlock = callBack.initialize(); for (final String qualifierName : qualifierNames) { callBackBlock.append(Stmt.loadClassMember("qualifierSet").invoke("add", qualifierName)); } callBack = callBackBlock.finish(); } final List<Statement> fireEventStmts = new ArrayList<>(); if (!decorable.isEnclosingTypeDependent()) { fireEventStmts.add(Stmt.declareFinalVariable("instance", decorable.getEnclosingInjectable().getInjectedType(), Stmt.invokeStatic(Factory.class, "maybeUnwrapProxy", controller.contextGetInstanceStmt()))); } fireEventStmts.add(decorable.call(Refs.get("event"))); callBackBlock = callBack.publicOverridesMethod("fireEvent", Parameter.finalOf(eventType, "event")) .appendAll(fireEventStmts) .finish() .publicOverridesMethod("toString") ._(Stmt.load("Observer: " + parmClassName + " " + Arrays.toString(qualifiers)).returnValue()); return callBackBlock; }
callBackBlock = callBack.initialize(); for (final String qualifierName : qualifierNames) { callBackBlock.append(Stmt.loadClassMember("qualifierSet").invoke("add", qualifierName));
@Test public void testAnonymousClassWithInitializationBlock() { String src = ObjectBuilder.newInstanceOf(Bar.class, Context.create().autoImport()) .extend() .initialize() .append(Stmt.loadClassMember("name").assignValue("init")) .finish() .publicOverridesMethod("setName", Parameter.of(String.class, "name")) .append(Stmt.loadClassMember("name").assignValue(Variable.get("name"))) .finish() .finish() .toJavaString(); assertEquals("failed to generate anonymous class with overloaded construct", "new Bar() {\n" + "{\n" + "name = \"init\";" + "\n}\n" + "public void setName(String name) {\n" + "this.name = name;\n" + "}\n" + "}", src); }