public AnonymousClassStructureBuilder extend() { return new AnonymousClassStructureBuilderImpl(type, new BuildCallback<ObjectBuilder>() { @Override public ObjectBuilder callback(final Statement statement) { extendsBlock = statement; return ObjectBuilder.this; } @Override public Context getParentContext() { return context; } }); }
@Override public String generate(final Context context) { context.attachClass(getClassDefinition()); return doGenerate(context); } });
@Override public BlockBuilder<AnonymousClassStructureBuilder> publicOverridesMethod(final String name, final Parameter... args) { final List<MetaClass> types = new ArrayList<MetaClass>(); Arrays.stream(args).forEach(a -> types.add(a.getType())); final MetaMethod method = classDefinition.getSuperClass() .getBestMatchingMethod(name, types.toArray(new MetaClass[args.length])); if (method == null) throw new UndefinedMethodException("Can't override (inherited method not found):" + classDefinition.getFullyQualifiedNameWithTypeParms() + "." + name + "(" + types + ")"); return publicOverridesMethod(method, DefParameters.fromParameters(args)); }
@Override public String generate(final Context context) { context.attachClass(getClassDefinition()); return doGenerate(context); } });
@Override public BlockBuilder<AnonymousClassStructureBuilder> publicOverridesMethod(final String name, final Parameter... args) { final List<MetaClass> types = new ArrayList<MetaClass>(); Arrays.stream(args).forEach(a -> types.add(a.getType())); final MetaMethod method = classDefinition.getSuperClass() .getBestMatchingMethod(name, types.toArray(new MetaClass[args.length])); if (method == null) throw new UndefinedMethodException("Can't override (inherited method not found):" + classDefinition.getFullyQualifiedNameWithTypeParms() + "." + name + "(" + types + ")"); return publicOverridesMethod(method, DefParameters.fromParameters(args)); }
private String doGenerate(final Context context) { if (generatedCache != null) return generatedCache; try { if (deferredGenerateCallbacks == null) return null; final Context subContext = Context.create(context); classDefinition.getContext().getDeclaredVariables().forEach((v) -> subContext.addVariable(v)); subContext.addVariable(Variable.create("this", getClassDefinition())); classDefinition.setContext(subContext); final StringBuilder buf = new StringBuilder(256); buf.append(classDefinition.membersToString().trim()).append("\n"); deferredGenerateCallbacks.forEach(c -> buf.append(c.doGenerate(subContext).trim()).append('\n')); return generatedCache = buf.toString().trim(); } catch (final Exception e) { GenUtil.throwIfUnhandled("while generating: " + classDefinition.getFullyQualifiedName(), e); return null; } }
public AnonymousClassStructureBuilder extend() { return new AnonymousClassStructureBuilderImpl(type, new BuildCallback<ObjectBuilder>() { @Override public ObjectBuilder callback(final Statement statement) { extendsBlock = statement; return ObjectBuilder.this; } @Override public Context getParentContext() { return context; } }); }
private String doGenerate(final Context context) { if (generatedCache != null) return generatedCache; try { if (deferredGenerateCallbacks == null) return null; final Context subContext = Context.create(context); classDefinition.getContext().getDeclaredVariables().forEach((v) -> subContext.addVariable(v)); subContext.addVariable(Variable.create("this", getClassDefinition())); classDefinition.setContext(subContext); final StringBuilder buf = new StringBuilder(256); buf.append(classDefinition.membersToString().trim()).append("\n"); deferredGenerateCallbacks.forEach(c -> buf.append(c.doGenerate(subContext).trim()).append('\n')); return generatedCache = buf.toString().trim(); } catch (final Exception e) { GenUtil.throwIfUnhandled("while generating: " + classDefinition.getFullyQualifiedName(), e); return null; } }