private void implementInitProxyProperties(final ClassStructureBuilder<?> proxyImpl, final Injectable injectable) { final BlockBuilder<?> initBody = proxyImpl .publicMethod(void.class, "initProxyProperties", finalOf(injectable.getInjectedType(), "instance")).body(); for (final Entry<String, Statement> prop : controller.getProxyProperties()) { proxyImpl.privateField(prop.getKey(), prop.getValue().getType()).finish(); initBody.append(loadVariable(prop.getKey()).assignValue(prop.getValue())); } initBody.finish(); }
@Test public void testDefineClassWithFieldsOfAllScopes() { final String cls = ClassBuilder .define("org.foo.Foo") .publicScope() .body() .publicField("publicField", int.class) .finish() .protectedField("protectedField", int.class) .finish() .packageField("packagePrivateField", int.class) .finish() .privateField("privateField", int.class) .finish() .toJavaString(); assertEquals("failed to generate class with fields of all scopes", CLASS_WITH_FIELDS_OF_ALL_SCOPES, cls); }
@Test public void testGetFields() { final ClassStructureBuilder<?> classBuilder = ClassBuilder .define("Child", Parent.class) .publicScope() .body() .privateField("childPrivate", int.class).finish() .packageField("childPackage", int.class).finish() .protectedField("childProtected", int.class).finish() .publicField("childPublic", int.class).finish(); final MetaClass child = classBuilder.getClassDefinition(); final ArrayList<String> fields = new ArrayList<String>(); for (MetaField field : child.getFields()) { fields.add(field.getDeclaringClass().getCanonicalName() + "." + field.getName()); } final List<String> expectedFields = Lists.newLinkedList(); expectedFields.add(child.getCanonicalName() + "." + "childPublic"); expectedFields.add(Parent.class.getCanonicalName() + "." + "parentPublic"); Collections.sort(fields); Collections.sort(expectedFields); assertEquals(expectedFields.toString(), fields.toString()); }
@Test public void testGetDeclaredFields() { final ClassStructureBuilder<?> classBuilder = ClassBuilder .define("Child", Parent.class) .publicScope() .body() .privateField("childPrivate", int.class).finish() .packageField("childPackage", int.class).finish() .protectedField("childProtected", int.class).finish() .publicField("childPublic", int.class).finish(); final MetaClass child = classBuilder.getClassDefinition(); final ArrayList<String> fields = new ArrayList<String>(); for (MetaField field : child.getDeclaredFields()) { fields.add(field.getDeclaringClass().getCanonicalName() + "." + field.getName()); } final List<String> expectedFields = Lists.newLinkedList(); expectedFields.add(child.getCanonicalName() + "." + "childPrivate"); expectedFields.add(child.getCanonicalName() + "." + "childPackage"); expectedFields.add(child.getCanonicalName() + "." + "childProtected"); expectedFields.add(child.getCanonicalName() + "." + "childPublic"); Collections.sort(fields); Collections.sort(expectedFields); assertEquals(expectedFields.toString(), fields.toString()); } }
@Test public void testCollidingImportsWithJavaLang() { final String cls = ClassBuilder.define("my.test.Clazz") .publicScope() .body() .privateField("i", org.jboss.errai.codegen.test.model.Integer.class) .finish() .privateField("j", Integer.class) .finish() .toJavaString(); assertEquals("failed to generate class with colliding imports", CLASS_WITH_COLLIDING_IMPORTS_WITH_JAVA_LANG, cls); }
@Test public void testCollidingImportsWithJavaLangFirst() { final String cls = ClassBuilder.define("my.test.Clazz") .publicScope() .body() .privateField("i", Integer.class) .finish() .privateField("j", org.jboss.errai.codegen.test.model.Integer.class) .finish() .toJavaString(); assertEquals("failed to generate class with colliding imports", CLASS_WITH_COLLIDING_IMPORTS_WITH_JAVA_LANG_FIRST, cls); }
classBuilder.privateField(entityTypeVarName, ErraiEntityType.class).finish();
@Test public void testDefineClassImplementingInterface() { final String cls = ClassBuilder.define("org.foo.Bar") .publicScope() .implementsInterface(Serializable.class) .body() .privateField("name", String.class) .finish() .toJavaString(); System.out.println(cls); assertEquals("failed to generate class definition implementing an interface", CLASS_IMPLEMENTING_INTERFACE, cls); }
@Test public void testDefineClassImplementingMultipleInterfaces() { final String cls = ClassBuilder.define("org.foo.Bar") .publicScope() .implementsInterface(Serializable.class) .implementsInterface(Cloneable.class) .body() .privateField("name", String.class) .finish() .toJavaString(); assertEquals("failed to generate class definition implementing multiple interfaces", CLASS_IMPLEMENTING_MULTIPLE_INTERFACES, cls); }
@Test public void testCollidingImportsWithInnerClass() { final String cls = ClassBuilder.define("my.test.Clazz") .publicScope() .implementsInterface(org.jboss.errai.codegen.test.model.TestInterface.class) .implementsInterface(TestInterface.class) .implementsInterface(Serializable.class) .body() .privateField("name", String.class) .finish() .toJavaString(); assertEquals("failed to generate class with colliding imports", CLASS_WITH_COLLIDING_IMPORTS_WITH_INNER_CLASS, cls); }
@Test public void testCollidingImportsWithInnerClassFirst() { final String cls = ClassBuilder.define("my.test.Clazz") .publicScope() .implementsInterface(TestInterface.class) .implementsInterface(org.jboss.errai.codegen.test.model.TestInterface.class) .implementsInterface(Serializable.class) .body() .privateField("name", String.class) .finish() .toJavaString(); assertEquals("failed to generate class with colliding imports", CLASS_WITH_COLLIDING_IMPORTS_WITH_INNER_CLASS_FIRST, cls); }
builder.privateField(proxyVar, toProxy).finish(); builder.privateField(stateVar, boolean.class).finish(); builder.privateField(entry.getValue().getEncodedProperty(), entry.getValue().getType()).finish(); builder.packageMethod(void.class, "$set_" + entry.getKey(), Parameter.of(entry.getValue().getType(), "o")) .append(Stmt.loadVariable(entry.getValue().getEncodedProperty()).assignValue(Refs.get("o")))
builder.privateField(proxyVar, toProxy).finish(); builder.privateField(stateVar, boolean.class).finish(); builder.privateField(entry.getValue().getEncodedProperty(), entry.getValue().getType()).finish(); builder.packageMethod(void.class, "$set_" + entry.getKey(), Parameter.of(entry.getValue().getType(), "o")) .append(Stmt.loadVariable(entry.getValue().getEncodedProperty()).assignValue(Refs.get("o")))
/** Regression test for ERRAI-363. */ @Test public void testReferenceToAnonymousClassMember() throws Exception { ClassStructureBuilder<?> builder = ClassBuilder.define("com.foo.A").publicScope().body(); builder.privateMethod(void.class, "method") .append(ObjectBuilder.newInstanceOf(Runnable.class).extend() .privateField("memberOfRunnable", Object.class).finish() .publicOverridesMethod("run").append(Stmt.loadVariable("memberOfRunnable").invoke("hashCode")).finish() .finish()) .finish(); String javaString = builder.toJavaString(); assertEquals("package com.foo; public class A { private void method() { new Runnable() { private Object memberOfRunnable; public void run() { memberOfRunnable.hashCode(); } }; } }", javaString); }
@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); }
@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")))