@SuppressWarnings("unchecked") public static <T> CtExpression<T> compileExpression( CtCodeSnippetExpression<T> expr) throws SnippetCompilationError { CtReturn<T> ret = (CtReturn<T>) internalCompileStatement(expr, expr.getFactory().Type().OBJECT); CtExpression<T> returnedExpression = ret.getReturnedExpression(); // this compiled expression is not in a parent, ready to be used returnedExpression.delete(); returnedExpression.setParent(null); return returnedExpression; }
public <T> void visitCtCodeSnippetExpression(final spoon.reflect.code.CtCodeSnippetExpression<T> expression) { spoon.reflect.code.CtCodeSnippetExpression<T> aCtCodeSnippetExpression = expression.getFactory().Core().createCodeSnippetExpression(); this.builder.copy(expression, aCtCodeSnippetExpression); aCtCodeSnippetExpression.setType(this.cloneHelper.clone(expression.getType())); aCtCodeSnippetExpression.setComments(this.cloneHelper.clone(expression.getComments())); aCtCodeSnippetExpression.setAnnotations(this.cloneHelper.clone(expression.getAnnotations())); aCtCodeSnippetExpression.setTypeCasts(this.cloneHelper.clone(expression.getTypeCasts())); this.cloneHelper.tailor(expression, aCtCodeSnippetExpression); this.other = aCtCodeSnippetExpression; }
@SuppressWarnings("unchecked") public static <T> CtExpression<T> compileExpression( CtCodeSnippetExpression<T> expr) throws SnippetCompilationError { // create wrapping template Factory f = expr.getFactory(); CtClass<?> w = createWrapper(expr, f); String contents = w.toString(); build(f, contents); CtType<?> c = f.Type().get("Wrapper"); // Get the part we want CtMethod<T> wrapper = Query.getElements(c, new Filter<CtMethod<T>>() { public boolean matches(CtMethod<T> element) { return element.getSimpleName().equals("wrap"); } }).get(0); CtReturn<T> ret = (CtReturn<T>) wrapper.getBody().getStatements() .get(0); // Clean up (delete wrapper from factory) c.getPackage().getTypes().remove(c); return ret.getReturnedExpression(); }