private Statement generateInterceptorLogic(ClassStructureBuilder<?> classBuilder, MetaMethod method, Statement requestLogic, List<Statement> parmVars, List<Class<?>> interceptors) { final Statement callContext = ProxyUtil.generateProxyMethodCallContext(context, RemoteCallContext.class, classBuilder.getClassDefinition(), method, requestLogic, interceptors).finish(); return Stmt.try_() .append( Stmt.declareVariable(CallContextStatus.class).asFinal().named("status").initializeWith( Stmt.newObject(CallContextStatus.class).withParameters(interceptors.toArray()))) .append( Stmt.declareVariable(RemoteCallContext.class).asFinal().named("callContext") .initializeWith(callContext)) .append( Stmt.loadVariable("callContext").invoke("setParameters", Stmt.newArray(Object.class).initialize(parmVars.toArray()))) .append( Stmt.loadVariable("callContext").invoke("proceed")) .finish() .catch_(Throwable.class, "throwable") .append( If.cond(Bool.notEquals(Stmt.loadVariable("errorCallback"), Stmt.loadLiteral(null))) .append( If.cond(Stmt.loadVariable("errorCallback").invoke("error", Stmt.load(null), Variable.get("throwable"))) .append(Stmt.loadVariable("this").invoke("invokeDefaultErrorHandlers", Variable.get("throwable"))) .finish() ).finish() .else_() .append(Stmt.loadVariable("this").invoke("invokeDefaultErrorHandlers", Variable.get("throwable"))) .finish()) .finish(); }
private static Statement demarshal(final MetaClass type, final Statement statement) { if (type.equals(statement.getType())) { return statement; } if (MetaClassFactory.get(void.class).equals(type)) { return Stmt.load(null); } if (MetaClassFactory.get(Date.class).equals(type)) { return Stmt.newObject(Date.class, statement); } return Stmt.invokeStatic(type.asBoxed(), "valueOf", statement); } }
@Override public void generateDecorator(Decorable decorable, FactoryController controller) { controller.addInvokeBefore(decorable.getAsMethod(), Stmt.invokeStatic(TestDataCollector.class, "beforeInvoke", Refs.get("text"), Refs.get("blah"))); controller.addInvokeAfter(decorable.getAsMethod(), Stmt.invokeStatic(TestDataCollector.class, "afterInvoke", Refs.get("text"), Refs.get("blah"))); final Statement foobar = controller.addProxyProperty("foobar", String.class, Stmt.load("foobie!")); controller.addInvokeAfter(decorable.getAsMethod(), Stmt.invokeStatic(TestDataCollector.class, "property", "foobar", foobar) ); controller.addInitializationStatements(Arrays.<Statement>asList(Stmt.loadVariable("instance").invoke("setFlag", true))); controller.addDestructionStatements(Arrays.<Statement>asList(Stmt.loadVariable("instance").invoke("setFlag", false))); } }
public static BlockBuilder<ElseBlockBuilder> objEquals(final Object lhs, final Object rhs) { return StatementBuilder.create().if_(Bool.expr(Stmt.load(lhs).invoke("equals", rhs))); }
public static BlockBuilder<ElseBlockBuilder> objNotEquals(final Object lhs, final Object rhs) { return StatementBuilder.create().if_(Bool.notExpr(Bool.expr(Stmt.load(lhs).invoke("equals", rhs)))); }
@Test public void testPassBitwiseToMethodParameter() { final Statement bitwiseStatement = Bitwise.or(Stmt.load(1), Stmt.load(2), Expr.qualify(Bitwise.and(Stmt.load(10), Stmt.load(20)))); final String generate = Stmt.newObject(Integer.class).withParameters(bitwiseStatement).generate(Context.create()); assertEquals("new Integer(1 | 2 | (10 & 20))", generate); }
@Test public void testSetEncoding() { Set<String> s = new LinkedHashSet<String>(); s.add("foo"); s.add("bar"); assertEquals("new java.util.HashSet() {\n" + " {\n" + " add(\"foo\");\n" + " add(\"bar\");\n" + " }\n" + "}", Stmt.load(s).generate(Context.create())); }
@Test public void testListEncoding() { List<String> s = new ArrayList<String>(); s.add("foo"); s.add("bar"); assertEquals("new java.util.ArrayList() {\n" + " {\n" + " add(\"foo\");\n" + " add(\"bar\");\n" + " }\n" + "}", Stmt.load(s).generate(Context.create())); }
@Test public void testMapEncoding() { Map<String, String> s = new LinkedHashMap<String, String>(); s.put("foo", "fooz"); s.put("bar", "barz"); assertEquals("new java.util.HashMap() {\n" + " {\n" + " put(\"foo\", \"fooz\");\n" + " put(\"bar\", \"barz\");\n" + " }\n" + "}", Stmt.load(s).generate(Context.create())); } }
public TernaryStatement marshallEnum(final Statement valueStatement, final MetaClass toType) { StringExpression s = Str.expr("{\"", StringOperator.Concat, SerializationParts.ENCODED_TYPE); s = Str.expr(s, StringOperator.Concat, "\":\""); s = Str.expr(s, StringOperator.Concat, toType.getFullyQualifiedName()); s = Str.expr(s, StringOperator.Concat, "\",\""); s = Str.expr(s, StringOperator.Concat, SerializationParts.ENUM_STRING_VALUE); s = Str.expr(s, StringOperator.Concat, "\":\""); s = Str.expr(s, StringOperator.Concat, Stmt.nestedCall(valueStatement).invoke("name")); s = Str.expr(s, StringOperator.Concat, "\"}"); final TernaryStatement ternaryStatement = new TernaryStatement( Bool.isNotNull(valueStatement), Stmt.load(s), Stmt.load("null")); return ternaryStatement; }
public TernaryStatement marshallEnum(final Statement valueStatement, final MetaClass toType) { StringExpression s = Str.expr("{\"", StringOperator.Concat, SerializationParts.ENCODED_TYPE); s = Str.expr(s, StringOperator.Concat, "\":\""); s = Str.expr(s, StringOperator.Concat, toType.getFullyQualifiedName()); s = Str.expr(s, StringOperator.Concat, "\",\""); s = Str.expr(s, StringOperator.Concat, SerializationParts.ENUM_STRING_VALUE); s = Str.expr(s, StringOperator.Concat, "\":\""); s = Str.expr(s, StringOperator.Concat, Stmt.nestedCall(valueStatement).invoke("name")); s = Str.expr(s, StringOperator.Concat, "\"}"); final TernaryStatement ternaryStatement = new TernaryStatement( Bool.isNotNull(valueStatement), Stmt.load(s), Stmt.load("null")); return ternaryStatement; }
public static BlockBuilder<ElseBlockBuilder> safeObjEquals(final Object lhs, final Object rhs) { return StatementBuilder.create().if_(Bool.expr(Bool.and(Bool.isNotNull(lhs), Bool.expr(Stmt.load(lhs).invoke("equals", rhs))))); }
public static BlockBuilder<ElseBlockBuilder> safeObjEquals(final Object lhs, final Object rhs) { return StatementBuilder.create().if_(Bool.expr(Bool.and(Bool.isNotNull(lhs), Bool.expr(Stmt.load(lhs).invoke("equals", rhs))))); }
public static BlockBuilder<ElseBlockBuilder> safeObjNotEquals(final Object lhs, final Object rhs) { return StatementBuilder.create().if_( Bool.expr(Bool.and(Bool.isNotNull(lhs), Bool.expr(Bool.notExpr(Stmt.load(lhs).invoke("equals", rhs)))))); }
public static BlockBuilder<ElseBlockBuilder> safeObjNotEquals(final Object lhs, final Object rhs) { return StatementBuilder.create().if_( Bool.expr(Bool.and(Bool.isNotNull(lhs), Bool.expr(Bool.notExpr(Stmt.load(lhs).invoke("equals", rhs)))))); }
public void marshallEnum(final ContextualStatementBuilder bb, final Statement valueStatement, final MetaClass toType) { final Implementations.StringBuilderBuilder internalSBB = Implementations.newStringBuilder() .append("{\"").append(SerializationParts.ENCODED_TYPE) .append( "\":\"").append( toType.getFullyQualifiedName()).append("\",\"") .append(SerializationParts.ENUM_STRING_VALUE).append("\":\"") .append(Stmt.nestedCall(valueStatement).invoke("name")).append("\"}"); final TernaryStatement ternaryStatement = new TernaryStatement( Bool.isNotNull(valueStatement), internalSBB, Stmt.load("null")); bb.invoke("append", ternaryStatement); }
public void marshallEnum(final ContextualStatementBuilder bb, final Statement valueStatement, final MetaClass toType) { final Implementations.StringBuilderBuilder internalSBB = Implementations.newStringBuilder() .append("{\"").append(SerializationParts.ENCODED_TYPE) .append( "\":\"").append( toType.getFullyQualifiedName()).append("\",\"") .append(SerializationParts.ENUM_STRING_VALUE).append("\":\"") .append(Stmt.nestedCall(valueStatement).invoke("name")).append("\"}"); final TernaryStatement ternaryStatement = new TernaryStatement( Bool.isNotNull(valueStatement), internalSBB, Stmt.load("null")); bb.invoke("append", ternaryStatement); }