public static StringStatement of(final String statement, final Class<?> returnType) { return of(statement, MetaClassFactory.get(returnType)); }
public static StringStatement of(final String statement, final Class<?> returnType) { return of(statement, MetaClassFactory.get(returnType)); }
private BlockBuilder<ElseBlockBuilder> updateGetMarshallerConditionalBlock(BlockBuilder<ElseBlockBuilder> getMarshallerConditionalBlock, final String helperMethodName) { getMarshallerConditionalBlock = getMarshallerConditionalBlock.finish().elseif_(StringStatement.of(helperMethodName + "(a0)", boolean.class)) .append(Stmt.loadVariable(MARSHALLERS_VAR).invoke("get", Stmt.loadVariable("a0")).returnValue()); return getMarshallerConditionalBlock; }
private BlockBuilder<ElseBlockBuilder> updateGetMarshallerConditionalBlock(BlockBuilder<ElseBlockBuilder> getMarshallerConditionalBlock, final String helperMethodName) { getMarshallerConditionalBlock = getMarshallerConditionalBlock.finish().elseif_(StringStatement.of(helperMethodName + "(a0)", boolean.class)) .append(Stmt.loadVariable(MARSHALLERS_VAR).invoke("get", Stmt.loadVariable("a0")).returnValue()); return getMarshallerConditionalBlock; }
@Override public void makeConstructorAccessible(final ClassStructureBuilder<?> classBuilder, final MetaConstructor constructor) { final DefParameters methodDefParms = DefParameters.from(constructor); Annotation[] annotations = NO_ANNOTATIONS; for (MetaParameter p : constructor.getParameters()) { if (p.getType().getCanonicalName().equals("long")) { annotations = new Annotation[] { UNSAFE_NATIVE_LONG_ANNOTATION }; } } classBuilder.publicMethod(constructor.getReturnType(), PrivateAccessUtil.getPrivateMethodName(constructor)) .annotatedWith(annotations) .parameters(methodDefParms) .modifiers(Modifier.Static, Modifier.JSNI) .body() ._(StringStatement.of(JSNIUtil.methodAccess(constructor))) .finish(); }
@Override public void makeConstructorAccessible(final ClassStructureBuilder<?> classBuilder, final MetaConstructor constructor) { final DefParameters methodDefParms = DefParameters.from(constructor); Annotation[] annotations = NO_ANNOTATIONS; for (MetaParameter p : constructor.getParameters()) { if (p.getType().getCanonicalName().equals("long")) { annotations = new Annotation[] { UNSAFE_NATIVE_LONG_ANNOTATION }; } } classBuilder.publicMethod(constructor.getReturnType(), PrivateAccessUtil.getPrivateMethodName(constructor)) .annotatedWith(annotations) .parameters(methodDefParms) .modifiers(Modifier.Static, Modifier.JSNI) .body() ._(StringStatement.of(JSNIUtil.methodAccess(constructor))) .finish(); }
@Override public void makeMethodAccessible(final ClassStructureBuilder<?> classBuilder, final MetaMethod method, final Modifier[] modifiers) { final MetaMethod erasedMethod = method.getDeclaringClass().getErased().getDeclaredMethod(method.getName(), getErasedParamterTypes(method)); final List<Parameter> wrapperDefParms = new ArrayList<Parameter>(); if (!erasedMethod.isStatic()) { wrapperDefParms.add(Parameter.of(erasedMethod.getDeclaringClass().getErased(), "instance")); } final List<Parameter> methodDefParms = DefParameters.from(erasedMethod).getParameters(); wrapperDefParms.addAll(methodDefParms); Annotation[] annotations = NO_ANNOTATIONS; for (MetaParameter p : erasedMethod.getParameters()) { if (p.getType().getCanonicalName().equals("long")) { annotations = new Annotation[] { UNSAFE_NATIVE_LONG_ANNOTATION }; } } if (erasedMethod.getReturnType().getCanonicalName().equals("long")) { annotations = new Annotation[] { UNSAFE_NATIVE_LONG_ANNOTATION }; } classBuilder.publicMethod(erasedMethod.getReturnType(), PrivateAccessUtil.getPrivateMethodName(method)) .annotatedWith(annotations) .parameters(DefParameters.fromParameters(wrapperDefParms)) .modifiers(appendJsni(modifiers)) .body() ._(StringStatement.of(JSNIUtil.methodAccess(erasedMethod))) .finish(); }
@Override public void makeMethodAccessible(final ClassStructureBuilder<?> classBuilder, final MetaMethod method, final Modifier[] modifiers) { final MetaMethod erasedMethod = method.getDeclaringClass().getErased().getDeclaredMethod(method.getName(), getErasedParamterTypes(method)); final List<Parameter> wrapperDefParms = new ArrayList<Parameter>(); if (!erasedMethod.isStatic()) { wrapperDefParms.add(Parameter.of(erasedMethod.getDeclaringClass().getErased(), "instance")); } final List<Parameter> methodDefParms = DefParameters.from(erasedMethod).getParameters(); wrapperDefParms.addAll(methodDefParms); Annotation[] annotations = NO_ANNOTATIONS; for (MetaParameter p : erasedMethod.getParameters()) { if (p.getType().getCanonicalName().equals("long")) { annotations = new Annotation[] { UNSAFE_NATIVE_LONG_ANNOTATION }; } } if (erasedMethod.getReturnType().getCanonicalName().equals("long")) { annotations = new Annotation[] { UNSAFE_NATIVE_LONG_ANNOTATION }; } classBuilder.publicMethod(erasedMethod.getReturnType(), PrivateAccessUtil.getPrivateMethodName(method)) .annotatedWith(annotations) .parameters(DefParameters.fromParameters(wrapperDefParms)) .modifiers(appendJsni(modifiers)) .body() ._(StringStatement.of(JSNIUtil.methodAccess(erasedMethod))) .finish(); }
@Override public void createReadableField(final MetaClass type, final ClassStructureBuilder<?> classBuilder, final MetaField field, final Modifier[] modifiers) { final MethodBlockBuilder<? extends ClassStructureBuilder<?>> instance = classBuilder.packageMethod(type, PrivateAccessUtil.getPrivateFieldAccessorName(field)); if (!field.isStatic()) { instance.parameters(DefParameters.fromParameters(Parameter.of(field.getDeclaringClass().getErased(), "instance"))); } if (type.getCanonicalName().equals("long")) { instance.annotatedWith(UNSAFE_NATIVE_LONG_ANNOTATION); } instance.modifiers(appendJsni(modifiers)) .body() ._(StringStatement.of("return " + JSNIUtil.fieldAccess(field))) .finish(); }
@Override public void createReadableField(final MetaClass type, final ClassStructureBuilder<?> classBuilder, final MetaField field, final Modifier[] modifiers) { final MethodBlockBuilder<? extends ClassStructureBuilder<?>> instance = classBuilder.packageMethod(type, PrivateAccessUtil.getPrivateFieldAccessorName(field)); if (!field.isStatic()) { instance.parameters(DefParameters.fromParameters(Parameter.of(field.getDeclaringClass().getErased(), "instance"))); } if (type.getCanonicalName().equals("long")) { instance.annotatedWith(UNSAFE_NATIVE_LONG_ANNOTATION); } instance.modifiers(appendJsni(modifiers)) .body() ._(StringStatement.of("return " + JSNIUtil.fieldAccess(field))) .finish(); }
@Override public void createWritableField(final MetaClass type, final ClassStructureBuilder<?> classBuilder, final MetaField field, final Modifier[] modifiers) { final MethodCommentBuilder<? extends ClassStructureBuilder<?>> methodBuilder = classBuilder.packageMethod(void.class, PrivateAccessUtil.getPrivateFieldAccessorName(field)); if (type.getCanonicalName().equals("long")) { methodBuilder.annotatedWith(UNSAFE_NATIVE_LONG_ANNOTATION); } if (!field.isStatic()) { methodBuilder .parameters(DefParameters.fromParameters(Parameter.of(field.getDeclaringClass().getErased(), "instance"), Parameter.of(type, "value"))); } else { methodBuilder .parameters(DefParameters.fromParameters(Parameter.of(type, "value"))); } methodBuilder.modifiers(appendJsni(modifiers)) .body() ._(StringStatement.of(JSNIUtil.fieldAccess(field) + " = value")) .finish(); }
@Override public void createWritableField(final MetaClass type, final ClassStructureBuilder<?> classBuilder, final MetaField field, final Modifier[] modifiers) { final MethodCommentBuilder<? extends ClassStructureBuilder<?>> methodBuilder = classBuilder.packageMethod(void.class, PrivateAccessUtil.getPrivateFieldAccessorName(field)); if (type.getCanonicalName().equals("long")) { methodBuilder.annotatedWith(UNSAFE_NATIVE_LONG_ANNOTATION); } if (!field.isStatic()) { methodBuilder .parameters(DefParameters.fromParameters(Parameter.of(field.getDeclaringClass().getErased(), "instance"), Parameter.of(type, "value"))); } else { methodBuilder .parameters(DefParameters.fromParameters(Parameter.of(type, "value"))); } methodBuilder.modifiers(appendJsni(modifiers)) .body() ._(StringStatement.of(JSNIUtil.fieldAccess(field) + " = value")) .finish(); }
.append(Stmt.declareVariable(RemoteCallback.class).named("intCallback") .initializeWith(Stmt.loadVariable("interceptorCallback"))) .append(StringStatement.of("setResult(response)")) .append(Stmt.loadVariable("intCallback").invoke("callback", StringStatement.of("getResult()", Object.class))) .append(Stmt.loadVariable("providedCallback").invoke("callback", StringStatement.of("getResult()", Object.class))) .finish() .finish()) Stmt.if_( BooleanExpressionBuilder.create( StringStatement.of("getResult()", Object.class), BooleanOperator.NotEquals, Stmt .loadLiteral(null))) .append( Stmt.loadVariable("remoteCallback").invoke("callback", StringStatement.of("getResult()", Object.class))) .append(Stmt.load(false).returnValue()) .finish()
.append(Stmt.declareVariable(RemoteCallback.class).named("intCallback") .initializeWith(Stmt.loadVariable("interceptorCallback"))) .append(StringStatement.of("setResult(response)")) .append(Stmt.loadVariable("intCallback").invoke("callback", StringStatement.of("getResult()", Object.class))) .append(Stmt.loadVariable("providedCallback").invoke("callback", StringStatement.of("getResult()", Object.class))) .finish() .finish()) Stmt.if_( BooleanExpressionBuilder.create( StringStatement.of("getResult()", Object.class), BooleanOperator.NotEquals, Stmt .loadLiteral(null))) .append( Stmt.loadVariable("remoteCallback").invoke("callback", StringStatement.of("getResult()", Object.class))) .append(Stmt.load(false).returnValue()) .finish()