@Override public void emit(InjectorContext context) throws IOException { emit(context.getWriter(), index -> context.writeExpr(context.getArgument(index))); }
private void writeStringExpr(InjectorContext context, Expr expr) throws IOException { if (expr instanceof ConstantExpr) { String str = (String) ((ConstantExpr) expr).getValue(); context.getWriter().append('"'); context.writeEscaped(str); context.getWriter().append('"'); return; } context.getWriter().append("$rt_ustr("); context.writeExpr(expr); context.getWriter().append(")"); }
@Override public ClassLoader getClassLoader() { return injectorContext.getClassLoader(); }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { context.writeExpr(context.getArgument(0)); } }
@Override public void emit(InjectorContext context) throws IOException { AstWriter astWriter = new AstWriter(context.getWriter()); int paramIndex = 0; if (!isStatic) { int index = paramIndex++; astWriter.declareNameEmitter("this", prec -> context.writeExpr(context.getArgument(index), convert(prec))); } for (int i = 0; i < parameterNames.length; ++i) { int index = paramIndex++; astWriter.declareNameEmitter(parameterNames[i], prec -> context.writeExpr(context.getArgument(index), convert(prec))); } astWriter.hoist(ast); astWriter.print(ast, convert(context.getPrecedence())); }
private void writePropertyAccessor(InjectorContext context, Expr property) throws IOException { if (property instanceof ConstantExpr) { String str = (String) ((ConstantExpr) property).getValue(); if (str.isEmpty()) { context.getWriter().append("[\"\"]"); return; } if (isValidIndentifier(str)) { context.getWriter().append(".").append(str); return; } } context.getWriter().append("[$rt_ustr("); context.writeExpr(property); context.getWriter().append(")]"); }
private void generateSupplyResources(InjectorContext context) throws IOException { SourceWriter writer = context.getWriter(); writer.append("{").indent(); ClassLoader classLoader = context.getClassLoader(); Set<String> resourceSet = new HashSet<>(); SupplierContextImpl supplierContext = new SupplierContextImpl(context);
@Override public Properties getProperties() { return injectorContext.getProperties(); } }
@Override public ListableClassReaderSource getClassSource() { return injectorContext.getClassSource(); }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { SourceWriter writer = context.getWriter(); switch (methodRef.getName()) { case "arrayData": context.writeExpr(context.getArgument(0)); writer.append(".data"); break; case "get": context.writeExpr(context.getArgument(0), Precedence.MEMBER_ACCESS); renderProperty(context.getArgument(1), context); break; case "set": context.writeExpr(context.getArgument(0), Precedence.ASSIGNMENT.next()); renderProperty(context.getArgument(1), context); writer.ws().append('=').ws(); context.writeExpr(context.getArgument(2), Precedence.ASSIGNMENT.next()); break; case "invoke": context.writeExpr(context.getArgument(0), Precedence.GROUPING); renderProperty(context.getArgument(1), context); writer.append('('); for (int i = 2; i < context.argumentCount(); ++i) { if (i > 2) { writer.append(',').ws(); context.writeExpr(context.getArgument(i), Precedence.min()); if (context.getPrecedence().ordinal() >= Precedence.FUNCTION_CALL.ordinal()) { writer.append("(");
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { context.writeExpr(context.getArgument(0)); } }
private void writePropertyAccessor(InjectorContext context, Expr property) throws IOException { if (property instanceof ConstantExpr) { String str = (String) ((ConstantExpr) property).getValue(); if (str.isEmpty()) { context.getWriter().append("[\"\"]"); return; } if (isValidIndentifier(str)) { context.getWriter().append(".").append(str); return; } } context.getWriter().append("[$rt_ustr("); context.writeExpr(property); context.getWriter().append(")]"); }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { switch (methodRef.getName()) { case "toJava": case "fromJava": context.writeExpr(context.getArgument(0)); break; case "arrayFromJava": context.writeExpr(context.getArgument(0)); context.getWriter().append(".data"); break; } } }
@Override public void emit(InjectorContext context) throws IOException { AstWriter astWriter = new AstWriter(context.getWriter()); int paramIndex = 0; if (!isStatic) { int index = paramIndex++; astWriter.declareNameEmitter("this", prec -> context.writeExpr(context.getArgument(index), convert(prec))); } for (int i = 0; i < parameterNames.length; ++i) { int index = paramIndex++; astWriter.declareNameEmitter(parameterNames[i], prec -> context.writeExpr(context.getArgument(index), convert(prec))); } astWriter.hoist(ast); astWriter.print(ast, convert(context.getPrecedence())); }
private void renderProperty(Expr property, InjectorContext context) throws IOException { SourceWriter writer = context.getWriter(); String name = extractPropertyName(property); if (name == null) { writer.append('['); context.writeExpr(property, Precedence.min()); writer.append(']'); } else if (!isIdentifier(name)) { writer.append("[\""); context.writeEscaped(name); writer.append("\"]"); } else { writer.append(".").append(name); } }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { switch (methodRef.getName()) { case "asJavaClass": case "classFromResource": case "objectFromResource": case "marshall": case "getPlatformObject": context.writeExpr(context.getArgument(0)); break; case "initClass": context.writeExpr(context.getArgument(0)); context.getWriter().append(".$clinit()"); break; } }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { SourceWriter writer = context.getWriter(); switch (methodRef.getName()) { case "arrayData": context.writeExpr(context.getArgument(0)); writer.append(".data"); break; case "get": context.writeExpr(context.getArgument(0), Precedence.MEMBER_ACCESS); renderProperty(context.getArgument(1), context); break; case "set": context.writeExpr(context.getArgument(0), Precedence.ASSIGNMENT.next()); renderProperty(context.getArgument(1), context); writer.ws().append('=').ws(); context.writeExpr(context.getArgument(2), Precedence.ASSIGNMENT.next()); break; case "invoke": context.writeExpr(context.getArgument(0), Precedence.GROUPING); renderProperty(context.getArgument(1), context); writer.append('('); for (int i = 2; i < context.argumentCount(); ++i) { if (i > 2) { writer.append(',').ws(); context.writeExpr(context.getArgument(i), Precedence.min()); if (context.getPrecedence().ordinal() >= Precedence.FUNCTION_CALL.ordinal()) { writer.append("(");
private void writeStringExpr(InjectorContext context, Expr expr) throws IOException { if (expr instanceof ConstantExpr) { String str = (String) ((ConstantExpr) expr).getValue(); context.getWriter().append('"'); context.writeEscaped(str); context.getWriter().append('"'); return; } context.getWriter().append("$rt_ustr("); context.writeExpr(expr); context.getWriter().append(")"); }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { switch (methodRef.getName()) { case "getJavaException": context.getWriter().append("$rt_javaException("); context.writeExpr(context.getArgument(0)); context.getWriter().append(")"); break; case "getJSException": context.getWriter().append("$rt_jsException("); context.writeExpr(context.getArgument(0)); context.getWriter().append(")"); break; } } }
private void renderProperty(Expr property, InjectorContext context) throws IOException { SourceWriter writer = context.getWriter(); String name = extractPropertyName(property); if (name == null) { writer.append('['); context.writeExpr(property, Precedence.min()); writer.append(']'); } else if (!isIdentifier(name)) { writer.append("[\""); context.writeEscaped(name); writer.append("\"]"); } else { writer.append(".").append(name); } }