@Override public void generate(GeneratorContext context, SourceWriter writer, MethodReference methodRef) throws IOException { JSBodyRepository emitterRepository = context.getService(JSBodyRepository.class); JSBodyEmitter emitter = emitterRepository.emitters.get(methodRef); emitter.emit(context, writer, methodRef); } }
private void generateCreateMetadata(GeneratorContext context, SourceWriter writer) throws IOException { ReflectionDependencyListener reflection = context.getService(ReflectionDependencyListener.class); for (String className : reflection.getClassesWithReflectableFields()) { generateCreateFieldsForClass(context, writer, className); } for (String className : reflection.getClassesWithReflectableMethods()) { generateCreateMethodsForClass(context, writer, className); } }
private void generateCreateFieldsForClass(GeneratorContext context, SourceWriter writer, String className) throws IOException { ReflectionDependencyListener reflection = context.getService(ReflectionDependencyListener.class); Set<String> accessibleFields = reflection.getAccessibleFields(className); ClassReader cls = context.getClassSource().get(className); if (cls == null) { return; } writer.appendClass(className).append(".$meta.fields").ws().append('=').ws().append('[').indent(); generateCreateMembers(writer, cls.getFields(), field -> { appendProperty(writer, "type", false, () -> writer.append(context.typeToClassString(field.getType()))); appendProperty(writer, "getter", false, () -> { if (accessibleFields != null && accessibleFields.contains(field.getName())) { renderGetter(writer, field); } else { writer.append("null"); } }); appendProperty(writer, "setter", false, () -> { if (accessibleFields != null && accessibleFields.contains(field.getName())) { renderSetter(writer, field); } else { writer.append("null"); } }); }); writer.outdent().append("];").softNewLine(); }
private void generateCreateMethodsForClass(GeneratorContext context, SourceWriter writer, String className) throws IOException { ReflectionDependencyListener reflection = context.getService(ReflectionDependencyListener.class); Set<MethodDescriptor> accessibleMethods = reflection.getAccessibleMethods(className);
@Override public void generate(GeneratorContext context, SourceWriter writer, MethodReference methodRef) throws IOException { JSBodyRepository emitterRepository = context.getService(JSBodyRepository.class); JSBodyEmitter emitter = emitterRepository.emitters.get(methodRef); emitter.emit(context, writer, methodRef); } }