private ContextualStatementBuilder target() { return Stmt.loadClassMember(targetField); }
private ContextualStatementBuilder agent() { return Stmt.loadClassMember(agentField); }
private ContextualStatementBuilder agent() { return Stmt.loadClassMember(agentField); }
private ContextualStatementBuilder target() { return Stmt.loadClassMember(targetField); }
private Statement generateRequest(ClassStructureBuilder<?> classBuilder, MetaMethod method, Statement methodParams, boolean intercepted) { final Statement sendable = Stmt .invokeStatic(MessageBuilder.class, "createCall") .invoke("call", remote.getFullyQualifiedName()) .invoke("endpoint", ProxyUtil.createCallSignature(method), Stmt.loadClassMember("qualifiers"), methodParams) .invoke("respondTo", method.getReturnType().asBoxed(), Stmt.loadVariable("remoteCallback")) .invoke("errorsHandledBy", Stmt.loadVariable("errorCallback")); final BlockStatement requestBlock = new BlockStatement(); requestBlock.addStatement(Stmt.declareVariable("sendable", RemoteCallSendable.class, sendable)); requestBlock.addStatement(Stmt.loadStatic(classBuilder.getClassDefinition(), "this") .invoke("sendRequest", Variable.get("bus"), Variable.get("sendable"))); return requestBlock; } }
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));
.finish() .publicMethod(RemoteCallback.class, "getRemoteCallback") .append(Stmt.loadClassMember("remoteCallback").returnValue()) .finish() .publicMethod(void.class, "setRemoteCallback", Parameter.of(RemoteCallback.class, "callback")) .append(Stmt.loadClassMember("remoteCallback").assignValue(Variable.get("callback"))) .finish() .publicMethod(ErrorCallback.class, "getErrorCallback") .append(Stmt.loadClassMember("errorCallback").returnValue()) .finish() .publicMethod(void.class, "setErrorCallback", Parameter.of(ErrorCallback.class, "callback")) .append(Stmt.loadClassMember("errorCallback").assignValue(Variable.get("callback"))) .finish();
@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); }
private Statement generateRequest(ClassStructureBuilder<?> classBuilder, MetaMethod method, Statement methodParams, boolean intercepted) { final Statement sendable = Stmt .invokeStatic(MessageBuilder.class, "createCall") .invoke("call", remote.getFullyQualifiedName()) .invoke("endpoint", ProxyUtil.createCallSignature(method), Stmt.loadClassMember("qualifiers"), methodParams) .invoke("respondTo", method.getReturnType().asBoxed(), Stmt.loadVariable("remoteCallback")) .invoke("errorsHandledBy", Stmt.loadVariable("errorCallback")); final BlockStatement requestBlock = new BlockStatement(); requestBlock.addStatement(Stmt.declareVariable("sendable", RemoteCallSendable.class, sendable)); requestBlock.addStatement(Stmt.loadStatic(classBuilder.getClassDefinition(), "this") .invoke("sendRequest", Variable.get("bus"), Variable.get("sendable"))); return requestBlock; } }
@Test public void testAnonymousClass() { String src = ObjectBuilder.newInstanceOf(Bar.class, Context.create().autoImport()) .extend() .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" + "public void setName(String name) {\n" + "this.name = name;\n" + "}\n" + "}", src); }
@Test public void testAnonymousClassWithConstructor() { String src = ObjectBuilder.newInstanceOf(Bar.class, Context.create().autoImport()) .extend("test") .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(\"test\") {\n" + "public void setName(String name) {\n" + "this.name = name;\n" + "}\n" + "}", src); }
@Test public void testDefineClassWithConstructorCallingThis() { final String cls = ClassBuilder.define("org.foo.Foo") .publicScope() .body() .privateField("b", boolean.class) .finish() .publicConstructor() .callThis(false) .finish() .publicConstructor(Parameter.of(boolean.class, "b")) .append(Stmt.loadClassMember("b").assignValue(Variable.get("b"))) .finish() .toJavaString(); assertEquals("failed to generate class with constructor calling this()", CLASS_WITH_CONSTRUCTOR_CALLING_THIS, cls); }
.append(Stmt.loadClassMember(targetField).assignValue(Stmt.castTo(bindable, Stmt.loadVariable("value")))) .append(agent().loadField("target").assignValue(Stmt.loadClassMember(targetField))) .append(Stmt.break_()) .finish();
.append(Stmt.loadClassMember(targetField).assignValue(Stmt.castTo(bindable, Stmt.loadVariable("value")))) .append(agent().loadField("target").assignValue(Stmt.loadClassMember(targetField))) .append(Stmt.break_()) .finish();
@Test public void testDefineClassWithAccessorMethods() { final String cls = ClassBuilder.define("org.foo.Foo") .publicScope() .body() .privateField("name", String.class) .initializesWith(Stmt.load("default")) .finish() .publicMethod(String.class, "getName") .append(Stmt.loadVariable("name").returnValue()) .finish() .publicMethod(void.class, "setName", Parameter.of(String.class, "name")) .append(Stmt.loadClassMember("name").assignValue(Variable.get("name"))) .finish() .toJavaString(); assertEquals("failed to generate class definition with accessor methods", CLASS_WITH_ACCESSOR_METHODS, cls); }
@Test public void testDefineInnerClassInMethod() { final ClassStructureBuilder<?> innerClass = ClassBuilder.define("Inner") .packageScope() .implementsInterface(Serializable.class) .body() .privateField("name", String.class) .finish() .publicMethod(void.class, "setName", Parameter.of(String.class, "name", true)) .append(Stmt.loadClassMember("name").assignValue(Variable.get("name"))) .finish(); final String cls = ClassBuilder.define("foo.bar.Baz") .publicScope() .body() .publicMethod(void.class, "someMethod") .append(new InnerClass(innerClass.getClassDefinition())) .append(Stmt.newObject(innerClass.getClassDefinition())) .finish() .toJavaString(); assertEquals("failed to generate class with method using inner class", CLASS_WITH_METHOD_USING_INNER_CLASS, cls); }
.finish() .publicMethod(void.class, "setOuterName", Parameter.of(String.class, "outerName")) .append(Stmt.loadClassMember("outerName").assignValue(Variable.get("outerName"))) .finish() .publicMethod(void.class, "test")
.append(Stmt.loadClassMember("EMPTY_ARRAY").returnValue()) .finish();
.append(Stmt.loadClassMember("EMPTY_ARRAY").returnValue()) .finish();