public CodeTreeBuilder returnDefault() { ExecutableElement method = findMethod(); if (ElementUtils.isVoid(method.getReturnType())) { returnStatement(); } else { startReturn().defaultValue(method.getReturnType()).end(); } return this; }
public CodeTreeBuilder returnDefault() { ExecutableElement method = findMethod(); if (ElementUtils.isVoid(method.getReturnType())) { returnStatement(); } else { startReturn().defaultValue(method.getReturnType()).end(); } return this; }
private void addExplodeLoop(final CodeTreeBuilder builder, SpecializationGroup originalGroup) { for (SpecializationData implemented : originalGroup.collectSpecializations()) { if (implemented.getMaximumNumberOfInstances() > 1) { ((CodeExecutableElement) builder.findMethod()).getAnnotationMirrors().add(createExplodeLoop()); break; } } }
public CodeTreeBuilder startReturn() { ExecutableElement method = findMethod(); if (method != null && ElementUtils.isVoid(method.getReturnType())) { startGroup(); registerCallBack(new EndCallback() { @Override public void beforeEnd() { string(";").newLine(); // complete statement to execute } @Override public void afterEnd() { string("return").string(";").newLine(); // emit a return; } }); return this; } else { return startStatement().string("return "); } }
public CodeTreeBuilder startReturn() { ExecutableElement method = findMethod(); if (method != null && ElementUtils.isVoid(method.getReturnType())) { startGroup(); registerCallBack(new EndCallback() { @Override public void beforeEnd() { string(";").newLine(); // complete statement to execute } @Override public void afterEnd() { string("return").string(";").newLine(); // emit a return; } }); return this; } else { return startStatement().string("return "); } }
private CodeTree wrapInAMethod(CodeTreeBuilder parent, SpecializationGroup group, FrameState frameState, String suffix, CodeTree codeTree) { CodeExecutableElement parentMethod = (CodeExecutableElement) parent.findMethod(); CodeTypeElement parentClass = (CodeTypeElement) parentMethod.getEnclosingElement(); String name = parentMethod.getSimpleName().toString() + "_" + suffix + (boxingSplitIndex++); CodeExecutableElement method = parentClass.add( frameState.createMethod(modifiers(Modifier.PRIVATE), parentMethod.getReturnType(), name, FRAME_VALUE, STATE_VALUE)); CodeTreeBuilder builder = method.createBuilder(); builder.tree(codeTree); method.getThrownTypes().addAll(parentMethod.getThrownTypes()); addExplodeLoop(builder, group); CodeTreeBuilder parentBuilder = parent.create(); parentBuilder.startReturn(); parentBuilder.startCall(method.getSimpleName().toString()); frameState.addReferencesTo(parentBuilder, FRAME_VALUE, STATE_VALUE); parentBuilder.end(); parentBuilder.end(); return parentBuilder.build(); }