--- old/src/share/classes/com/sun/tools/javac/tree/JCTree.java 2009-12-27 19:02:21.000000000 +0100 +++ new/src/share/classes/com/sun/tools/javac/tree/JCTree.java 2009-12-27 19:02:21.000000000 +0100 @@ -247,10 +247,18 @@ /** Bound kind: extends, super, exact, or unbound */ public static final int TYPEBOUNDKIND = WILDCARD + 1; + + /** Function type + */ + public static final int TYPEFUN = TYPEBOUNDKIND + 1; + + /** Lambda + */ + public static final int LAMBDA = TYPEFUN + 1; /** metadata: Annotation. */ - public static final int ANNOTATION = TYPEBOUNDKIND + 1; + public static final int ANNOTATION = LAMBDA + 1; /** metadata: Modifiers */ @@ -1951,6 +1959,66 @@ return TYPEBOUNDKIND; } } + + public static class JCFunctionType extends JCExpression implements FunctionTypeTree { + public List parameterTypes; + public JCExpression returnType; + protected JCFunctionType(List parameterTypes, JCExpression returnType) { + this.parameterTypes = parameterTypes; + this.returnType = returnType; + } + @Override + public void accept(Visitor v) { v.visitFunctionType(this); } + + @Override + public R accept(TreeVisitor v, D d) { + return v.visitFunctionType(this, d); + } + public List getParameterTypes() { + return parameterTypes; + } + public JCExpression getReturnType() { + return returnType; + } + public Kind getKind() { + return Kind.FUNCTION_TYPE; + } + @Override + public int getTag() { + return TYPEFUN; + } + } + + public static class JCLambda extends JCExpression implements LambdaTree { + public List parameters; + public JCTree bodyOrExpr; + public MethodSymbol sym; + protected JCLambda(List parameters, JCTree bodyOrExpr) { + this.parameters = parameters; + this.bodyOrExpr = bodyOrExpr; + } + @Override + public void accept(Visitor v) { v.visitLambda(this); } + + @Override + public R accept(TreeVisitor v, D d) { + return v.visitLambda(this, d); + } + public List getParameters() { + return parameters; + } + @Override + public JCTree getBodyOrExpression() { + return bodyOrExpr; + } + public Kind getKind() { + return Kind.LAMBDA; + } + @Override + public int getTag() { + return LAMBDA; + } + } public static class JCAnnotation extends JCExpression implements AnnotationTree { public JCTree annotationType; @@ -2169,6 +2237,8 @@ JCTypeParameter TypeParameter(Name name, List bounds); JCWildcard Wildcard(TypeBoundKind kind, JCTree type); TypeBoundKind TypeBoundKind(BoundKind kind); + JCFunctionType FunctionType(List parameterTypes, JCExpression returnType); + JCLambda Lambda(List parameters, JCTree bodyOrexpr); JCAnnotation Annotation(JCTree annotationType, List args); JCModifiers Modifiers(long flags, List annotations); JCErroneous Erroneous(List errs); @@ -2223,6 +2293,8 @@ public void visitTypeParameter(JCTypeParameter that) { visitTree(that); } public void visitWildcard(JCWildcard that) { visitTree(that); } public void visitTypeBoundKind(TypeBoundKind that) { visitTree(that); } + public void visitFunctionType(JCFunctionType that) { visitTree(that); } + public void visitLambda(JCLambda that) { visitTree(that); } public void visitAnnotation(JCAnnotation that) { visitTree(that); } public void visitModifiers(JCModifiers that) { visitTree(that); } public void visitAnnotatedType(JCAnnotatedType that) { visitTree(that); }