@Override public ObjectBuilder newObject(final Class<?> type) { return ObjectBuilder.newInstanceOf(type, context, callElementBuilder); }
final Statement proxyProvider = ObjectBuilder.newInstanceOf(ProxyProvider.class) .extend() .publicOverridesMethod("getProxy")
@Override public Statement newObject(final Class<?> type, final Object... parameters) { return ObjectBuilder.newInstanceOf(type, context, callElementBuilder) .withParameters(parameters); }
@Override public Statement newObject(final MetaClass type, final Object... parameters) { return ObjectBuilder.newInstanceOf(type, context, callElementBuilder) .withParameters(parameters); }
@Override public Statement newObject(final TypeLiteral<?> type, final Object... parameters) { return ObjectBuilder.newInstanceOf(type, context, callElementBuilder) .withParameters(parameters); }
@Override public Statement newObject(final Class<?> type, final Object... parameters) { return ObjectBuilder.newInstanceOf(type, context, callElementBuilder) .withParameters(parameters); }
private List<Statement> contextLocalVarDeclarations(final Collection<MetaClass> scopeContextTypes) { final List<Statement> declarations = new ArrayList<>(); for (final MetaClass scopeContextImpl : scopeContextTypes) { if (!scopeContextImpl.isDefaultInstantiable()) { throw new RuntimeException( "The @ScopeContext " + scopeContextImpl.getName() + " must have a public, no-args constructor."); } declarations.add(declareFinalVariable(getContextVarName(scopeContextImpl), Context.class, newInstanceOf(scopeContextImpl))); } return declarations; }
@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(); } }
private ObjectBuilder createAnnoImpl(final MetaClass annoType) { final AnonymousClassStructureBuilder builder = ObjectBuilder.newInstanceOf(annoType).extend(); Arrays.stream(annoType.getDeclaredMethods()) .forEach(m -> builder.publicOverridesMethod(m.getName()) .append(castTo(m.getReturnType(), loadVariable("parameters").invoke("get", m.getName())).returnValue()).finish()); builder.publicOverridesMethod("annotationType").append(loadLiteral(annoType).returnValue()).finish(); return builder.finish(); }
private static Statement supplierOf(final Statement value) { return newInstanceOf(parameterizedAs(Supplier.class, typeParametersOf(value.getType()))) .extend() .publicOverridesMethod("get") .append(Stmt.nestedCall(value).returnValue()) .finish() .finish(); }
@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(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(); } }
private static Statement supplierOf(final Statement value) { return newInstanceOf(parameterizedAs(Supplier.class, typeParametersOf(value.getType()))) .extend() .publicOverridesMethod("get") .append(Stmt.nestedCall(value).returnValue()) .finish() .finish(); }
@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(); } }
private Object createHandlerForMethod(final MetaMethod method) { return ObjectBuilder .newInstanceOf(PropertyChangeHandler.class) .extend() .publicOverridesMethod("onPropertyChange", finalOf(PropertyChangeEvent.class, "event")) .append(castTo(method.getDeclaringClass(), loadVariable("agent").loadField("target")).invoke(method, loadVariable("event"))) .finish() .finish(); }
private Object createHandlerForMethod(final MetaMethod method) { return ObjectBuilder .newInstanceOf(PropertyChangeHandler.class) .extend() .publicOverridesMethod("onPropertyChange", finalOf(PropertyChangeEvent.class, "event")) .append(castTo(method.getDeclaringClass(), loadVariable("agent").loadField("target")).invoke(method, loadVariable("event"))) .finish() .finish(); }
@Test public void testAddVariableWithObjectInitializationWithStringTypeInference() { Context ctx = ContextBuilder.create().addVariable("str", ObjectBuilder.newInstanceOf(String.class)).getContext(); VariableReference str = ctx.getVariable("str"); assertEquals("Wrong variable name", "str", str.getName()); // variable type and value cannot be verified before initialization statement was generated. Variable v = ctx.getVariables().get("str"); v.generate(ctx); assertNotNull("Value could not be generated", v.getValue()); Assert.assertEquals("Wrong variable type", MetaClassFactory.get(String.class), v.getType()); } }
@Test public void testAddVariableWithObjectInitializationWithExactTypeProvided() { Context ctx = ContextBuilder.create().addVariable("str", String.class, ObjectBuilder.newInstanceOf(String.class)).getContext(); VariableReference str = ctx.getVariable("str"); assertEquals("Wrong variable name", "str", str.getName()); Assert.assertEquals("Wrong variable type", MetaClassFactory.get(String.class), str.getType()); // variable value cannot be verified before initialization statement was generated. Variable v = ctx.getVariables().get("str"); v.generate(ctx); assertNotNull("Value could not be generated", v.getValue()); }
@Test public void testDeclareVariableWithObjectInitializationWithExactTypeProvided() { final Context ctx = Context.create(); final String s = StatementBuilder.create().declareVariable("str", String.class, ObjectBuilder.newInstanceOf(String.class)).generate(ctx); assertEquals("failed to generate variable declaration with object initialization and type provided", "String str = new String();", s); final VariableReference str = ctx.getVariable("str"); assertEquals("Wrong variable name", "str", str.getName()); Assert.assertEquals("Wrong variable type", MetaClassFactory.get(String.class), str.getType()); }
/** 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); }