This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 225533
Collapse All | Expand All

(-)a/java.source/apichanges.xml (+14 lines)
Lines 108-113 Link Here
108
    <!-- ACTUAL CHANGES BEGIN HERE: -->
108
    <!-- ACTUAL CHANGES BEGIN HERE: -->
109
109
110
    <changes>
110
    <changes>
111
         <change id="LambdaEnhancements">
112
             <api name="general"/>
113
             <summary>Added several methods to support Java 8 features.</summary>
114
             <version major="0" minor="112"/>
115
             <date day="13" month="2" year="2013"/>
116
             <author login="jlahoda"/>
117
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="no" semantic="compatible" source="compatible"/>
118
             <description>
119
                 Added several new methods to support Java 8 features. Namely: <code>ElementUtilities.isEffectivelyFinal</code>,
120
                 <code>TreeMaker.TypeAnnotation</code>, <code>TreeMaker.LambdaExpression</code>,
121
                 <code>TreeMaker.MemberReference</code> and <code>TypeUtilities.getDescriptorType</code>.
122
             </description>
123
             <issue number="225533"/>
124
        </change>
111
         <change id="SourceUtils-getDependentRoots">
125
         <change id="SourceUtils-getDependentRoots">
112
             <api name="general"/>
126
             <api name="general"/>
113
             <summary>Added overloaded method <code>SourceUtils.getDependentRoots</code>.</summary>
127
             <summary>Added overloaded method <code>SourceUtils.getDependentRoots</code>.</summary>
(-)a/java.source/nbproject/project.properties (-1 / +2 lines)
Lines 46-52 Link Here
46
javadoc.title=Java Source
46
javadoc.title=Java Source
47
javadoc.arch=${basedir}/arch.xml
47
javadoc.arch=${basedir}/arch.xml
48
javadoc.apichanges=${basedir}/apichanges.xml
48
javadoc.apichanges=${basedir}/apichanges.xml
49
spec.version.base=0.111.0
49
spec.version.base=0.112
50
test.qa-functional.cp.extra=${refactoring.java.dir}/modules/ext/nb-javac-api.jar
50
test.qa-functional.cp.extra=${refactoring.java.dir}/modules/ext/nb-javac-api.jar
51
test.unit.run.cp.extra=${o.n.core.dir}/core/core.jar:\
51
test.unit.run.cp.extra=${o.n.core.dir}/core/core.jar:\
52
    ${o.n.core.dir}/lib/boot.jar:\
52
    ${o.n.core.dir}/lib/boot.jar:\
Lines 148-153 Link Here
148
    ${test.config.generator.includes},\
148
    ${test.config.generator.includes},\
149
    org/netbeans/api/java/source/TypeUtilitiesTest.class,\
149
    org/netbeans/api/java/source/TypeUtilitiesTest.class,\
150
    org/netbeans/api/java/source/TreePathHandleTest.class,\
150
    org/netbeans/api/java/source/TreePathHandleTest.class,\
151
    org/netbeans/api/java/source/TreeMirrorHandleTest.class,\
151
    org/netbeans/api/java/source/ModificationResultTest.class,\
152
    org/netbeans/api/java/source/ModificationResultTest.class,\
152
    org/netbeans/api/java/source/ScanUtilsTest.class,\
153
    org/netbeans/api/java/source/ScanUtilsTest.class,\
153
    org/netbeans/modules/java/source/save/FormatingTest.class,\
154
    org/netbeans/modules/java/source/save/FormatingTest.class,\
(-)a/java.source/src/org/netbeans/api/java/source/ElementUtilities.java (+13 lines)
Lines 88-93 Link Here
88
import javax.lang.model.element.Modifier;
88
import javax.lang.model.element.Modifier;
89
import javax.lang.model.element.TypeElement;
89
import javax.lang.model.element.TypeElement;
90
import javax.lang.model.element.TypeParameterElement;
90
import javax.lang.model.element.TypeParameterElement;
91
import javax.lang.model.element.VariableElement;
91
import javax.lang.model.type.DeclaredType;
92
import javax.lang.model.type.DeclaredType;
92
import javax.lang.model.type.ExecutableType;
93
import javax.lang.model.type.ExecutableType;
93
import javax.lang.model.type.TypeKind;
94
import javax.lang.model.type.TypeKind;
Lines 260-265 Link Here
260
                case DECLARED:
261
                case DECLARED:
261
                case UNION:
262
                case UNION:
262
                    TypeElement te = (TypeElement)((DeclaredType)type).asElement();
263
                    TypeElement te = (TypeElement)((DeclaredType)type).asElement();
264
                    if (te == null) break;
263
                    for (Element member : elements.getAllMembers(te)) {
265
                    for (Element member : elements.getAllMembers(te)) {
264
                        if (acceptor == null || acceptor.accept(member, type)) {
266
                        if (acceptor == null || acceptor.accept(member, type)) {
265
                            if (!isHidden(member, members, elements, types))
267
                            if (!isHidden(member, members, elements, types))
Lines 534-539 Link Here
534
        }
536
        }
535
        return false;
537
        return false;
536
    }
538
    }
539
    
540
    /** Check whether the given variable is effectively final or final.
541
     * 
542
     * @param e variable to check for effectively final status
543
     * @return true if the given variable is effectively final or final
544
     * @since 0.112
545
     */
546
    public boolean isEffectivelyFinal(VariableElement e) {
547
        return (((Symbol) e).flags() & (Flags.EFFECTIVELY_FINAL | Flags.FINAL)) != 0;
548
    };
549
    
537
    // private implementation --------------------------------------------------
550
    // private implementation --------------------------------------------------
538
551
539
552
(-)a/java.source/src/org/netbeans/api/java/source/TreeMaker.java (-2 / +121 lines)
Lines 46-51 Link Here
46
import com.sun.source.tree.*;
46
import com.sun.source.tree.*;
47
import org.netbeans.modules.java.source.parsing.FileObjects;
47
import org.netbeans.modules.java.source.parsing.FileObjects;
48
import org.openide.filesystems.FileObject;
48
import org.openide.filesystems.FileObject;
49
import com.sun.source.tree.MemberReferenceTree.ReferenceMode;
49
import static com.sun.source.tree.Tree.*;
50
import static com.sun.source.tree.Tree.*;
50
51
51
import com.sun.source.util.SourcePositions;
52
import com.sun.source.util.SourcePositions;
Lines 133-138 Link Here
133
        return delegate.Annotation(type, arguments);
134
        return delegate.Annotation(type, arguments);
134
    }
135
    }
135
    
136
    
137
    /** 
138
     * Creates a new type AnnotationTree.
139
     *
140
     * @param type the annotation type.
141
     * @param arguments the arguments for this annotation, or an empty list.
142
     * @see com.sun.source.tree.AnnotationTree
143
     * @since 0.112
144
     */
145
    public AnnotationTree TypeAnnotation(Tree type, List<? extends ExpressionTree> arguments) {
146
        return delegate.TypeAnnotation(type, arguments);
147
    }
148
    
136
    /**
149
    /**
137
     * Creates a new ArrayAccessTree.
150
     * Creates a new ArrayAccessTree.
138
     *
151
     *
Lines 620-626 Link Here
620
    public LabeledStatementTree LabeledStatement(CharSequence label, StatementTree statement) {
633
    public LabeledStatementTree LabeledStatement(CharSequence label, StatementTree statement) {
621
        return delegate.LabeledStatement(label, statement);
634
        return delegate.LabeledStatement(label, statement);
622
    }
635
    }
623
    
636
637
    /**Creates a new LambdaExpressionTree
638
     * 
639
     * @param parameters the lambda's formal arguments
640
     * @param body the lambda's body
641
     * @return the LambdaExpressionTree
642
     * @since 0.112
643
     */
644
    public LambdaExpressionTree LambdaExpression(List<? extends VariableTree> parameters, Tree body) {
645
        return delegate.LambdaExpression(parameters, body);
646
    }
647
624
    /**
648
    /**
625
     * Creates a new LiteralTree.  Only literals which are wrappers for 
649
     * Creates a new LiteralTree.  Only literals which are wrappers for 
626
     * primitive types (Integer, Boolean, etc.) and String instances can
650
     * primitive types (Integer, Boolean, etc.) and String instances can
Lines 634-639 Link Here
634
        return delegate.Literal(value);
658
        return delegate.Literal(value);
635
    }
659
    }
636
    
660
    
661
    /**Creates a new MemberReferenceTree.
662
     * 
663
     * @param refMode the desired {@link ReferenceMode reference mode}
664
     * @param expression the class (or expression), from which a member is to be referenced
665
     * @param name the name of the referenced member
666
     * @param typeArguments the reference's type arguments
667
     * @return the MemberReferenceTree
668
     * @since 0.112
669
     */
670
    public MemberReferenceTree MemberReference(ReferenceMode refMode, ExpressionTree expression, CharSequence name, List<? extends ExpressionTree> typeArguments) {
671
        return delegate.MemberReference(refMode, name, expression, typeArguments);
672
    }
673
    
637
    /**
674
    /**
638
     * Creates a new MemberSelectTree.  A MemberSelectTree consists of an
675
     * Creates a new MemberSelectTree.  A MemberSelectTree consists of an
639
     * expression and an identifier.  Valid expressions include things like
676
     * expression and an identifier.  Valid expressions include things like
Lines 2573-2579 Link Here
2573
     * <tt>aLabel</tt> argument. Throws <tt>IllegalArgumentException</tt> if
2610
     * <tt>aLabel</tt> argument. Throws <tt>IllegalArgumentException</tt> if
2574
     * <tt>node</tt>'s kind is invalid. Valid <tt>node</tt>'s kinds are:<br>
2611
     * <tt>node</tt>'s kind is invalid. Valid <tt>node</tt>'s kinds are:<br>
2575
     * BREAK, CLASS, CONTINUE, IDENTIFIER, LABELED_STATEMENT,
2612
     * BREAK, CLASS, CONTINUE, IDENTIFIER, LABELED_STATEMENT,
2576
     * MEMBER_SELECT, METHOD, TYPE_PARAMETER, VARIABLE.<p>
2613
     * MEMBER_SELECT, METHOD, TYPE_PARAMETER, VARIABLE, MEMBER_REFERENCE (since 0.112).<p>
2577
     *
2614
     *
2578
     * Consider you want to change name of  method <tt>fooMet</tt> to
2615
     * Consider you want to change name of  method <tt>fooMet</tt> to
2579
     * <tt>fooMethod</tt>:
2616
     * <tt>fooMethod</tt>:
Lines 2703-2708 Link Here
2703
                        );
2740
                        );
2704
                return clone;
2741
                return clone;
2705
            }
2742
            }
2743
            case MEMBER_REFERENCE: {
2744
                MemberReferenceTree t = (MemberReferenceTree) node;
2745
                N clone = (N) MemberReference(
2746
                        t.getMode(),
2747
                        t.getQualifierExpression(),
2748
                        aLabel,
2749
                        t.getTypeArguments()
2750
                        );
2751
                return clone;
2752
            }
2706
            case METHOD: {
2753
            case METHOD: {
2707
                MethodTree t = (MethodTree) node;
2754
                MethodTree t = (MethodTree) node;
2708
                N clone = (N) Method(
2755
                N clone = (N) Method(
Lines 3062-3065 Link Here
3062
        }
3109
        }
3063
3110
3064
    }
3111
    }
3112
3113
    /**
3114
     * Appends specified element <tt>parameter</tt>
3115
     * to the end of parameters list.
3116
     *
3117
     * @param  method        lambda expression tree containing parameters list.
3118
     * @param  parameter     element to be appended to parameters list.
3119
     * @return lambda expression tree with modified parameters.
3120
     * @since 0.112
3121
     */
3122
    public LambdaExpressionTree addLambdaParameter(LambdaExpressionTree method, VariableTree parameter) {
3123
        return delegate.addLambdaParameter(method, parameter);
3124
    }
3125
    
3126
    /**
3127
     * Inserts the specified element <tt>parameter</tt> 
3128
     * at the specified position in parameters list.
3129
     *
3130
     * @param  method lambda expression tree containing parameters list.
3131
     * @param  index  index at which the specified elements is to be inserted.
3132
     * @param  parameter   element to be inserted to parameters list.
3133
     * @return lambda expression  tree with modified parameters.
3134
     *
3135
     * @throws    IndexOutOfBoundsException if the index is out of range
3136
     *		  (index &lt; 0 || index &gt; size()).
3137
     * @since 0.112
3138
     */
3139
    public LambdaExpressionTree insertLambdaParameter(LambdaExpressionTree method, int index, VariableTree parameter) {
3140
        return delegate.insertLambdaParameter(method, index, parameter);
3141
    }
3142
    
3143
    /**
3144
     * Removes the first occurrence in parameters list of the specified 
3145
     * elements. If this list do not contain the element, it is
3146
     * unchanged.
3147
     *
3148
     * @param   method lambda expression tree containing parameters list.
3149
     * @param   parameter   element to be removed from this list, if present.
3150
     * @return  lambda expression tree with modified parameters and type parameters.
3151
     * @since 0.112
3152
     */
3153
    public LambdaExpressionTree removeLambdaParameter(LambdaExpressionTree method, VariableTree parameter) {
3154
        return delegate.removeLambdaParameter(method, parameter);
3155
    }
3156
    
3157
    /**
3158
     * Removes the element at the specified position in parameters list.
3159
     * Returns the modified lambda expression tree.
3160
     *
3161
     * @param   method lambda expression tree containing parameters list.
3162
     * @param   index  the index of the element to be removed.
3163
     * @return  method tree with modified parameters.
3164
     * 
3165
     * @throws IndexOutOfBoundsException if the index is out of range (index
3166
     *            &lt; 0 || index &gt;= size()).
3167
     * @since 0.112
3168
     */
3169
    public LambdaExpressionTree removeLambdaParameter(LambdaExpressionTree method, int index) {
3170
        return delegate.removeLambdaParameter(method, index);
3171
    }
3172
    
3173
    /**Creates a new lambda expression as a copy of the given lambda expression
3174
     * with the specified body.
3175
     * 
3176
     * @param method the source lambda expression
3177
     * @param newBody the new body
3178
     * @return new lambda expression tree with the new body
3179
     * @since 0.112
3180
     */
3181
    public LambdaExpressionTree setLambdaBody(LambdaExpressionTree method, Tree newBody) {
3182
        return delegate.setLambdaBody(method, newBody);
3183
    }
3065
}
3184
}
(-)a/java.source/src/org/netbeans/api/java/source/TypeMirrorHandle.java (-3 / +24 lines)
Lines 50-59 Link Here
50
import com.sun.tools.javac.code.Type;
50
import com.sun.tools.javac.code.Type;
51
import com.sun.tools.javac.code.Type.ClassType;
51
import com.sun.tools.javac.code.Type.ClassType;
52
import com.sun.tools.javac.code.Type.TypeVar;
52
import com.sun.tools.javac.code.Type.TypeVar;
53
import com.sun.tools.javac.code.TypeTags;
53
import com.sun.tools.javac.code.TypeTag;
54
import com.sun.tools.javac.code.Types;
54
import com.sun.tools.javac.code.Types;
55
import com.sun.tools.javac.code.Types.DefaultTypeVisitor;
55
import com.sun.tools.javac.code.Types.DefaultTypeVisitor;
56
import com.sun.tools.javac.util.Context;
56
import com.sun.tools.javac.util.Context;
57
import com.sun.tools.javac.util.ListBuffer;
57
import com.sun.tools.javac.util.Names;
58
import com.sun.tools.javac.util.Names;
58
import java.util.ArrayList;
59
import java.util.ArrayList;
59
import java.util.Collections;
60
import java.util.Collections;
Lines 68-73 Link Here
68
import javax.lang.model.type.ArrayType;
69
import javax.lang.model.type.ArrayType;
69
import javax.lang.model.type.DeclaredType;
70
import javax.lang.model.type.DeclaredType;
70
import javax.lang.model.type.ErrorType;
71
import javax.lang.model.type.ErrorType;
72
import javax.lang.model.type.IntersectionType;
71
import javax.lang.model.type.ReferenceType;
73
import javax.lang.model.type.ReferenceType;
72
import javax.lang.model.type.TypeKind;
74
import javax.lang.model.type.TypeKind;
73
import javax.lang.model.type.TypeMirror;
75
import javax.lang.model.type.TypeMirror;
Lines 224-229 Link Here
224
                    typeMirrors.add(create(alternative, map));
226
                    typeMirrors.add(create(alternative, map));
225
                }
227
                }
226
                break;
228
                break;
229
            case INTERSECTION:
230
                typeMirrors = new ArrayList<TypeMirrorHandle<? extends TypeMirror>>();
231
                for (TypeMirror alternative : ((IntersectionType) tm).getBounds()) {
232
                    typeMirrors.add(create(alternative, map));
233
                }
234
                break;
227
            default:
235
            default:
228
                throw new IllegalArgumentException("Currently unsupported TypeKind: " + tm.getKind());
236
                throw new IllegalArgumentException("Currently unsupported TypeKind: " + tm.getKind());
229
        }
237
        }
Lines 378-386 Link Here
378
                t = Types.instance(info.impl.getJavacTask().getContext());
386
                t = Types.instance(info.impl.getJavacTask().getContext());
379
                Type lub = t.lub(resolvedAlternatives);
387
                Type lub = t.lub(resolvedAlternatives);
380
388
381
                if (lub.tag != TypeTags.CLASS) return null;
389
                if (!lub.hasTag(TypeTag.CLASS)) return null;
382
390
383
                return (T) new Type.UnionClassType((ClassType) lub, resolvedAlternatives);
391
                return (T) new Type.UnionClassType((ClassType) lub, resolvedAlternatives);
392
            case INTERSECTION:
393
                ListBuffer<Type> resolvedBounds = new ListBuffer<Type>();
394
                for (TypeMirrorHandle alternative : typeMirrors) {
395
                    TypeMirror resolvedAlternative = alternative.resolve(info, map);
396
                    if (resolvedAlternative == null) {
397
                        return null;
398
                    }
399
                    resolvedBounds = resolvedBounds.append((Type) resolvedAlternative);
400
                }
401
                
402
                t = Types.instance(info.impl.getJavacTask().getContext());
403
                
404
                return (T) t.makeCompoundType(resolvedBounds.toList());
384
            default:
405
            default:
385
                throw new IllegalStateException("Internal error: unknown TypeHandle kind: " + kind);
406
                throw new IllegalStateException("Internal error: unknown TypeHandle kind: " + kind);
386
        }
407
        }
Lines 405-411 Link Here
405
        private Type delegate = null;
426
        private Type delegate = null;
406
        
427
        
407
        public PlaceholderType() {
428
        public PlaceholderType() {
408
            super(TypeTags.UNKNOWN, null);
429
            super(TypeTag.UNKNOWN, null);
409
        }       
430
        }       
410
    }
431
    }
411
    
432
    
(-)a/java.source/src/org/netbeans/api/java/source/TypeUtilities.java (-1 / +26 lines)
Lines 55-60 Link Here
55
import javax.lang.model.type.ArrayType;
55
import javax.lang.model.type.ArrayType;
56
import javax.lang.model.type.DeclaredType;
56
import javax.lang.model.type.DeclaredType;
57
import javax.lang.model.type.ErrorType;
57
import javax.lang.model.type.ErrorType;
58
import javax.lang.model.type.ExecutableType;
58
import javax.lang.model.type.TypeKind;
59
import javax.lang.model.type.TypeKind;
59
import javax.lang.model.type.TypeMirror;
60
import javax.lang.model.type.TypeMirror;
60
import javax.lang.model.type.TypeVariable;
61
import javax.lang.model.type.TypeVariable;
Lines 129-135 Link Here
129
        return Types.instance(info.impl.getJavacTask().getContext()).subst((Type)type, l1, l2);
130
        return Types.instance(info.impl.getJavacTask().getContext()).subst((Type)type, l1, l2);
130
    }
131
    }
131
132
132
    /**Get textual representation of the given type.
133
    /**
134
     * Find the type of the method descriptor associated to the functional interface.
135
     * 
136
     * @param origin functional interface type
137
     * @return associated method descriptor type or <code>null</code> if the <code>origin</code> is not a functional interface.
138
     * @since 0.112
139
     */
140
    public ExecutableType getDescriptorType(DeclaredType origin) {
141
        Types types = Types.instance(info.impl.getJavacTask().getContext());
142
        if (types.isFunctionalInterface(((Type)origin).tsym)) {
143
            Type dt = types.findDescriptorType((Type)origin);
144
            if (dt != null && dt.getKind() == TypeKind.EXECUTABLE) {
145
                return (ExecutableType)dt;
146
            }
147
        }
148
        return null;
149
    }
150
    
151
   /**Get textual representation of the given type.
133
     *
152
     *
134
     * @param type to print
153
     * @param type to print
135
     * @param options allows to specify various adjustments to the output text
154
     * @param options allows to specify various adjustments to the output text
Lines 269-273 Link Here
269
            }
288
            }
270
            return DEFAULT_VALUE;
289
            return DEFAULT_VALUE;
271
        }
290
        }
291
292
        @Override
293
        public StringBuilder visitUnknown(TypeMirror t, Boolean p) {
294
            return DEFAULT_VALUE.append("<unknown>");
295
        }
296
272
    }
297
    }
273
}
298
}
(-)a/java.source/src/org/netbeans/modules/java/source/JavadocEnv.java (-38 / +36 lines)
Lines 45-50 Link Here
45
package org.netbeans.modules.java.source;
45
package org.netbeans.modules.java.source;
46
46
47
import com.sun.javadoc.ClassDoc;
47
import com.sun.javadoc.ClassDoc;
48
import com.sun.source.util.TreePath;
48
import com.sun.tools.javac.code.Flags;
49
import com.sun.tools.javac.code.Flags;
49
import com.sun.tools.javac.code.Kinds;
50
import com.sun.tools.javac.code.Kinds;
50
import com.sun.tools.javac.code.Symbol.ClassSymbol;
51
import com.sun.tools.javac.code.Symbol.ClassSymbol;
Lines 53-64 Link Here
53
import com.sun.tools.javac.code.Symbol.TypeSymbol;
54
import com.sun.tools.javac.code.Symbol.TypeSymbol;
54
import com.sun.tools.javac.code.Symbol.VarSymbol;
55
import com.sun.tools.javac.code.Symbol.VarSymbol;
55
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
56
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
56
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
57
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
58
import com.sun.tools.javac.util.Context;
57
import com.sun.tools.javac.util.Context;
59
import com.sun.tools.javac.util.Name;
58
import com.sun.tools.javac.util.Name;
60
import com.sun.tools.javac.util.Names;
59
import com.sun.tools.javac.util.Names;
61
import com.sun.tools.javac.util.Position;
62
import com.sun.tools.javadoc.AnnotationTypeDocImpl;
60
import com.sun.tools.javadoc.AnnotationTypeDocImpl;
63
import com.sun.tools.javadoc.AnnotationTypeElementDocImpl;
61
import com.sun.tools.javadoc.AnnotationTypeElementDocImpl;
64
import com.sun.tools.javadoc.ClassDocImpl;
62
import com.sun.tools.javadoc.ClassDocImpl;
Lines 121-136 Link Here
121
    }
119
    }
122
    
120
    
123
    @Override
121
    @Override
124
    protected void makeClassDoc(ClassSymbol clazz, String docComment, JCClassDecl tree, Position.LineMap lineMap) {
122
    protected void makeClassDoc(ClassSymbol clazz, TreePath treePath) {
125
        ClassDocImpl result = classMap.get(clazz);
123
        ClassDocImpl result = classMap.get(clazz);
126
        if (result != null) {
124
        if (result != null) {
127
            if (docComment != null) result.setRawCommentText(docComment);
125
            if (treePath != null) result.setTreePath(treePath);
128
            return;
126
            return;
129
        }
127
        }
130
        if (isAnnotationType(tree)) {	// flags of clazz may not yet be set
128
        if (isAnnotationType((JCClassDecl)treePath.getLeaf())) {	// flags of clazz may not yet be set
131
            result = new JavadocAnnotation(this, clazz, docComment);
129
            result = new JavadocAnnotation(this, clazz, treePath);
132
        } else {
130
        } else {
133
            result = new JavadocClass(this, clazz, docComment);
131
            result = new JavadocClass(this, clazz, treePath);
134
        }
132
        }
135
        classMap.put(clazz, result);
133
        classMap.put(clazz, result);
136
    }
134
    }
Lines 145-156 Link Here
145
    }
143
    }
146
144
147
    @Override
145
    @Override
148
    protected void makeFieldDoc(VarSymbol var, String docComment, JCVariableDecl tree, Position.LineMap lineMap) {
146
    protected void makeFieldDoc(VarSymbol var, TreePath treePath) {
149
        FieldDocImpl result = fieldMap.get(var);
147
        FieldDocImpl result = fieldMap.get(var);
150
        if (result != null) {
148
        if (result != null) {
151
            if (docComment != null) result.setRawCommentText(docComment);
149
            if (treePath != null) result.setTreePath(treePath);
152
        } else {
150
        } else {
153
            result = new JavadocField(this, var, docComment);
151
            result = new JavadocField(this, var, treePath);
154
            fieldMap.put(var, result);
152
            fieldMap.put(var, result);
155
        }
153
        }
156
    }
154
    }
Lines 168-179 Link Here
168
    }
166
    }
169
    
167
    
170
    @Override
168
    @Override
171
    protected void makeMethodDoc(MethodSymbol meth, String docComment, JCMethodDecl tree, Position.LineMap lineMap) {
169
    protected void makeMethodDoc(MethodSymbol meth, TreePath treePath) {
172
        MethodDocImpl result = (MethodDocImpl)methodMap.get(meth);
170
        MethodDocImpl result = (MethodDocImpl)methodMap.get(meth);
173
        if (result != null) {
171
        if (result != null) {
174
            if (docComment != null) result.setRawCommentText(docComment);
172
            if (treePath != null) result.setTreePath(treePath);
175
        } else {
173
        } else {
176
            result = new JavadocMethod(this, meth, docComment);
174
            result = new JavadocMethod(this, meth, treePath);
177
            methodMap.put(meth, result);
175
            methodMap.put(meth, result);
178
        }
176
        }
179
    }
177
    }
Lines 191-202 Link Here
191
    }
189
    }
192
190
193
    @Override
191
    @Override
194
    protected void makeConstructorDoc(MethodSymbol meth, String docComment, JCMethodDecl tree, Position.LineMap lineMap) {
192
    protected void makeConstructorDoc(MethodSymbol meth, TreePath treePath) {
195
        ConstructorDocImpl result = (ConstructorDocImpl)methodMap.get(meth);
193
        ConstructorDocImpl result = (ConstructorDocImpl)methodMap.get(meth);
196
        if (result != null) {
194
        if (result != null) {
197
            if (docComment != null) result.setRawCommentText(docComment);
195
            if (treePath != null) result.setTreePath(treePath);
198
        } else {
196
        } else {
199
            result = new JavadocConstructor(this, meth, docComment);
197
            result = new JavadocConstructor(this, meth, treePath);
200
            methodMap.put(meth, result);
198
            methodMap.put(meth, result);
201
        }
199
        }
202
    }
200
    }
Lines 214-225 Link Here
214
    }
212
    }
215
    
213
    
216
    @Override
214
    @Override
217
    protected void makeAnnotationTypeElementDoc(MethodSymbol meth, String docComment, JCMethodDecl tree, Position.LineMap lineMap) {
215
    protected void makeAnnotationTypeElementDoc(MethodSymbol meth, TreePath treePath) {
218
        AnnotationTypeElementDocImpl result = (AnnotationTypeElementDocImpl)methodMap.get(meth);
216
        AnnotationTypeElementDocImpl result = (AnnotationTypeElementDocImpl)methodMap.get(meth);
219
        if (result != null) {
217
        if (result != null) {
220
            if (docComment != null) result.setRawCommentText(docComment);
218
            if (treePath != null) result.setTreePath(treePath);
221
        } else {
219
        } else {
222
            result = new JavadocAnnotationTypeElement(this, meth, docComment);
220
            result = new JavadocAnnotationTypeElement(this, meth, treePath);
223
            methodMap.put(meth, result);
221
            methodMap.put(meth, result);
224
        }
222
        }
225
    }
223
    }
Lines 277-287 Link Here
277
    private class JavadocClass extends ClassDocImpl implements ElementHolder {
275
    private class JavadocClass extends ClassDocImpl implements ElementHolder {
278
        
276
        
279
        private JavadocClass(DocEnv env, ClassSymbol sym) {
277
        private JavadocClass(DocEnv env, ClassSymbol sym) {
280
            super(env, sym, null, null, null);            
278
            super(env, sym);
281
        }
279
        }
282
        
280
        
283
        private JavadocClass(DocEnv env, ClassSymbol sym, String docComment) {
281
        private JavadocClass(DocEnv env, ClassSymbol sym, TreePath treePath) {
284
            super(env, sym, docComment != null ? docComment : "", null, null); //NOI18N
282
            super(env, sym, treePath);
285
        }
283
        }
286
        
284
        
287
        @Override
285
        @Override
Lines 300-310 Link Here
300
    private class JavadocAnnotation extends AnnotationTypeDocImpl implements ElementHolder {
298
    private class JavadocAnnotation extends AnnotationTypeDocImpl implements ElementHolder {
301
        
299
        
302
        private JavadocAnnotation(DocEnv env, ClassSymbol sym) {
300
        private JavadocAnnotation(DocEnv env, ClassSymbol sym) {
303
            super(env, sym, null, null, null);
301
            super(env, sym);
304
        }
302
        }
305
        
303
        
306
        private JavadocAnnotation(DocEnv env, ClassSymbol sym, String docComment) {
304
        private JavadocAnnotation(DocEnv env, ClassSymbol sym, TreePath treePath) {
307
            super(env, sym, docComment != null ? docComment : "", null, null); //NOI18N
305
            super(env, sym, treePath);
308
        }
306
        }
309
        
307
        
310
        @Override
308
        @Override
Lines 323-333 Link Here
323
    private class JavadocField extends FieldDocImpl implements ElementHolder {
321
    private class JavadocField extends FieldDocImpl implements ElementHolder {
324
322
325
        private JavadocField(DocEnv env, VarSymbol sym) {
323
        private JavadocField(DocEnv env, VarSymbol sym) {
326
            super(env, sym, null, null, null);
324
            super(env, sym);
327
        }
325
        }
328
        
326
        
329
        private JavadocField(DocEnv env, VarSymbol sym, String docComment) {
327
        private JavadocField(DocEnv env, VarSymbol sym, TreePath treePath) {
330
            super(env, sym, docComment != null ? docComment : "", null, null); //NOI18N
328
            super(env, sym, treePath);
331
        }
329
        }
332
330
333
        @Override
331
        @Override
Lines 346-356 Link Here
346
    private class JavadocMethod extends MethodDocImpl implements ElementHolder {
344
    private class JavadocMethod extends MethodDocImpl implements ElementHolder {
347
345
348
        private JavadocMethod(DocEnv env, MethodSymbol sym) {
346
        private JavadocMethod(DocEnv env, MethodSymbol sym) {
349
            super(env, sym, null, null, null);
347
            super(env, sym);
350
        }
348
        }
351
        
349
        
352
        private JavadocMethod(DocEnv env, MethodSymbol sym, String docComment) {
350
        private JavadocMethod(DocEnv env, MethodSymbol sym, TreePath treePath) {
353
            super(env, sym, docComment != null ? docComment : "", null, null); //NOI18N
351
            super(env, sym, treePath);
354
        }
352
        }
355
353
356
        @Override
354
        @Override
Lines 369-379 Link Here
369
    private class JavadocConstructor extends ConstructorDocImpl implements ElementHolder {
367
    private class JavadocConstructor extends ConstructorDocImpl implements ElementHolder {
370
368
371
        private JavadocConstructor(DocEnv env, MethodSymbol sym) {
369
        private JavadocConstructor(DocEnv env, MethodSymbol sym) {
372
            super(env, sym, null, null, null);
370
            super(env, sym);
373
        }
371
        }
374
        
372
        
375
        private JavadocConstructor(DocEnv env, MethodSymbol sym, String docComment) {
373
        private JavadocConstructor(DocEnv env, MethodSymbol sym, TreePath treePath) {
376
            super(env, sym, docComment != null ? docComment : "", null, null); //NOI18N
374
            super(env, sym, treePath);
377
        }
375
        }
378
376
379
        @Override
377
        @Override
Lines 392-402 Link Here
392
    private class JavadocAnnotationTypeElement extends AnnotationTypeElementDocImpl implements ElementHolder {
390
    private class JavadocAnnotationTypeElement extends AnnotationTypeElementDocImpl implements ElementHolder {
393
391
394
        private JavadocAnnotationTypeElement(DocEnv env, MethodSymbol sym) {
392
        private JavadocAnnotationTypeElement(DocEnv env, MethodSymbol sym) {
395
            super(env, sym, null, null, null);
393
            super(env, sym);
396
        }
394
        }
397
        
395
        
398
        private JavadocAnnotationTypeElement(DocEnv env, MethodSymbol sym, String docComment) {
396
        private JavadocAnnotationTypeElement(DocEnv env, MethodSymbol sym, TreePath treePath) {
399
            super(env, sym, docComment != null ? docComment : "", null, null); //NOI18N
397
            super(env, sym, treePath);
400
        }
398
        }
401
399
402
        @Override
400
        @Override
(-)a/java.source/src/org/netbeans/modules/java/source/PostFlowAnalysis.java (-1 / +1 lines)
Lines 200-206 Link Here
200
                Symbol c = meth.owner;
200
                Symbol c = meth.owner;
201
                if (c.hasOuterInstance()) {
201
                if (c.hasOuterInstance()) {
202
                    checkThis = false;
202
                    checkThis = false;
203
                    if (tree.meth.getTag() != JCTree.SELECT && ((c.owner.kind & (Kinds.MTH | Kinds.VAR)) != 0 || methName == names._this)) {
203
                    if (tree.meth.getTag() != JCTree.Tag.SELECT && ((c.owner.kind & (Kinds.MTH | Kinds.VAR)) != 0 || methName == names._this)) {
204
                        checkThis(tree.meth.pos(), c.type.getEnclosingType().tsym);
204
                        checkThis(tree.meth.pos(), c.type.getEnclosingType().tsym);
205
                    }
205
                    }
206
                }
206
                }
(-)a/java.source/src/org/netbeans/modules/java/source/TreeLoader.java (-4 / +4 lines)
Lines 73-78 Link Here
73
import com.sun.tools.javac.util.CouplingAbort;
73
import com.sun.tools.javac.util.CouplingAbort;
74
import com.sun.tools.javac.util.List;
74
import com.sun.tools.javac.util.List;
75
import com.sun.tools.javac.util.Log;
75
import com.sun.tools.javac.util.Log;
76
import com.sun.tools.javac.util.Log.DiscardDiagnosticHandler;
76
import java.awt.EventQueue;
77
import java.awt.EventQueue;
77
import java.io.File;
78
import java.io.File;
78
import java.io.FileOutputStream;
79
import java.io.FileOutputStream;
Lines 307-313 Link Here
307
                    List<JCTree> prev = null;
308
                    List<JCTree> prev = null;
308
                    for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) {
309
                    for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) {
309
                        scan(l.head);
310
                        scan(l.head);
310
                        if (l.head.getTag() == JCTree.BLOCK) {
311
                        if (l.head.getTag() == JCTree.Tag.BLOCK) {
311
                            if (prev != null)
312
                            if (prev != null)
312
                                prev.tail = l.tail;
313
                                prev.tail = l.tail;
313
                            else
314
                            else
Lines 326-333 Link Here
326
    public static void dumpSymFile(JavaFileManager jfm, JavacTaskImpl jti, ClassSymbol clazz) throws IOException {
327
    public static void dumpSymFile(JavaFileManager jfm, JavacTaskImpl jti, ClassSymbol clazz) throws IOException {
327
        Log log = Log.instance(jti.getContext());
328
        Log log = Log.instance(jti.getContext());
328
        JavaFileObject prevLogTo = log.useSource(null);
329
        JavaFileObject prevLogTo = log.useSource(null);
329
        boolean oldSuppress = log.suppressErrorsAndWarnings;
330
        DiscardDiagnosticHandler discardDiagnosticHandler = new Log.DiscardDiagnosticHandler(log);
330
        log.suppressErrorsAndWarnings = true;
331
        try {
331
        try {
332
            String binaryName = null;
332
            String binaryName = null;
333
            String surl = null;
333
            String surl = null;
Lines 364-370 Link Here
364
            LOGGER.log(Level.INFO, "InvalidSourcePath reported when writing sym file for class: {0}", clazz.flatname); // NOI18N
364
            LOGGER.log(Level.INFO, "InvalidSourcePath reported when writing sym file for class: {0}", clazz.flatname); // NOI18N
365
        } finally {
365
        } finally {
366
            jfm.handleOption("output-root", Collections.singletonList("").iterator()); //NOI18N
366
            jfm.handleOption("output-root", Collections.singletonList("").iterator()); //NOI18N
367
            log.suppressErrorsAndWarnings = oldSuppress;
367
            log.popDiagnosticHandler(discardDiagnosticHandler);
368
            log.useSource(prevLogTo);
368
            log.useSource(prevLogTo);
369
        }
369
        }
370
    }
370
    }
(-)a/java.source/src/org/netbeans/modules/java/source/builder/ElementsService.java (-5 / +4 lines)
Lines 48-61 Link Here
48
import com.sun.tools.javac.util.Name;
48
import com.sun.tools.javac.util.Name;
49
import com.sun.tools.javac.util.Names;
49
import com.sun.tools.javac.util.Names;
50
import javax.lang.model.util.Types;
50
import javax.lang.model.util.Types;
51
import org.netbeans.api.java.source.*;
52
import com.sun.tools.javac.code.Scope;
51
import com.sun.tools.javac.code.Scope;
53
import com.sun.tools.javac.code.Symbol;
52
import com.sun.tools.javac.code.Symbol;
54
import com.sun.tools.javac.code.Symbol.ClassSymbol;
53
import com.sun.tools.javac.code.Symbol.ClassSymbol;
55
import com.sun.tools.javac.code.Symbol.MethodSymbol;
54
import com.sun.tools.javac.code.Symbol.MethodSymbol;
56
import com.sun.tools.javac.code.Symbol.TypeSymbol;
55
import com.sun.tools.javac.code.Symbol.TypeSymbol;
57
import com.sun.tools.javac.code.Type;
56
import com.sun.tools.javac.code.Type;
58
import com.sun.tools.javac.code.TypeTags;
57
import com.sun.tools.javac.code.TypeTag;
59
import com.sun.tools.javac.model.JavacTypes;
58
import com.sun.tools.javac.model.JavacTypes;
60
import com.sun.tools.javac.util.Context;
59
import com.sun.tools.javac.util.Context;
61
import javax.lang.model.element.*;
60
import javax.lang.model.element.*;
Lines 121-127 Link Here
121
        if ((m.flags() & Flags.STATIC) == 0) {
120
        if ((m.flags() & Flags.STATIC) == 0) {
122
            ClassSymbol owner = (ClassSymbol) m.owner;
121
            ClassSymbol owner = (ClassSymbol) m.owner;
123
            for (Type sup = jctypes.supertype(m.owner.type);
122
            for (Type sup = jctypes.supertype(m.owner.type);
124
                 sup.tag == TypeTags.CLASS;
123
                 sup.hasTag(TypeTag.CLASS);
125
                 sup = jctypes.supertype(sup)) {
124
                 sup = jctypes.supertype(sup)) {
126
                for (Scope.Entry e = sup.tsym.members().lookup(m.name);
125
                for (Scope.Entry e = sup.tsym.members().lookup(m.name);
127
                     e.scope != null; e = e.next()) {
126
                     e.scope != null; e = e.next()) {
Lines 176-182 Link Here
176
	// Check if this method overrides a deprecated method. 
175
	// Check if this method overrides a deprecated method. 
177
	TypeSymbol owner = sym.enclClass();
176
	TypeSymbol owner = sym.enclClass();
178
	for (Type sup = jctypes.supertype(owner.type);
177
	for (Type sup = jctypes.supertype(owner.type);
179
	     sup.tag == TypeTags.CLASS;
178
	     sup.hasTag(TypeTag.CLASS);
180
	     sup = jctypes.supertype(sup)) {
179
	     sup = jctypes.supertype(sup)) {
181
	    for (Scope.Entry e = sup.tsym.members().lookup(sym.name);
180
	    for (Scope.Entry e = sup.tsym.members().lookup(sym.name);
182
		 e.scope != null; e = e.next()) {
181
		 e.scope != null; e = e.next()) {
Lines 210-216 Link Here
210
    public ExecutableElement getOverriddenMethod(ExecutableElement method) {
209
    public ExecutableElement getOverriddenMethod(ExecutableElement method) {
211
        MethodSymbol m = (MethodSymbol)method;
210
        MethodSymbol m = (MethodSymbol)method;
212
	ClassSymbol origin = (ClassSymbol)m.owner;
211
	ClassSymbol origin = (ClassSymbol)m.owner;
213
	for (Type t = jctypes.supertype(origin.type); t.tag == TypeTags.CLASS; t = jctypes.supertype(t)) {
212
	for (Type t = jctypes.supertype(origin.type); t.hasTag(TypeTag.CLASS); t = jctypes.supertype(t)) {
214
	    TypeSymbol c = t.tsym;
213
	    TypeSymbol c = t.tsym;
215
	    Scope.Entry e = c.members().lookup(m.name);
214
	    Scope.Entry e = c.members().lookup(m.name);
216
	    while (e.scope != null) {
215
	    while (e.scope != null) {
(-)a/java.source/src/org/netbeans/modules/java/source/builder/TreeFactory.java (-63 / +133 lines)
Lines 44-49 Link Here
44
44
45
package org.netbeans.modules.java.source.builder;
45
package org.netbeans.modules.java.source.builder;
46
46
47
import com.sun.source.tree.MemberReferenceTree.ReferenceMode;
47
import com.sun.tools.javac.code.Type.ErrorType;
48
import com.sun.tools.javac.code.Type.ErrorType;
48
import com.sun.tools.javac.model.JavacElements;
49
import com.sun.tools.javac.model.JavacElements;
49
import com.sun.tools.javac.util.Names;
50
import com.sun.tools.javac.util.Names;
Lines 56-62 Link Here
56
import com.sun.tools.javac.code.Symbol;
57
import com.sun.tools.javac.code.Symbol;
57
import com.sun.tools.javac.code.Type;
58
import com.sun.tools.javac.code.Type;
58
import com.sun.tools.javac.code.Type.WildcardType;
59
import com.sun.tools.javac.code.Type.WildcardType;
59
import com.sun.tools.javac.code.TypeTags;
60
import com.sun.tools.javac.jvm.ClassReader;
60
import com.sun.tools.javac.jvm.ClassReader;
61
import com.sun.tools.javac.model.JavacTypes;
61
import com.sun.tools.javac.model.JavacTypes;
62
import com.sun.tools.javac.tree.JCTree;
62
import com.sun.tools.javac.tree.JCTree;
Lines 77-82 Link Here
77
import org.netbeans.api.annotations.common.NonNull;
77
import org.netbeans.api.annotations.common.NonNull;
78
import static org.netbeans.modules.java.source.save.PositionEstimator.*;
78
import static org.netbeans.modules.java.source.save.PositionEstimator.*;
79
import static com.sun.tools.javac.code.Flags.*;
79
import static com.sun.tools.javac.code.Flags.*;
80
import com.sun.tools.javac.code.TypeTag;
80
81
81
/**
82
/**
82
 * Factory for creating new com.sun.source.tree instances.
83
 * Factory for creating new com.sun.source.tree instances.
Lines 122-127 Link Here
122
        return make.at(NOPOS).Annotation((JCTree)type, lb.toList());
123
        return make.at(NOPOS).Annotation((JCTree)type, lb.toList());
123
    }
124
    }
124
125
126
    public AnnotationTree TypeAnnotation(Tree type, List<? extends ExpressionTree> arguments) {
127
        ListBuffer<JCExpression> lb = new ListBuffer<JCExpression>();
128
        for (ExpressionTree t : arguments)
129
            lb.append((JCExpression)t);
130
        return make.at(NOPOS).TypeAnnotation((JCTree)type, lb.toList());
131
    }
132
    
133
    public AnnotatedTypeTree AnnotatedType(List<? extends AnnotationTree> annotations, ExpressionTree underlyingType) {
134
        ListBuffer<JCAnnotation> lb = new ListBuffer<JCAnnotation>();
135
        for (AnnotationTree t : annotations)
136
            lb.append((JCAnnotation)t);
137
        return make.at(NOPOS).AnnotatedType(lb.toList(), (JCExpression)underlyingType);
138
    }
139
125
    public ArrayAccessTree ArrayAccess(ExpressionTree array, ExpressionTree index) {
140
    public ArrayAccessTree ArrayAccess(ExpressionTree array, ExpressionTree index) {
126
        return make.at(NOPOS).Indexed((JCExpression)array, (JCExpression)index);
141
        return make.at(NOPOS).Indexed((JCExpression)array, (JCExpression)index);
127
    }
142
    }
Lines 139-165 Link Here
139
    }
154
    }
140
    
155
    
141
    public BinaryTree Binary(Kind operator, ExpressionTree left, ExpressionTree right) {
156
    public BinaryTree Binary(Kind operator, ExpressionTree left, ExpressionTree right) {
142
        final int op;
157
        final Tag op;
143
        switch (operator) {
158
        switch (operator) {
144
            case MULTIPLY: op = JCTree.MUL; break;
159
            case MULTIPLY: op = JCTree.Tag.MUL; break;
145
            case DIVIDE: op = JCTree.DIV; break;
160
            case DIVIDE: op = JCTree.Tag.DIV; break;
146
            case REMAINDER: op = JCTree.MOD; break;
161
            case REMAINDER: op = JCTree.Tag.MOD; break;
147
            case PLUS: op = JCTree.PLUS; break;
162
            case PLUS: op = JCTree.Tag.PLUS; break;
148
            case MINUS: op = JCTree.MINUS; break;
163
            case MINUS: op = JCTree.Tag.MINUS; break;
149
            case LEFT_SHIFT: op = JCTree.SL; break;
164
            case LEFT_SHIFT: op = JCTree.Tag.SL; break;
150
            case RIGHT_SHIFT: op = JCTree.SR; break;
165
            case RIGHT_SHIFT: op = JCTree.Tag.SR; break;
151
            case UNSIGNED_RIGHT_SHIFT: op = JCTree.USR; break;
166
            case UNSIGNED_RIGHT_SHIFT: op = JCTree.Tag.USR; break;
152
            case LESS_THAN: op = JCTree.LT; break;
167
            case LESS_THAN: op = JCTree.Tag.LT; break;
153
            case GREATER_THAN: op = JCTree.GT; break;
168
            case GREATER_THAN: op = JCTree.Tag.GT; break;
154
            case LESS_THAN_EQUAL: op = JCTree.LE; break;
169
            case LESS_THAN_EQUAL: op = JCTree.Tag.LE; break;
155
            case GREATER_THAN_EQUAL: op = JCTree.GE; break;
170
            case GREATER_THAN_EQUAL: op = JCTree.Tag.GE; break;
156
            case EQUAL_TO: op = JCTree.EQ; break;
171
            case EQUAL_TO: op = JCTree.Tag.EQ; break;
157
            case NOT_EQUAL_TO: op = JCTree.NE; break;
172
            case NOT_EQUAL_TO: op = JCTree.Tag.NE; break;
158
            case AND: op = JCTree.BITAND; break;
173
            case AND: op = JCTree.Tag.BITAND; break;
159
            case XOR: op = JCTree.BITXOR; break;
174
            case XOR: op = JCTree.Tag.BITXOR; break;
160
            case OR: op = JCTree.BITOR; break;
175
            case OR: op = JCTree.Tag.BITOR; break;
161
            case CONDITIONAL_AND: op = JCTree.AND; break;
176
            case CONDITIONAL_AND: op = JCTree.Tag.AND; break;
162
            case CONDITIONAL_OR: op = JCTree.OR; break;
177
            case CONDITIONAL_OR: op = JCTree.Tag.OR; break;
163
            default:
178
            default:
164
                throw new IllegalArgumentException("Illegal binary operator: " + operator);
179
                throw new IllegalArgumentException("Illegal binary operator: " + operator);
165
        }
180
        }
Lines 265-283 Link Here
265
    public CompoundAssignmentTree CompoundAssignment(Kind operator, 
280
    public CompoundAssignmentTree CompoundAssignment(Kind operator, 
266
                                                     ExpressionTree variable, 
281
                                                     ExpressionTree variable, 
267
                                                     ExpressionTree expression) {
282
                                                     ExpressionTree expression) {
268
        final int op;
283
        final Tag op;
269
        switch (operator) {
284
        switch (operator) {
270
            case MULTIPLY_ASSIGNMENT: op = JCTree.MUL_ASG; break;
285
            case MULTIPLY_ASSIGNMENT: op = JCTree.Tag.MUL_ASG; break;
271
            case DIVIDE_ASSIGNMENT: op = JCTree.DIV_ASG; break;
286
            case DIVIDE_ASSIGNMENT: op = JCTree.Tag.DIV_ASG; break;
272
            case REMAINDER_ASSIGNMENT: op = JCTree.MOD_ASG; break;
287
            case REMAINDER_ASSIGNMENT: op = JCTree.Tag.MOD_ASG; break;
273
            case PLUS_ASSIGNMENT: op = JCTree.PLUS_ASG; break;
288
            case PLUS_ASSIGNMENT: op = JCTree.Tag.PLUS_ASG; break;
274
            case MINUS_ASSIGNMENT: op = JCTree.MINUS_ASG; break;
289
            case MINUS_ASSIGNMENT: op = JCTree.Tag.MINUS_ASG; break;
275
            case LEFT_SHIFT_ASSIGNMENT: op = JCTree.SL_ASG; break;
290
            case LEFT_SHIFT_ASSIGNMENT: op = JCTree.Tag.SL_ASG; break;
276
            case RIGHT_SHIFT_ASSIGNMENT: op = JCTree.SR_ASG; break;
291
            case RIGHT_SHIFT_ASSIGNMENT: op = JCTree.Tag.SR_ASG; break;
277
            case UNSIGNED_RIGHT_SHIFT_ASSIGNMENT: op = JCTree.USR_ASG; break;
292
            case UNSIGNED_RIGHT_SHIFT_ASSIGNMENT: op = JCTree.Tag.USR_ASG; break;
278
            case AND_ASSIGNMENT: op = JCTree.BITAND_ASG; break;
293
            case AND_ASSIGNMENT: op = JCTree.Tag.BITAND_ASG; break;
279
            case XOR_ASSIGNMENT: op = JCTree.BITXOR_ASG; break;
294
            case XOR_ASSIGNMENT: op = JCTree.Tag.BITXOR_ASG; break;
280
            case OR_ASSIGNMENT: op = JCTree.BITOR_ASG; break;
295
            case OR_ASSIGNMENT: op = JCTree.Tag.BITOR_ASG; break;
281
            default:
296
            default:
282
                throw new IllegalArgumentException("Illegal binary operator: " + operator);
297
                throw new IllegalArgumentException("Illegal binary operator: " + operator);
283
        }
298
        }
Lines 365-387 Link Here
365
        return make.at(NOPOS).TypeTest((JCExpression)expression, (JCTree)type);
380
        return make.at(NOPOS).TypeTest((JCExpression)expression, (JCTree)type);
366
    }
381
    }
367
    
382
    
383
    public IntersectionTypeTree IntersectionType(List<? extends Tree> bounds) {
384
        ListBuffer<JCExpression> jcbounds = new ListBuffer<JCExpression>();
385
        for (Tree t : bounds)
386
            jcbounds.append((JCExpression)t);
387
        return make.at(NOPOS).TypeIntersection(jcbounds.toList());
388
    }
389
    
368
    public LabeledStatementTree LabeledStatement(CharSequence label, StatementTree statement) {
390
    public LabeledStatementTree LabeledStatement(CharSequence label, StatementTree statement) {
369
        return make.at(NOPOS).Labelled(names.fromString(label.toString()), (JCStatement)statement);
391
        return make.at(NOPOS).Labelled(names.fromString(label.toString()), (JCStatement)statement);
370
    }
392
    }
371
    
393
    
394
    public LambdaExpressionTree LambdaExpression(List<? extends VariableTree> parameters, Tree body) {
395
        ListBuffer<JCVariableDecl> params = new ListBuffer<JCVariableDecl>();
396
        for (Tree t : parameters)
397
            params.append((JCVariableDecl)t);
398
        return make.at(NOPOS).Lambda(params.toList(), (JCTree) body);
399
    }
400
372
    public LiteralTree Literal(Object value) {
401
    public LiteralTree Literal(Object value) {
373
        try {
402
        try {
374
            if (value instanceof Boolean)  // workaround for javac issue 6504896
403
            if (value instanceof Boolean)  // workaround for javac issue 6504896
375
                return make.at(NOPOS).Literal(TypeTags.BOOLEAN, value == Boolean.FALSE ? 0 : 1);
404
                return make.at(NOPOS).Literal(TypeTag.BOOLEAN, value == Boolean.FALSE ? 0 : 1);
376
            if (value instanceof Character) // looks like world championship in workarounds here ;-)
405
            if (value instanceof Character) // looks like world championship in workarounds here ;-)
377
                return make.at(NOPOS).Literal(TypeTags.CHAR, Integer.valueOf((Character) value));
406
                return make.at(NOPOS).Literal(TypeTag.CHAR, Integer.valueOf((Character) value));
378
            if (value instanceof Byte) // #119143: Crystal ball no. 4
407
            if (value instanceof Byte) // #119143: Crystal ball no. 4
379
                return make.at(NOPOS).Literal(TypeTags.INT, ((Byte) value).intValue());
408
                return make.at(NOPOS).Literal(TypeTag.INT, ((Byte) value).intValue());
380
            if (value instanceof Short)
409
            if (value instanceof Short)
381
                return make.at(NOPOS).Literal(TypeTags.INT, ((Short) value).intValue());
410
                return make.at(NOPOS).Literal(TypeTag.INT, ((Short) value).intValue());
382
            // workaround for making NULL_LITERAL kind.
411
            // workaround for making NULL_LITERAL kind.
383
            if (value == null) {
412
            if (value == null) {
384
                return make.at(NOPOS).Literal(TypeTags.BOT, value);
413
                return make.at(NOPOS).Literal(TypeTag.BOT, value);
385
            }
414
            }
386
            return make.at(NOPOS).Literal(value);
415
            return make.at(NOPOS).Literal(value);
387
        } catch (AssertionError e) {
416
        } catch (AssertionError e) {
Lines 458-463 Link Here
458
    public MethodTree Method(ExecutableElement element, BlockTree body) {
487
    public MethodTree Method(ExecutableElement element, BlockTree body) {
459
        return make.at(NOPOS).MethodDef((Symbol.MethodSymbol)element, (JCBlock)body);
488
        return make.at(NOPOS).MethodDef((Symbol.MethodSymbol)element, (JCBlock)body);
460
    }
489
    }
490
491
    public MemberReferenceTree MemberReference(ReferenceMode refMode, CharSequence name, ExpressionTree expression, List<? extends ExpressionTree> typeArguments) {
492
        ListBuffer<JCExpression> targs;
493
        
494
        if (typeArguments != null) {
495
            targs = new ListBuffer<JCExpression>();
496
            for (ExpressionTree t : typeArguments)
497
                targs.append((JCExpression)t);
498
        } else {
499
            targs = null;
500
        }
501
        
502
        return make.at(NOPOS).Reference(refMode, names.fromString(name.toString()), (JCExpression) expression, targs != null ? targs.toList() : null);
503
    }
461
    
504
    
462
    public ModifiersTree Modifiers(Set<Modifier> flagset, List<? extends AnnotationTree> annotations) {
505
    public ModifiersTree Modifiers(Set<Modifier> flagset, List<? extends AnnotationTree> annotations) {
463
        return Modifiers(modifiersToFlags(flagset), annotations);
506
        return Modifiers(modifiersToFlags(flagset), annotations);
Lines 546-579 Link Here
546
    }
589
    }
547
    
590
    
548
    public PrimitiveTypeTree PrimitiveType(TypeKind typekind) {
591
    public PrimitiveTypeTree PrimitiveType(TypeKind typekind) {
549
        final int typetag;
592
        final TypeTag typetag;
550
        switch (typekind) {
593
        switch (typekind) {
551
            case BOOLEAN:
594
            case BOOLEAN:
552
                typetag = TypeTags.BOOLEAN;
595
                typetag = TypeTag.BOOLEAN;
553
                break;
596
                break;
554
            case BYTE:
597
            case BYTE:
555
                typetag = TypeTags.BYTE;
598
                typetag = TypeTag.BYTE;
556
                break;
599
                break;
557
            case SHORT:
600
            case SHORT:
558
                typetag = TypeTags.SHORT;
601
                typetag = TypeTag.SHORT;
559
                break;
602
                break;
560
            case INT:
603
            case INT:
561
                typetag = TypeTags.INT;
604
                typetag = TypeTag.INT;
562
                break;
605
                break;
563
            case LONG:
606
            case LONG:
564
                typetag = TypeTags.LONG;
607
                typetag = TypeTag.LONG;
565
                break;
608
                break;
566
            case CHAR:
609
            case CHAR:
567
                typetag = TypeTags.CHAR;
610
                typetag = TypeTag.CHAR;
568
                break;
611
                break;
569
            case FLOAT:
612
            case FLOAT:
570
                typetag = TypeTags.FLOAT;
613
                typetag = TypeTag.FLOAT;
571
                break;
614
                break;
572
            case DOUBLE:
615
            case DOUBLE:
573
                typetag = TypeTags.DOUBLE;
616
                typetag = TypeTag.DOUBLE;
574
                break;
617
                break;
575
            case VOID:
618
            case VOID:
576
                typetag = TypeTags.VOID;
619
                typetag = TypeTag.VOID;
577
                break;
620
                break;
578
            default:
621
            default:
579
                throw new AssertionError("unknown primitive type " + typekind);
622
                throw new AssertionError("unknown primitive type " + typekind);
Lines 674-680 Link Here
674
                tp = make.at(NOPOS).TypeArray((JCExpression) Type(((ArrayType) type).getComponentType()));
717
                tp = make.at(NOPOS).TypeArray((JCExpression) Type(((ArrayType) type).getComponentType()));
675
                break;
718
                break;
676
            case NULL:
719
            case NULL:
677
                tp = make.at(NOPOS).Literal(TypeTags.BOT, null);
720
                tp = make.at(NOPOS).Literal(TypeTag.BOT, null);
678
                break;
721
                break;
679
            case ERROR:
722
            case ERROR:
680
                tp = make.at(NOPOS).Ident(((ErrorType) type).tsym.name);
723
                tp = make.at(NOPOS).Ident(((ErrorType) type).tsym.name);
Lines 698-713 Link Here
698
    }
741
    }
699
    
742
    
700
    public UnaryTree Unary(Kind operator, ExpressionTree arg) {
743
    public UnaryTree Unary(Kind operator, ExpressionTree arg) {
701
        final int op;
744
        final Tag op;
702
        switch (operator) {
745
        switch (operator) {
703
            case POSTFIX_INCREMENT: op = JCTree.POSTINC; break;
746
            case POSTFIX_INCREMENT: op = JCTree.Tag.POSTINC; break;
704
            case POSTFIX_DECREMENT: op = JCTree.POSTDEC; break;
747
            case POSTFIX_DECREMENT: op = JCTree.Tag.POSTDEC; break;
705
            case PREFIX_INCREMENT: op = JCTree.PREINC; break;
748
            case PREFIX_INCREMENT: op = JCTree.Tag.PREINC; break;
706
            case PREFIX_DECREMENT: op = JCTree.PREDEC; break;
749
            case PREFIX_DECREMENT: op = JCTree.Tag.PREDEC; break;
707
            case UNARY_PLUS: op = JCTree.POS; break;
750
            case UNARY_PLUS: op = JCTree.Tag.POS; break;
708
            case UNARY_MINUS: op = JCTree.NEG; break;
751
            case UNARY_MINUS: op = JCTree.Tag.NEG; break;
709
            case BITWISE_COMPLEMENT: op = JCTree.COMPL; break;
752
            case BITWISE_COMPLEMENT: op = JCTree.Tag.COMPL; break;
710
            case LOGICAL_COMPLEMENT: op = JCTree.NOT; break;
753
            case LOGICAL_COMPLEMENT: op = JCTree.Tag.NOT; break;
711
            default:
754
            default:
712
                throw new IllegalArgumentException("Illegal unary operator: " + operator);
755
                throw new IllegalArgumentException("Illegal unary operator: " + operator);
713
        }
756
        }
Lines 746-752 Link Here
746
                throw new IllegalArgumentException("Unknown wildcard bound " + kind);
789
                throw new IllegalArgumentException("Unknown wildcard bound " + kind);
747
        }
790
        }
748
        TypeBoundKind tbk = make.at(NOPOS).TypeBoundKind(boundKind);
791
        TypeBoundKind tbk = make.at(NOPOS).TypeBoundKind(boundKind);
749
        return make.at(NOPOS).Wildcard(tbk, (JCTree)type);
792
        return make.at(NOPOS).Wildcard(tbk, (JCExpression)type);
750
    }
793
    }
751
    
794
    
752
    ////////////////////////////////////// makers modification suggested by Tom
795
    ////////////////////////////////////// makers modification suggested by Tom
Lines 769-778 Link Here
769
    }
812
    }
770
813
771
    private AnnotationTree modifyAnnotationAttrValue(AnnotationTree annotation, int index, ExpressionTree attrValue, Operation op) {
814
    private AnnotationTree modifyAnnotationAttrValue(AnnotationTree annotation, int index, ExpressionTree attrValue, Operation op) {
772
        AnnotationTree copy = Annotation(
815
        AnnotationTree copy = annotation.getKind() == Kind.ANNOTATION
773
                annotation.getAnnotationType(),
816
                ? Annotation(annotation.getAnnotationType(), c(annotation.getArguments(), index, attrValue, op))
774
                c(annotation.getArguments(), index, attrValue, op)
817
                : TypeAnnotation(annotation.getAnnotationType(), c(annotation.getArguments(), index, attrValue, op));
775
        );
776
        return copy;
818
        return copy;
777
    }
819
    }
778
    
820
    
Lines 1423-1428 Link Here
1423
        return copy;
1465
        return copy;
1424
    }
1466
    }
1425
    
1467
    
1468
    public LambdaExpressionTree addLambdaParameter(LambdaExpressionTree method, VariableTree parameter) {
1469
        return modifyLambdaParameter(method, -1, parameter, Operation.ADD);
1470
    }
1471
1472
    public LambdaExpressionTree insertLambdaParameter(LambdaExpressionTree method, int index, VariableTree parameter) {
1473
        return modifyLambdaParameter(method, index, parameter, Operation.ADD);
1474
    }
1475
    
1476
    public LambdaExpressionTree removeLambdaParameter(LambdaExpressionTree method, VariableTree parameter) {
1477
        return modifyLambdaParameter(method, -1, parameter, Operation.REMOVE);
1478
    }
1479
1480
    public LambdaExpressionTree removeLambdaParameter(LambdaExpressionTree method, int index) {
1481
        return modifyLambdaParameter(method, index, null, Operation.REMOVE);
1482
    }
1483
    
1484
    private LambdaExpressionTree modifyLambdaParameter(LambdaExpressionTree method, int index, VariableTree parameter, Operation op) {
1485
        LambdaExpressionTree copy = LambdaExpression(
1486
                c(method.getParameters(), index, parameter, op),
1487
                method.getBody()
1488
        );
1489
        return copy;
1490
    }
1491
    
1492
    public LambdaExpressionTree setLambdaBody(LambdaExpressionTree method, Tree newBody) {
1493
        return LambdaExpression(method.getParameters(),newBody);
1494
    }
1495
    
1426
    private <E extends Tree> List<E> c(List<? extends E> originalList, int index, E item, Operation operation) {
1496
    private <E extends Tree> List<E> c(List<? extends E> originalList, int index, E item, Operation operation) {
1427
        List<E> copy = new ArrayList<E>(originalList);
1497
        List<E> copy = new ArrayList<E>(originalList);
1428
        switch (operation) {
1498
        switch (operation) {
(-)a/java.source/src/org/netbeans/modules/java/source/indexing/JavaCustomIndexer.java (-4 / +7 lines)
Lines 626-632 Link Here
626
626
627
    static void setErrors(Context context, CompileTuple active, DiagnosticListenerImpl errors) {
627
    static void setErrors(Context context, CompileTuple active, DiagnosticListenerImpl errors) {
628
        if (!active.virtual) {
628
        if (!active.virtual) {
629
            Iterable<Diagnostic<? extends JavaFileObject>> filteredErrorsList = Iterators.filter(errors.getDiagnostics(active.jfo), new FilterOutDiamondWarnings());
629
            Iterable<Diagnostic<? extends JavaFileObject>> filteredErrorsList = Iterators.filter(errors.getDiagnostics(active.jfo), new FilterOutJDK7AndLaterWarnings());
630
            ErrorsCache.setErrors(context.getRootURI(), active.indexable, filteredErrorsList, active.aptGenerated ? ERROR_CONVERTOR_NO_BADGE : ERROR_CONVERTOR);
630
            ErrorsCache.setErrors(context.getRootURI(), active.indexable, filteredErrorsList, active.aptGenerated ? ERROR_CONVERTOR_NO_BADGE : ERROR_CONVERTOR);
631
        }
631
        }
632
    }
632
    }
Lines 1171-1181 Link Here
1171
        return result;
1171
        return result;
1172
    }
1172
    }
1173
1173
1174
    private static final Set<String> DIAMOND_KINDS = new HashSet<String>(Arrays.asList("compiler.warn.diamond.redundant.args", "compiler.warn.diamond.redundant.args.1"));
1174
    private static final Set<String> JDK7AndLaterWarnings = new HashSet<String>(Arrays.asList(
1175
            "compiler.warn.diamond.redundant.args", 
1176
            "compiler.warn.diamond.redundant.args.1",
1177
            "compiler.note.potential.lambda.found"));
1175
1178
1176
    private static class FilterOutDiamondWarnings implements Comparable<Diagnostic<? extends JavaFileObject>> {
1179
    private static class FilterOutJDK7AndLaterWarnings implements Comparable<Diagnostic<? extends JavaFileObject>> {
1177
        @Override public int compareTo(Diagnostic<? extends JavaFileObject> o) {
1180
        @Override public int compareTo(Diagnostic<? extends JavaFileObject> o) {
1178
            return DIAMOND_KINDS.contains(o.getCode()) ? 0 : -1;
1181
            return JDK7AndLaterWarnings.contains(o.getCode()) ? 0 : -1;
1179
        }
1182
        }
1180
    }
1183
    }
1181
    
1184
    
(-)a/java.source/src/org/netbeans/modules/java/source/indexing/MultiPassCompileWorker.java (-3 / +3 lines)
Lines 47-53 Link Here
47
import com.sun.tools.javac.code.Symbol.ClassSymbol;
47
import com.sun.tools.javac.code.Symbol.ClassSymbol;
48
import com.sun.tools.javac.code.Symtab;
48
import com.sun.tools.javac.code.Symtab;
49
import com.sun.tools.javac.code.Type;
49
import com.sun.tools.javac.code.Type;
50
import com.sun.tools.javac.code.TypeTags;
50
import com.sun.tools.javac.code.TypeTag;
51
import com.sun.tools.javac.code.Types;
51
import com.sun.tools.javac.code.Types;
52
import com.sun.tools.javac.comp.AttrContext;
52
import com.sun.tools.javac.comp.AttrContext;
53
import com.sun.tools.javac.comp.Enter;
53
import com.sun.tools.javac.comp.Enter;
Lines 214-220 Link Here
214
                            public void visitClassDef(JCClassDecl node) {
214
                            public void visitClassDef(JCClassDecl node) {
215
                                if (node.sym != null) {
215
                                if (node.sym != null) {
216
                                    Type st = ts.supertype(node.sym.type);
216
                                    Type st = ts.supertype(node.sym.type);
217
                                    if (st.tag == TypeTags.CLASS) {
217
                                    if (st.hasTag(TypeTag.CLASS)) {
218
                                        ClassSymbol c = st.tsym.outermostClass();
218
                                        ClassSymbol c = st.tsym.outermostClass();
219
                                        CompileTuple u = jfo2tuples.get(c.sourcefile);
219
                                        CompileTuple u = jfo2tuples.get(c.sourcefile);
220
                                        if (u != null && !previous.finishedFiles.contains(u.indexable) && !u.indexable.equals(activeIndexable)) {
220
                                        if (u != null && !previous.finishedFiles.contains(u.indexable) && !u.indexable.equals(activeIndexable)) {
Lines 437-443 Link Here
437
                    public void visitClassDef(JCClassDecl node) {
437
                    public void visitClassDef(JCClassDecl node) {
438
                        if (node.sym != null) {
438
                        if (node.sym != null) {
439
                            Type st = types.supertype(node.sym.type);
439
                            Type st = types.supertype(node.sym.type);
440
                            if (st.tag == TypeTags.CLASS) {
440
                            if (st.hasTag(TypeTag.CLASS)) {
441
                                ClassSymbol c = st.tsym.outermostClass();
441
                                ClassSymbol c = st.tsym.outermostClass();
442
                                Env<AttrContext> stEnv = enter.getEnv(c);
442
                                Env<AttrContext> stEnv = enter.getEnv(c);
443
                                if (stEnv != null && env != stEnv) {
443
                                if (stEnv != null && env != stEnv) {
(-)a/java.source/src/org/netbeans/modules/java/source/indexing/OnePassCompileWorker.java (-2 / +2 lines)
Lines 46-52 Link Here
46
import com.sun.tools.javac.api.JavacTaskImpl;
46
import com.sun.tools.javac.api.JavacTaskImpl;
47
import com.sun.tools.javac.code.Symbol.ClassSymbol;
47
import com.sun.tools.javac.code.Symbol.ClassSymbol;
48
import com.sun.tools.javac.code.Type;
48
import com.sun.tools.javac.code.Type;
49
import com.sun.tools.javac.code.TypeTags;
49
import com.sun.tools.javac.code.TypeTag;
50
import com.sun.tools.javac.code.Types;
50
import com.sun.tools.javac.code.Types;
51
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
51
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
52
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
52
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
Lines 224-230 Link Here
224
                        public void visitClassDef(JCClassDecl node) {
224
                        public void visitClassDef(JCClassDecl node) {
225
                            if (node.sym != null) {
225
                            if (node.sym != null) {
226
                                Type st = ts.supertype(node.sym.type);
226
                                Type st = ts.supertype(node.sym.type);
227
                                if (st.tag == TypeTags.CLASS) {
227
                                if (st.hasTag(TypeTag.CLASS)) {
228
                                    ClassSymbol c = st.tsym.outermostClass();
228
                                    ClassSymbol c = st.tsym.outermostClass();
229
                                    Pair<CompilationUnitTree, CompileTuple> u = jfo2units.remove(c.sourcefile);
229
                                    Pair<CompilationUnitTree, CompileTuple> u = jfo2units.remove(c.sourcefile);
230
                                    if (u != null && !finished.contains(u.second.indexable) && !u.second.indexable.equals(activeIndexable)) {
230
                                    if (u != null && !finished.contains(u.second.indexable) && !u.second.indexable.equals(activeIndexable)) {
(-)a/java.source/src/org/netbeans/modules/java/source/indexing/SuperOnePassCompileWorker.java (-1 / +1 lines)
Lines 238-244 Link Here
238
                }
238
                }
239
                List<TypeElement> activeTypes = new ArrayList<TypeElement>();
239
                List<TypeElement> activeTypes = new ArrayList<TypeElement>();
240
                for (Tree tree : unit.getKey().getTypeDecls()) {
240
                for (Tree tree : unit.getKey().getTypeDecls()) {
241
                    if (tree instanceof JCTree && ((JCTree)tree).getTag() == JCTree.CLASSDEF) {
241
                    if (tree instanceof JCTree && ((JCTree)tree).getTag() == JCTree.Tag.CLASSDEF) {
242
                        ClassSymbol sym = ((JCClassDecl)tree).sym;
242
                        ClassSymbol sym = ((JCClassDecl)tree).sym;
243
                        if (sym != null)
243
                        if (sym != null)
244
                            activeTypes.add(sym);
244
                            activeTypes.add(sym);
(-)a/java.source/src/org/netbeans/modules/java/source/parsing/JavacParser.java (-12 / +15 lines)
Lines 53-58 Link Here
53
import com.sun.tools.javac.api.JavacTaskImpl;
53
import com.sun.tools.javac.api.JavacTaskImpl;
54
import com.sun.tools.javac.api.JavacTool;
54
import com.sun.tools.javac.api.JavacTool;
55
import com.sun.tools.javac.api.JavacTrees;
55
import com.sun.tools.javac.api.JavacTrees;
56
import com.sun.tools.javac.parser.LazyDocCommentTable;
57
import com.sun.tools.javac.parser.Tokens.Comment;
58
import com.sun.tools.javac.tree.EndPosTable;
56
import com.sun.tools.javac.tree.JCTree;
59
import com.sun.tools.javac.tree.JCTree;
57
import com.sun.tools.javac.tree.JCTree.JCBlock;
60
import com.sun.tools.javac.tree.JCTree.JCBlock;
58
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
61
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
Lines 97-103 Link Here
97
import javax.swing.text.JTextComponent;
100
import javax.swing.text.JTextComponent;
98
import javax.tools.Diagnostic;
101
import javax.tools.Diagnostic;
99
import javax.tools.DiagnosticListener;
102
import javax.tools.DiagnosticListener;
100
import javax.tools.JavaCompiler;
101
import javax.tools.JavaFileObject;
103
import javax.tools.JavaFileObject;
102
import org.netbeans.api.annotations.common.NonNull;
104
import org.netbeans.api.annotations.common.NonNull;
103
import org.netbeans.api.annotations.common.NullAllowed;
105
import org.netbeans.api.annotations.common.NullAllowed;
Lines 717-723 Link Here
717
        JavacTaskImpl javacTask = createJavacTask(cpInfo, diagnosticListener, sourceLevel, false, oraculum, dcc, parser == null ? null : new DefaultCancelService(parser), APTUtils.get(root));
719
        JavacTaskImpl javacTask = createJavacTask(cpInfo, diagnosticListener, sourceLevel, false, oraculum, dcc, parser == null ? null : new DefaultCancelService(parser), APTUtils.get(root));
718
        Context context = javacTask.getContext();
720
        Context context = javacTask.getContext();
719
        TreeLoader.preRegister(context, cpInfo, detached);
721
        TreeLoader.preRegister(context, cpInfo, detached);
720
        com.sun.tools.javac.main.JavaCompiler.instance(context).keepComments = true;
721
        return javacTask;
722
        return javacTask;
722
    }
723
    }
723
724
Lines 735-740 Link Here
735
        if (!backgroundCompilation) {
736
        if (!backgroundCompilation) {
736
            options.add("-Xjcov"); //NOI18N, Make the compiler store end positions
737
            options.add("-Xjcov"); //NOI18N, Make the compiler store end positions
737
            options.add("-XDallowStringFolding=false"); //NOI18N
738
            options.add("-XDallowStringFolding=false"); //NOI18N
739
            options.add("-XDkeepComments=true"); //NOI18N
738
            assert options.add("-XDdev") || true; //NOI18N
740
            assert options.add("-XDdev") || true; //NOI18N
739
        } else {
741
        } else {
740
            options.add("-XDbackgroundCompilation");    //NOI18N
742
            options.add("-XDbackgroundCompilation");    //NOI18N
Lines 783-796 Link Here
783
            options.add("-proc:none"); // NOI18N, Disable annotation processors
785
            options.add("-proc:none"); // NOI18N, Disable annotation processors
784
        }
786
        }
785
787
786
        JavaCompiler tool = JavacTool.create();
788
        Context context = new Context();
787
        JavacTaskImpl task = (JavacTaskImpl)tool.getTask(null, 
789
        //need to preregister the Messages here, because the getTask below requires Log instance:
790
        Messager.preRegister(context, null, DEV_NULL, DEV_NULL, DEV_NULL);
791
        JavacTaskImpl task = (JavacTaskImpl)JavacTool.create().getTask(null, 
788
                ClasspathInfoAccessor.getINSTANCE().getFileManager(cpInfo),
792
                ClasspathInfoAccessor.getINSTANCE().getFileManager(cpInfo),
789
                diagnosticListener, options, null, Collections.<JavaFileObject>emptySet());
793
                diagnosticListener, options, null, Collections.<JavaFileObject>emptySet(),
794
                context);
790
        if (aptEnabled) {
795
        if (aptEnabled) {
791
            task.setProcessors(processors);
796
            task.setProcessors(processors);
792
        }
797
        }
793
        Context context = task.getContext();
794
        NBClassReader.preRegister(context, !backgroundCompilation);
798
        NBClassReader.preRegister(context, !backgroundCompilation);
795
        if (cnih != null) {
799
        if (cnih != null) {
796
            context.put(ClassNamesForFileOraculum.class, cnih);
800
            context.put(ClassNamesForFileOraculum.class, cnih);
Lines 801-807 Link Here
801
        if (cancelService != null) {
805
        if (cancelService != null) {
802
            DefaultCancelService.preRegister(context, cancelService);
806
            DefaultCancelService.preRegister(context, cancelService);
803
        }
807
        }
804
        Messager.preRegister(context, null, DEV_NULL, DEV_NULL, DEV_NULL);
805
        NBAttr.preRegister(context);
808
        NBAttr.preRegister(context);
806
        NBClassWriter.preRegister(context);
809
        NBClassWriter.preRegister(context);
807
        NBParserFactory.preRegister(context);
810
        NBParserFactory.preRegister(context);
Lines 1000-1006 Link Here
1000
                    assert dl instanceof CompilationInfoImpl.DiagnosticListenerImpl;
1003
                    assert dl instanceof CompilationInfoImpl.DiagnosticListenerImpl;
1001
                    ((CompilationInfoImpl.DiagnosticListenerImpl)dl).startPartialReparse(origStartPos, origEndPos);
1004
                    ((CompilationInfoImpl.DiagnosticListenerImpl)dl).startPartialReparse(origStartPos, origEndPos);
1002
                    long start = System.currentTimeMillis();
1005
                    long start = System.currentTimeMillis();
1003
                    Map<JCTree,String> docComments = new HashMap<JCTree, String>();
1006
                    Map<JCTree,LazyDocCommentTable.Entry> docComments = new HashMap<JCTree, LazyDocCommentTable.Entry>();
1004
                    block = pr.reparseMethodBody(cu, orig, newBody, firstInner, docComments);
1007
                    block = pr.reparseMethodBody(cu, orig, newBody, firstInner, docComments);
1005
                    if (LOGGER.isLoggable(Level.FINER)) {
1008
                    if (LOGGER.isLoggable(Level.FINER)) {
1006
                        LOGGER.log(Level.FINER, "Reparsed method in: {0}", fo);     //NOI18N
1009
                        LOGGER.log(Level.FINER, "Reparsed method in: {0}", fo);     //NOI18N
Lines 1015-1029 Link Here
1015
                        }
1018
                        }
1016
                        return false;
1019
                        return false;
1017
                    }
1020
                    }
1018
                    ((JCTree.JCCompilationUnit)cu).docComments.keySet().removeAll(fav.docOwners);
1021
                    ((LazyDocCommentTable) ((JCTree.JCCompilationUnit)cu).docComments).table.keySet().removeAll(fav.docOwners);
1019
                    ((JCTree.JCCompilationUnit)cu).docComments.putAll(docComments);
1022
                    ((LazyDocCommentTable) ((JCTree.JCCompilationUnit)cu).docComments).table.putAll(docComments);
1020
                    long end = System.currentTimeMillis();
1023
                    long end = System.currentTimeMillis();
1021
                    if (fo != null) {
1024
                    if (fo != null) {
1022
                        logTime (fo,Phase.PARSED,(end-start));
1025
                        logTime (fo,Phase.PARSED,(end-start));
1023
                    }
1026
                    }
1024
                    final int newEndPos = (int) jt.getSourcePositions().getEndPosition(cu, block);
1027
                    final int newEndPos = (int) jt.getSourcePositions().getEndPosition(cu, block);
1025
                    final int delta = newEndPos - origEndPos;
1028
                    final int delta = newEndPos - origEndPos;
1026
                    final Map<JCTree,Integer> endPos = ((JCCompilationUnit)cu).endPositions;
1029
                    final EndPosTable endPos = ((JCCompilationUnit)cu).endPositions;
1027
                    final TranslatePositionsVisitor tpv = new TranslatePositionsVisitor(orig, endPos, delta);
1030
                    final TranslatePositionsVisitor tpv = new TranslatePositionsVisitor(orig, endPos, delta);
1028
                    tpv.scan(cu, null);
1031
                    tpv.scan(cu, null);
1029
                    ((JCMethodDecl)orig).body = block;
1032
                    ((JCMethodDecl)orig).body = block;
Lines 1060-1066 Link Here
1060
                    //fix CompilationUnitTree.getLineMap:
1063
                    //fix CompilationUnitTree.getLineMap:
1061
                    long startM = System.currentTimeMillis();
1064
                    long startM = System.currentTimeMillis();
1062
                    char[] chars = snapshot.getText().toString().toCharArray();
1065
                    char[] chars = snapshot.getText().toString().toCharArray();
1063
                    ((LineMapImpl) cu.getLineMap()).build(chars, chars.length, '\0');
1066
                    ((LineMapImpl) cu.getLineMap()).build(chars, chars.length);
1064
                    LOGGER.log(Level.FINER, "Rebuilding LineMap took: {0}", System.currentTimeMillis() - startM);
1067
                    LOGGER.log(Level.FINER, "Rebuilding LineMap took: {0}", System.currentTimeMillis() - startM);
1065
1068
1066
                    ((CompilationInfoImpl.DiagnosticListenerImpl)dl).endPartialReparse (delta);
1069
                    ((CompilationInfoImpl.DiagnosticListenerImpl)dl).endPartialReparse (delta);
(-)a/java.source/src/org/netbeans/modules/java/source/parsing/TranslatePositionsVisitor.java (-6 / +9 lines)
Lines 46-53 Link Here
46
import com.sun.source.tree.MethodTree;
46
import com.sun.source.tree.MethodTree;
47
import com.sun.source.tree.Tree;
47
import com.sun.source.tree.Tree;
48
import com.sun.source.util.TreeScanner;
48
import com.sun.source.util.TreeScanner;
49
import com.sun.tools.javac.tree.EndPosTable;
49
import com.sun.tools.javac.tree.JCTree;
50
import com.sun.tools.javac.tree.JCTree;
50
import java.util.Map;
51
import org.netbeans.lib.nbjavac.services.NBParserFactory.NBJavacParser.EndPosTableImpl;
51
52
52
/**
53
/**
53
 * Helper visitor for partial reparse.
54
 * Helper visitor for partial reparse.
Lines 57-68 Link Here
57
class TranslatePositionsVisitor extends TreeScanner<Void,Void> {
58
class TranslatePositionsVisitor extends TreeScanner<Void,Void> {
58
59
59
    private final MethodTree changedMethod;
60
    private final MethodTree changedMethod;
60
    private final Map<JCTree,Integer> endPos;
61
    private final EndPosTable endPos;
61
    private final int delta;
62
    private final int delta;
62
    boolean active;
63
    boolean active;
63
    boolean inMethod;
64
    boolean inMethod;
64
65
65
    public TranslatePositionsVisitor (final MethodTree changedMethod, final Map<JCTree, Integer> endPos, final int delta) {
66
    public TranslatePositionsVisitor (final MethodTree changedMethod, final EndPosTable endPos, final int delta) {
66
        assert changedMethod != null;
67
        assert changedMethod != null;
67
        assert endPos != null;
68
        assert endPos != null;
68
        this.changedMethod = changedMethod;
69
        this.changedMethod = changedMethod;
Lines 80-89 Link Here
80
        }
81
        }
81
        Void result = super.scan(node, p);            
82
        Void result = super.scan(node, p);            
82
        if (inMethod && node != null) {
83
        if (inMethod && node != null) {
83
            endPos.remove(node);
84
            endPos.replaceTree((JCTree) node, null);//remove
84
        }
85
        }
85
        if (active && node != null) {
86
        if (active && node != null) {
86
            Integer pos = endPos.remove(node);
87
            Integer pos = endPos.replaceTree((JCTree) node, null);//remove
87
            if (pos != null) {
88
            if (pos != null) {
88
                int newPos;
89
                int newPos;
89
                if (pos < 0) {
90
                if (pos < 0) {
Lines 92-98 Link Here
92
                else {
93
                else {
93
                    newPos = pos+delta;
94
                    newPos = pos+delta;
94
                }
95
                }
95
                endPos.put ((JCTree)node,newPos);
96
                ((EndPosTableImpl) endPos).storeEnd((JCTree)node,newPos);
96
            }                
97
            }                
97
        }
98
        }
98
        return result;
99
        return result;
Lines 128-131 Link Here
128
        }
129
        }
129
        return null;
130
        return null;
130
    }
131
    }
132
    
133
    
131
}
134
}
(-)a/java.source/src/org/netbeans/modules/java/source/pretty/VeryPretty.java (-20 / +45 lines)
Lines 45-50 Link Here
45
45
46
import com.sun.source.tree.ClassTree;
46
import com.sun.source.tree.ClassTree;
47
import com.sun.source.tree.CompilationUnitTree;
47
import com.sun.source.tree.CompilationUnitTree;
48
import com.sun.source.tree.MemberReferenceTree.ReferenceMode;
48
import com.sun.source.tree.MethodTree;
49
import com.sun.source.tree.MethodTree;
49
import com.sun.source.tree.Tree;
50
import com.sun.source.tree.Tree;
50
import static com.sun.source.tree.Tree.*;
51
import static com.sun.source.tree.Tree.*;
Lines 58-64 Link Here
58
import com.sun.tools.javac.code.*;
59
import com.sun.tools.javac.code.*;
59
import static com.sun.tools.javac.code.Flags.*;
60
import static com.sun.tools.javac.code.Flags.*;
60
import com.sun.tools.javac.code.Symbol.*;
61
import com.sun.tools.javac.code.Symbol.*;
61
import static com.sun.tools.javac.code.TypeTags.*;
62
import com.sun.tools.javac.main.JavaCompiler;
62
import com.sun.tools.javac.main.JavaCompiler;
63
import com.sun.tools.javac.tree.JCTree;
63
import com.sun.tools.javac.tree.JCTree;
64
import com.sun.tools.javac.tree.JCTree.*;
64
import com.sun.tools.javac.tree.JCTree.*;
Lines 88-94 Link Here
88
import org.netbeans.modules.java.source.parsing.JavacParser;
88
import org.netbeans.modules.java.source.parsing.JavacParser;
89
import org.netbeans.modules.java.source.save.CasualDiff;
89
import org.netbeans.modules.java.source.save.CasualDiff;
90
import org.netbeans.modules.java.source.save.DiffContext;
90
import org.netbeans.modules.java.source.save.DiffContext;
91
import static org.netbeans.modules.java.source.save.PositionEstimator.*;
92
import org.netbeans.modules.java.source.save.Reformatter;
91
import org.netbeans.modules.java.source.save.Reformatter;
93
import org.netbeans.modules.java.source.transform.FieldGroupTree;
92
import org.netbeans.modules.java.source.transform.FieldGroupTree;
94
import org.netbeans.spi.java.classpath.support.ClassPathSupport;
93
import org.netbeans.spi.java.classpath.support.ClassPathSupport;
Lines 582-588 Link Here
582
        printPackage(tree.pid);
581
        printPackage(tree.pid);
583
        List<JCTree> l = tree.defs;
582
        List<JCTree> l = tree.defs;
584
        ArrayList<JCImport> imports = new ArrayList<JCImport>();
583
        ArrayList<JCImport> imports = new ArrayList<JCImport>();
585
        while (l.nonEmpty() && l.head.getTag() == JCTree.IMPORT){
584
        while (l.nonEmpty() && l.head.getTag() == JCTree.Tag.IMPORT){
586
            imports.add((JCImport) l.head);
585
            imports.add((JCImport) l.head);
587
            l = l.tail;
586
            l = l.tail;
588
        }
587
        }
Lines 806-812 Link Here
806
                print(tree.vartype);
805
                print(tree.vartype);
807
            }
806
            }
808
        }
807
        }
809
        needSpace();
808
        if (tree.vartype != null) //should also check the flags?
809
            needSpace();
810
        if (!ERROR.contentEquals(tree.name))
810
        if (!ERROR.contentEquals(tree.name))
811
            print(tree.name);
811
            print(tree.name);
812
        if (tree.init != null) {
812
        if (tree.init != null) {
Lines 902-908 Link Here
902
            print(' ');
902
            print(' ');
903
        int col = out.col;
903
        int col = out.col;
904
	if (tree.init.nonEmpty()) {
904
	if (tree.init.nonEmpty()) {
905
	    if (tree.init.head.getTag() == JCTree.VARDEF) {
905
	    if (tree.init.head.getTag() == JCTree.Tag.VARDEF) {
906
		printNoParenExpr(tree.init.head);
906
		printNoParenExpr(tree.init.head);
907
		for (List<? extends JCTree> l = tree.init.tail; l.nonEmpty(); l = l.tail) {
907
		for (List<? extends JCTree> l = tree.init.tail; l.nonEmpty(); l = l.tail) {
908
		    JCVariableDecl vdef = (JCVariableDecl) l.head;
908
		    JCVariableDecl vdef = (JCVariableDecl) l.head;
Lines 973-978 Link Here
973
    }
973
    }
974
974
975
    @Override
975
    @Override
976
    public void visitLambda(JCLambda that) {
977
	print("(");
978
        wrapTrees(that.params, WrapStyle.WRAP_NEVER, out.col);
979
        print(") -> ");
980
        if (that.body.getKind() == Kind.BLOCK) {
981
            printStat(that.body);
982
        } else {
983
            printExpr(that.body, TreeInfo.notExpression);
984
        }
985
    }
986
987
    @Override
976
    public void visitSwitch(JCSwitch tree) {
988
    public void visitSwitch(JCSwitch tree) {
977
	print("switch");
989
	print("switch");
978
        print(cs.spaceBeforeSwitchParen() ? " (" : "(");
990
        print(cs.spaceBeforeSwitchParen() ? " (" : "(");
Lines 1241-1251 Link Here
1241
    }
1253
    }
1242
1254
1243
    public void printMethodSelect(JCMethodInvocation tree) {
1255
    public void printMethodSelect(JCMethodInvocation tree) {
1244
        if (tree.meth.getTag() == JCTree.SELECT) {
1256
        if (tree.meth.getTag() == JCTree.Tag.SELECT) {
1245
            JCFieldAccess left = (JCFieldAccess)tree.meth;
1257
            JCFieldAccess left = (JCFieldAccess)tree.meth;
1246
            printExpr(left.selected);
1258
            printExpr(left.selected);
1247
            print('.');
1259
            print('.');
1248
            if (left.selected.getTag() == JCTree.APPLY) {
1260
            if (left.selected.getTag() == JCTree.Tag.APPLY) {
1249
                switch(cs.wrapChainedMethodCalls()) {
1261
                switch(cs.wrapChainedMethodCalls()) {
1250
                case WRAP_IF_LONG:
1262
                case WRAP_IF_LONG:
1251
                    int rm = cs.getRightMargin();
1263
                    int rm = cs.getRightMargin();
Lines 1312-1318 Link Here
1312
	    print("new ");
1324
	    print("new ");
1313
	    int n = tree.elems != null ? 1 : 0;
1325
	    int n = tree.elems != null ? 1 : 0;
1314
	    JCTree elemtype = tree.elemtype;
1326
	    JCTree elemtype = tree.elemtype;
1315
	    while (elemtype.getTag() == JCTree.TYPEARRAY) {
1327
	    while (elemtype.getTag() == JCTree.Tag.TYPEARRAY) {
1316
		n++;
1328
		n++;
1317
		elemtype = ((JCArrayTypeTree) elemtype).elemtype;
1329
		elemtype = ((JCArrayTypeTree) elemtype).elemtype;
1318
	    }
1330
	    }
Lines 1368-1374 Link Here
1368
	printExpr(tree.lhs, TreeInfo.assignopPrec + 1);
1380
	printExpr(tree.lhs, TreeInfo.assignopPrec + 1);
1369
	if (cs.spaceAroundAssignOps())
1381
	if (cs.spaceAroundAssignOps())
1370
            print(' ');
1382
            print(' ');
1371
	print(treeinfo.operatorName(tree.getTag() - JCTree.ASGOffset));
1383
	print(treeinfo.operatorName(tree.getTag().noAssignOp()));
1372
        print('=');
1384
        print('=');
1373
	int rm = cs.getRightMargin();
1385
	int rm = cs.getRightMargin();
1374
        switch(cs.wrapAssignOps()) {
1386
        switch(cs.wrapAssignOps()) {
Lines 1394-1408 Link Here
1394
    public void visitUnary(JCUnary tree) {
1406
    public void visitUnary(JCUnary tree) {
1395
	int ownprec = TreeInfo.opPrec(tree.getTag());
1407
	int ownprec = TreeInfo.opPrec(tree.getTag());
1396
	Name opname = treeinfo.operatorName(tree.getTag());
1408
	Name opname = treeinfo.operatorName(tree.getTag());
1397
	if (tree.getTag() <= JCTree.PREDEC) {
1409
	if (tree.getTag().ordinal() <= JCTree.Tag.PREDEC.ordinal()) { //XXX: comparing ordinals!
1398
            if (cs.spaceAroundUnaryOps()) {
1410
            if (cs.spaceAroundUnaryOps()) {
1399
                needSpace();
1411
                needSpace();
1400
                print(opname);
1412
                print(opname);
1401
                print(' ');
1413
                print(' ');
1402
            } else {
1414
            } else {
1403
                print(opname);
1415
                print(opname);
1404
                if (   (tree.getTag() == JCTree.POS && (tree.arg.getTag() == JCTree.POS || tree.arg.getTag() == JCTree.PREINC))
1416
                if (   (tree.getTag() == JCTree.Tag.POS && (tree.arg.getTag() == JCTree.Tag.POS || tree.arg.getTag() == JCTree.Tag.PREINC))
1405
                    || (tree.getTag() == JCTree.NEG && (tree.arg.getTag() == JCTree.NEG || tree.arg.getTag() == JCTree.PREDEC))) {
1417
                    || (tree.getTag() == JCTree.Tag.NEG && (tree.arg.getTag() == JCTree.Tag.NEG || tree.arg.getTag() == JCTree.Tag.PREDEC))) {
1406
                    print(' ');
1418
                    print(' ');
1407
                }
1419
                }
1408
            }
1420
            }
Lines 1429-1436 Link Here
1429
            print(' ');
1441
            print(' ');
1430
	print(opname);
1442
	print(opname);
1431
        boolean needsSpace =    cs.spaceAroundBinaryOps()
1443
        boolean needsSpace =    cs.spaceAroundBinaryOps()
1432
                             || (tree.getTag() == JCTree.PLUS  && (tree.rhs.getTag() == JCTree.POS || tree.rhs.getTag() == JCTree.PREINC))
1444
                             || (tree.getTag() == JCTree.Tag.PLUS  && (tree.rhs.getTag() == JCTree.Tag.POS || tree.rhs.getTag() == JCTree.Tag.PREINC))
1433
                             || (tree.getTag() == JCTree.MINUS && (tree.rhs.getTag() == JCTree.NEG || tree.rhs.getTag() == JCTree.PREDEC));
1445
                             || (tree.getTag() == JCTree.Tag.MINUS && (tree.rhs.getTag() == JCTree.Tag.NEG || tree.rhs.getTag() == JCTree.Tag.PREDEC));
1434
	int rm = cs.getRightMargin();
1446
	int rm = cs.getRightMargin();
1435
        switch(cs.wrapBinaryOps()) {
1447
        switch(cs.wrapBinaryOps()) {
1436
        case WRAP_IF_LONG:
1448
        case WRAP_IF_LONG:
Lines 1572-1578 Link Here
1572
1584
1573
    @Override
1585
    @Override
1574
    public void visitTypeIdent(JCPrimitiveTypeTree tree) {
1586
    public void visitTypeIdent(JCPrimitiveTypeTree tree) {
1575
	print(symbols.typeOfTag[tree.typetag].tsym.name);
1587
	print(tree.typetag.name().toLowerCase());
1576
    }
1588
    }
1577
1589
1578
    @Override
1590
    @Override
Lines 1644-1649 Link Here
1644
    }
1656
    }
1645
1657
1646
    @Override
1658
    @Override
1659
    public void visitReference(JCMemberReference tree) {
1660
        printExpr(tree.expr);
1661
        print("::");
1662
        if (tree.typeargs != null && !tree.typeargs.isEmpty()) {
1663
            print("<");
1664
            printExprs(tree.typeargs);
1665
            print(">");
1666
        }
1667
        if (tree.getMode() == ReferenceMode.INVOKE) print(tree.name);
1668
        else print("new");
1669
    }
1670
1671
    @Override
1647
    public void visitLetExpr(LetExpr tree) {
1672
    public void visitLetExpr(LetExpr tree) {
1648
	print("(let " + tree.defs + " in " + tree.expr + ")");
1673
	print("(let " + tree.defs + " in " + tree.expr + ")");
1649
    }
1674
    }
Lines 1997-2004 Link Here
1997
                blankLines(tree, true);
2022
                blankLines(tree, true);
1998
	    printPrecedingComments(tree, !member);
2023
	    printPrecedingComments(tree, !member);
1999
            printExpr(tree, TreeInfo.notExpression);
2024
            printExpr(tree, TreeInfo.notExpression);
2000
	    int tag = tree.getTag();
2025
	    int tag = tree.getTag().ordinal();//XXX: comparing ordinals!!!
2001
	    if(JCTree.APPLY<=tag && tag<=JCTree.MOD_ASG) print(';');
2026
	    if(JCTree.Tag.APPLY.ordinal()<=tag && tag<=JCTree.Tag.MOD_ASG.ordinal()) print(';');
2002
            printTrailingComments(tree, !member);
2027
            printTrailingComments(tree, !member);
2003
            blankLines(tree, false);
2028
            blankLines(tree, false);
2004
	}
2029
	}
Lines 2407-2415 Link Here
2407
2432
2408
    public Name fullName(JCTree tree) {
2433
    public Name fullName(JCTree tree) {
2409
	switch (tree.getTag()) {
2434
	switch (tree.getTag()) {
2410
	case JCTree.IDENT:
2435
	case IDENT:
2411
	    return ((JCIdent) tree).name;
2436
	    return ((JCIdent) tree).name;
2412
	case JCTree.SELECT:
2437
	case SELECT:
2413
            JCFieldAccess sel = (JCFieldAccess)tree;
2438
            JCFieldAccess sel = (JCFieldAccess)tree;
2414
	    Name sname = fullName(sel.selected);
2439
	    Name sname = fullName(sel.selected);
2415
	    return sname != null && sname.getByteLength() > 0 ? sname.append('.', sel.name) : sel.name;
2440
	    return sname != null && sname.getByteLength() > 0 ? sname.append('.', sel.name) : sel.name;
Lines 2442-2448 Link Here
2442
2467
2443
    /** Is the given tree an enumerator definition? */
2468
    /** Is the given tree an enumerator definition? */
2444
    private static boolean isEnumerator(JCTree tree) {
2469
    private static boolean isEnumerator(JCTree tree) {
2445
        return tree.getTag() == JCTree.VARDEF && (((JCVariableDecl) tree).mods.flags & ENUM) != 0;
2470
        return tree.getTag() == JCTree.Tag.VARDEF && (((JCVariableDecl) tree).mods.flags & ENUM) != 0;
2446
    }
2471
    }
2447
2472
2448
    private String replace(String a,String b) {
2473
    private String replace(String a,String b) {
(-)a/java.source/src/org/netbeans/modules/java/source/pretty/WidthEstimator.java (-4 / +3 lines)
Lines 51-57 Link Here
51
import com.sun.tools.javac.tree.TreeInfo;
51
import com.sun.tools.javac.tree.TreeInfo;
52
52
53
import static com.sun.tools.javac.code.Flags.*;
53
import static com.sun.tools.javac.code.Flags.*;
54
import static com.sun.tools.javac.code.TypeTags.*;
55
54
56
/** Estimate the printed width of a tree
55
/** Estimate the printed width of a tree
57
 */
56
 */
Lines 175-181 Link Here
175
	if (tree.elemtype != null) {
174
	if (tree.elemtype != null) {
176
	    width+=4;
175
	    width+=4;
177
	    JCTree elemtype = tree.elemtype;
176
	    JCTree elemtype = tree.elemtype;
178
	    while (elemtype.getTag() == JCTree.TYPEARRAY) {
177
	    while (elemtype.getTag() == JCTree.Tag.TYPEARRAY) {
179
		width+=2;
178
		width+=2;
180
		elemtype = ((JCArrayTypeTree) elemtype).elemtype;
179
		elemtype = ((JCArrayTypeTree) elemtype).elemtype;
181
	    }
180
	    }
Lines 232-238 Link Here
232
    public void visitAssignop(JCAssignOp tree) {
231
    public void visitAssignop(JCAssignOp tree) {
233
	open(prec, TreeInfo.assignopPrec);
232
	open(prec, TreeInfo.assignopPrec);
234
	width+=3;
233
	width+=3;
235
	width(treeinfo.operatorName(tree.getTag() - JCTree.ASGOffset));
234
	width(treeinfo.operatorName(tree.getTag()));
236
	width(tree.lhs, TreeInfo.assignopPrec + 1);
235
	width(tree.lhs, TreeInfo.assignopPrec + 1);
237
	width(tree.rhs, TreeInfo.assignopPrec);
236
	width(tree.rhs, TreeInfo.assignopPrec);
238
    }
237
    }
Lines 320-326 Link Here
320
    }
319
    }
321
320
322
    public void visitTypeIdent(JCPrimitiveTypeTree tree) {
321
    public void visitTypeIdent(JCPrimitiveTypeTree tree) {
323
	width(symbols.typeOfTag[tree.typetag].tsym.name);
322
	width(tree.typetag.name().toLowerCase());
324
    }
323
    }
325
324
326
    public void visitTypeArray(JCArrayTypeTree tree) {
325
    public void visitTypeArray(JCArrayTypeTree tree) {
(-)a/java.source/src/org/netbeans/modules/java/source/save/CasualDiff.java (-170 / +261 lines)
Lines 1632-1638 Link Here
1632
        return bounds[1];
1632
        return bounds[1];
1633
    }
1633
    }
1634
1634
1635
    private String operatorName(int tag) {
1635
    private String operatorName(Tag tag) {
1636
        // dummy instance, just to access a public method which should be static
1636
        // dummy instance, just to access a public method which should be static
1637
        return new Pretty(null, false).operatorName(tag);
1637
        return new Pretty(null, false).operatorName(tag);
1638
    }
1638
    }
Lines 1731-1736 Link Here
1731
        copyTo(localPointer, bounds[1]);
1731
        copyTo(localPointer, bounds[1]);
1732
        return bounds[1];
1732
        return bounds[1];
1733
    }
1733
    }
1734
    
1735
    protected int diffMemberReference(JCMemberReference oldT, JCMemberReference newT, int[] bounds) {
1736
        int localPointer = bounds[0];
1737
        int[] exprBounds = getBounds(oldT.expr);
1738
        copyTo(localPointer, exprBounds[0]);
1739
        localPointer = diffTree(oldT.expr, newT.expr, exprBounds);
1740
        tokenSequence.move(exprBounds[1]);
1741
        moveToSrcRelevant(tokenSequence, Direction.FORWARD);
1742
        if (tokenSequence.token() != null && tokenSequence.token().id() == JavaTokenId.COLONCOLON) {
1743
            moveToSrcRelevant(tokenSequence, Direction.FORWARD);
1744
            copyTo(localPointer, localPointer = tokenSequence.offset());
1745
        }
1746
        com.sun.tools.javac.util.List<JCExpression> oldTypePar = oldT.typeargs != null ? oldT.typeargs : com.sun.tools.javac.util.List.<JCExpression>nil();
1747
        com.sun.tools.javac.util.List<JCExpression> newTypePar = newT.typeargs != null ? newT.typeargs : com.sun.tools.javac.util.List.<JCExpression>nil();
1748
        if (!listsMatch(oldTypePar, newTypePar)) {
1749
            int insertHint;
1750
            if (oldTypePar.nonEmpty() && newTypePar.nonEmpty()) {
1751
                insertHint = oldTypePar.head.pos;
1752
            } else {
1753
                insertHint = localPointer;
1754
            }
1755
            copyTo(localPointer, localPointer = insertHint);
1756
            boolean parens = oldTypePar.isEmpty() && newTypePar.nonEmpty();
1757
            localPointer = diffParameterList(oldTypePar, newTypePar,
1758
                    parens ? new JavaTokenId[] { JavaTokenId.LT, JavaTokenId.GT } : null,
1759
                    localPointer, Measure.ARGUMENT);
1760
            if (oldTypePar.nonEmpty()) {
1761
                tokenSequence.move(endPos(oldTypePar.last()));
1762
                moveToSrcRelevant(tokenSequence, Direction.FORWARD);
1763
                moveToSrcRelevant(tokenSequence, Direction.FORWARD);//skips > and any subsequent unimportant tokens
1764
                int end = tokenSequence.offset();
1765
                if (newTypePar.nonEmpty())
1766
                    copyTo(localPointer, end);
1767
                localPointer = end;
1768
            }
1769
        }
1770
        if (nameChanged(oldT.name, newT.name)) {
1771
            printer.print(newT.name);
1772
            diffInfo.put(localPointer, NbBundle.getMessage(CasualDiff.class,"TXT_UpdateReferenceTo",oldT.name));
1773
            localPointer = localPointer + oldT.name.length();
1774
        }
1775
        copyTo(localPointer, bounds[1]);
1776
        return bounds[1];
1777
    }
1734
1778
1735
    protected int diffSelect(JCFieldAccess oldT, JCFieldAccess newT, int[] bounds) {
1779
    protected int diffSelect(JCFieldAccess oldT, JCFieldAccess newT, int[] bounds) {
1736
        return diffSelect(oldT, newT, bounds, null, null);
1780
        return diffSelect(oldT, newT, bounds, null, null);
Lines 1980-1985 Link Here
1980
            diffIdent((JCIdent) oldTident, (JCIdent) newTident, bounds);
2024
            diffIdent((JCIdent) oldTident, (JCIdent) newTident, bounds);
1981
        }
2025
        }
1982
    }
2026
    }
2027
    
2028
    protected int diffLambda(JCLambda oldT, JCLambda newT, int[] bounds) {
2029
        int localPointer = bounds[0];
2030
        int posHint;
2031
        if (oldT.params.isEmpty()) {
2032
            // compute the position. Find the parameters closing ')', its
2033
            // start position is important for us. This is used when 
2034
            // there was not any parameter in original tree.
2035
            int startOffset = oldT.pos;
2036
2037
            moveFwdToToken(tokenSequence, startOffset, JavaTokenId.RPAREN);
2038
            posHint = tokenSequence.offset();
2039
        } else {
2040
            // take the position of the first old parameter
2041
            posHint = oldT.params.iterator().next().getStartPosition();
2042
        }
2043
        if (!listsMatch(oldT.params, newT.params)) {
2044
            copyTo(localPointer, posHint);
2045
            int old = printer.setPrec(TreeInfo.noPrec);
2046
            parameterPrint = true;
2047
            Name oldEnclClassName = printer.enclClassName;
2048
            printer.enclClassName = null;
2049
            localPointer = diffParameterList(oldT.params, newT.params, null, posHint, Measure.MEMBER);
2050
            printer.enclClassName = oldEnclClassName;
2051
            parameterPrint = false;
2052
            printer.setPrec(old);
2053
        }
2054
        //make sure the ')' is printed:
2055
        moveFwdToToken(tokenSequence, oldT.params.isEmpty() ? posHint : endPos(oldT.params.last()), JavaTokenId.RPAREN);
2056
        tokenSequence.moveNext();
2057
        posHint = tokenSequence.offset();
2058
        if (localPointer < posHint)
2059
            copyTo(localPointer, localPointer = posHint);
2060
        if (oldT.body != null && newT.body != null) {
2061
            int[] bodyBounds = getBounds(oldT.body);
2062
            copyTo(localPointer, bodyBounds[0]);
2063
            localPointer = diffTree(oldT.body, newT.body, bodyBounds);
2064
        }
2065
        copyTo(localPointer, bounds[1]);
2066
        return bounds[1];
2067
    }
1983
2068
1984
    protected int diffFieldGroup(FieldGroupTree oldT, FieldGroupTree newT, int[] bounds) {
2069
    protected int diffFieldGroup(FieldGroupTree oldT, FieldGroupTree newT, int[] bounds) {
1985
        if (!listsMatch(oldT.getVariables(), newT.getVariables())) {
2070
        if (!listsMatch(oldT.getVariables(), newT.getVariables())) {
Lines 2024-2162 Link Here
2024
2109
2025
        // don't use visitor, since we want fast-fail behavior
2110
        // don't use visitor, since we want fast-fail behavior
2026
        switch (t1.getTag()) {
2111
        switch (t1.getTag()) {
2027
          case JCTree.TOPLEVEL:
2112
          case TOPLEVEL:
2028
              return ((JCCompilationUnit)t1).sourcefile.equals(((JCCompilationUnit)t2).sourcefile);
2113
              return ((JCCompilationUnit)t1).sourcefile.equals(((JCCompilationUnit)t2).sourcefile);
2029
          case JCTree.IMPORT:
2114
          case IMPORT:
2030
              return matchImport((JCImport)t1, (JCImport)t2);
2115
              return matchImport((JCImport)t1, (JCImport)t2);
2031
          case JCTree.CLASSDEF:
2116
          case CLASSDEF:
2032
              return ((JCClassDecl)t1).sym == ((JCClassDecl)t2).sym;
2117
              return ((JCClassDecl)t1).sym == ((JCClassDecl)t2).sym;
2033
          case JCTree.METHODDEF:
2118
          case METHODDEF:
2034
              return ((JCMethodDecl)t1).sym == ((JCMethodDecl)t2).sym;
2119
              return ((JCMethodDecl)t1).sym == ((JCMethodDecl)t2).sym;
2035
          case JCTree.VARDEF:
2120
          case VARDEF:
2036
              return ((JCVariableDecl)t1).sym == ((JCVariableDecl)t2).sym;
2121
              return ((JCVariableDecl)t1).sym == ((JCVariableDecl)t2).sym;
2037
          case JCTree.SKIP:
2122
          case SKIP:
2038
              return true;
2123
              return true;
2039
          case JCTree.BLOCK:
2124
          case BLOCK:
2040
              return matchBlock((JCBlock)t1, (JCBlock)t2);
2125
              return matchBlock((JCBlock)t1, (JCBlock)t2);
2041
          case JCTree.DOLOOP:
2126
          case DOLOOP:
2042
              return matchDoLoop((JCDoWhileLoop)t1, (JCDoWhileLoop)t2);
2127
              return matchDoLoop((JCDoWhileLoop)t1, (JCDoWhileLoop)t2);
2043
          case JCTree.WHILELOOP:
2128
          case WHILELOOP:
2044
              return matchWhileLoop((JCWhileLoop)t1, (JCWhileLoop)t2);
2129
              return matchWhileLoop((JCWhileLoop)t1, (JCWhileLoop)t2);
2045
          case JCTree.FORLOOP:
2130
          case FORLOOP:
2046
              return matchForLoop((JCForLoop)t1, (JCForLoop)t2);
2131
              return matchForLoop((JCForLoop)t1, (JCForLoop)t2);
2047
          case JCTree.FOREACHLOOP:
2132
          case FOREACHLOOP:
2048
              return matchForeachLoop((JCEnhancedForLoop)t1, (JCEnhancedForLoop)t2);
2133
              return matchForeachLoop((JCEnhancedForLoop)t1, (JCEnhancedForLoop)t2);
2049
          case JCTree.LABELLED:
2134
          case LABELLED:
2050
              return matchLabelled((JCLabeledStatement)t1, (JCLabeledStatement)t2);
2135
              return matchLabelled((JCLabeledStatement)t1, (JCLabeledStatement)t2);
2051
          case JCTree.SWITCH:
2136
          case SWITCH:
2052
              return matchSwitch((JCSwitch)t1, (JCSwitch)t2);
2137
              return matchSwitch((JCSwitch)t1, (JCSwitch)t2);
2053
          case JCTree.CASE:
2138
          case CASE:
2054
              return matchCase((JCCase)t1, (JCCase)t2);
2139
              return matchCase((JCCase)t1, (JCCase)t2);
2055
          case JCTree.SYNCHRONIZED:
2140
          case SYNCHRONIZED:
2056
              return matchSynchronized((JCSynchronized)t1, (JCSynchronized)t2);
2141
              return matchSynchronized((JCSynchronized)t1, (JCSynchronized)t2);
2057
          case JCTree.TRY:
2142
          case TRY:
2058
              return matchTry((JCTry)t1, (JCTry)t2);
2143
              return matchTry((JCTry)t1, (JCTry)t2);
2059
          case JCTree.CATCH:
2144
          case CATCH:
2060
              return matchCatch((JCCatch)t1, (JCCatch)t2);
2145
              return matchCatch((JCCatch)t1, (JCCatch)t2);
2061
          case JCTree.CONDEXPR:
2146
          case CONDEXPR:
2062
              return matchConditional((JCConditional)t1, (JCConditional)t2);
2147
              return matchConditional((JCConditional)t1, (JCConditional)t2);
2063
          case JCTree.IF:
2148
          case IF:
2064
              return matchIf((JCIf)t1, (JCIf)t2);
2149
              return matchIf((JCIf)t1, (JCIf)t2);
2065
          case JCTree.EXEC:
2150
          case EXEC:
2066
              return treesMatch(((JCExpressionStatement)t1).expr, ((JCExpressionStatement)t2).expr);
2151
              return treesMatch(((JCExpressionStatement)t1).expr, ((JCExpressionStatement)t2).expr);
2067
          case JCTree.BREAK:
2152
          case BREAK:
2068
              return matchBreak((JCBreak)t1, (JCBreak)t2);
2153
              return matchBreak((JCBreak)t1, (JCBreak)t2);
2069
          case JCTree.CONTINUE:
2154
          case CONTINUE:
2070
              return matchContinue((JCContinue)t1, (JCContinue)t2);
2155
              return matchContinue((JCContinue)t1, (JCContinue)t2);
2071
          case JCTree.RETURN:
2156
          case RETURN:
2072
              return treesMatch(((JCReturn)t1).expr, ((JCReturn)t2).expr);
2157
              return treesMatch(((JCReturn)t1).expr, ((JCReturn)t2).expr);
2073
          case JCTree.THROW:
2158
          case THROW:
2074
              return treesMatch(((JCThrow)t1).expr, ((JCThrow)t2).expr);
2159
              return treesMatch(((JCThrow)t1).expr, ((JCThrow)t2).expr);
2075
          case JCTree.ASSERT:
2160
          case ASSERT:
2076
              return matchAssert((JCAssert)t1, (JCAssert)t2);
2161
              return matchAssert((JCAssert)t1, (JCAssert)t2);
2077
          case JCTree.APPLY:
2162
          case APPLY:
2078
              return matchApply((JCMethodInvocation)t1, (JCMethodInvocation)t2);
2163
              return matchApply((JCMethodInvocation)t1, (JCMethodInvocation)t2);
2079
          case JCTree.NEWCLASS:
2164
          case NEWCLASS:
2080
              // #97501: workaround. Not sure about comparing symbols and their
2165
              // #97501: workaround. Not sure about comparing symbols and their
2081
              // copying in ImmutableTreeTranslator, making workaround with
2166
              // copying in ImmutableTreeTranslator, making workaround with
2082
              // minimal impact - issue has to be fixed correctly in the future.
2167
              // minimal impact - issue has to be fixed correctly in the future.
2083
              if (((JCNewClass)t2).def != null) ((JCNewClass)t2).def.sym = null;
2168
              if (((JCNewClass)t2).def != null) ((JCNewClass)t2).def.sym = null;
2084
              return matchNewClass((JCNewClass)t1, (JCNewClass)t2);
2169
              return matchNewClass((JCNewClass)t1, (JCNewClass)t2);
2085
          case JCTree.NEWARRAY:
2170
          case NEWARRAY:
2086
              return matchNewArray((JCNewArray)t1, (JCNewArray)t2);
2171
              return matchNewArray((JCNewArray)t1, (JCNewArray)t2);
2087
          case JCTree.PARENS:
2172
          case PARENS:
2088
              return treesMatch(((JCParens)t1).expr, ((JCParens)t2).expr);
2173
              return treesMatch(((JCParens)t1).expr, ((JCParens)t2).expr);
2089
          case JCTree.ASSIGN:
2174
          case ASSIGN:
2090
              return matchAssign((JCAssign)t1, (JCAssign)t2);
2175
              return matchAssign((JCAssign)t1, (JCAssign)t2);
2091
          case JCTree.TYPECAST:
2176
          case TYPECAST:
2092
              return matchTypeCast((JCTypeCast)t1, (JCTypeCast)t2);
2177
              return matchTypeCast((JCTypeCast)t1, (JCTypeCast)t2);
2093
          case JCTree.TYPETEST:
2178
          case TYPETEST:
2094
              return matchTypeTest((JCInstanceOf)t1, (JCInstanceOf)t2);
2179
              return matchTypeTest((JCInstanceOf)t1, (JCInstanceOf)t2);
2095
          case JCTree.INDEXED:
2180
          case INDEXED:
2096
              return matchIndexed((JCArrayAccess)t1, (JCArrayAccess)t2);
2181
              return matchIndexed((JCArrayAccess)t1, (JCArrayAccess)t2);
2097
          case JCTree.SELECT:
2182
          case SELECT:
2098
              return matchSelect((JCFieldAccess) t1, (JCFieldAccess) t2);
2183
              return matchSelect((JCFieldAccess) t1, (JCFieldAccess) t2);
2099
          case JCTree.IDENT:
2184
          case IDENT:
2100
              return ((JCIdent)t1).getName().contentEquals(((JCIdent)t2).getName());
2185
              return ((JCIdent)t1).getName().contentEquals(((JCIdent)t2).getName());
2101
          case JCTree.LITERAL:
2186
          case LITERAL:
2102
              return matchLiteral((JCLiteral)t1, (JCLiteral)t2);
2187
              return matchLiteral((JCLiteral)t1, (JCLiteral)t2);
2103
          case JCTree.TYPEIDENT:
2188
          case TYPEIDENT:
2104
              return ((JCPrimitiveTypeTree)t1).typetag == ((JCPrimitiveTypeTree)t2).typetag;
2189
              return ((JCPrimitiveTypeTree)t1).typetag == ((JCPrimitiveTypeTree)t2).typetag;
2105
          case JCTree.TYPEARRAY:
2190
          case TYPEARRAY:
2106
              return treesMatch(((JCArrayTypeTree)t1).elemtype, ((JCArrayTypeTree)t2).elemtype);
2191
              return treesMatch(((JCArrayTypeTree)t1).elemtype, ((JCArrayTypeTree)t2).elemtype);
2107
          case JCTree.TYPEAPPLY:
2192
          case TYPEAPPLY:
2108
              return matchTypeApply((JCTypeApply)t1, (JCTypeApply)t2);
2193
              return matchTypeApply((JCTypeApply)t1, (JCTypeApply)t2);
2109
          case JCTree.TYPEPARAMETER:
2194
          case TYPEPARAMETER:
2110
              return matchTypeParameter((JCTypeParameter)t1, (JCTypeParameter)t2);
2195
              return matchTypeParameter((JCTypeParameter)t1, (JCTypeParameter)t2);
2111
          case JCTree.WILDCARD:
2196
          case WILDCARD:
2112
              return matchWildcard((JCWildcard)t1, (JCWildcard)t2);
2197
              return matchWildcard((JCWildcard)t1, (JCWildcard)t2);
2113
          case JCTree.TYPEBOUNDKIND:
2198
          case TYPEBOUNDKIND:
2114
              return ((TypeBoundKind)t1).kind == ((TypeBoundKind)t2).kind;
2199
              return ((TypeBoundKind)t1).kind == ((TypeBoundKind)t2).kind;
2115
          case JCTree.ANNOTATION:
2200
          case ANNOTATION:
2116
              return matchAnnotation((JCAnnotation)t1, (JCAnnotation)t2);
2201
              return matchAnnotation((JCAnnotation)t1, (JCAnnotation)t2);
2117
          case JCTree.LETEXPR:
2202
          case LETEXPR:
2118
              return matchLetExpr((LetExpr)t1, (LetExpr)t2);
2203
              return matchLetExpr((LetExpr)t1, (LetExpr)t2);
2119
          case JCTree.POS:
2204
          case POS:
2120
          case JCTree.NEG:
2205
          case NEG:
2121
          case JCTree.NOT:
2206
          case NOT:
2122
          case JCTree.COMPL:
2207
          case COMPL:
2123
          case JCTree.PREINC:
2208
          case PREINC:
2124
          case JCTree.PREDEC:
2209
          case PREDEC:
2125
          case JCTree.POSTINC:
2210
          case POSTINC:
2126
          case JCTree.POSTDEC:
2211
          case POSTDEC:
2127
          case JCTree.NULLCHK:
2212
          case NULLCHK:
2128
              return matchUnary((JCUnary)t1, (JCUnary)t2);
2213
              return matchUnary((JCUnary)t1, (JCUnary)t2);
2129
          case JCTree.OR:
2214
          case OR:
2130
          case JCTree.AND:
2215
          case AND:
2131
          case JCTree.BITOR:
2216
          case BITOR:
2132
          case JCTree.BITXOR:
2217
          case BITXOR:
2133
          case JCTree.BITAND:
2218
          case BITAND:
2134
          case JCTree.EQ:
2219
          case EQ:
2135
          case JCTree.NE:
2220
          case NE:
2136
          case JCTree.LT:
2221
          case LT:
2137
          case JCTree.GT:
2222
          case GT:
2138
          case JCTree.LE:
2223
          case LE:
2139
          case JCTree.GE:
2224
          case GE:
2140
          case JCTree.SL:
2225
          case SL:
2141
          case JCTree.SR:
2226
          case SR:
2142
          case JCTree.USR:
2227
          case USR:
2143
          case JCTree.PLUS:
2228
          case PLUS:
2144
          case JCTree.MINUS:
2229
          case MINUS:
2145
          case JCTree.MUL:
2230
          case MUL:
2146
          case JCTree.DIV:
2231
          case DIV:
2147
          case JCTree.MOD:
2232
          case MOD:
2148
              return matchBinary((JCBinary)t1, (JCBinary)t2);
2233
              return matchBinary((JCBinary)t1, (JCBinary)t2);
2149
          case JCTree.BITOR_ASG:
2234
          case BITOR_ASG:
2150
          case JCTree.BITXOR_ASG:
2235
          case BITXOR_ASG:
2151
          case JCTree.BITAND_ASG:
2236
          case BITAND_ASG:
2152
          case JCTree.SL_ASG:
2237
          case SL_ASG:
2153
          case JCTree.SR_ASG:
2238
          case SR_ASG:
2154
          case JCTree.USR_ASG:
2239
          case USR_ASG:
2155
          case JCTree.PLUS_ASG:
2240
          case PLUS_ASG:
2156
          case JCTree.MINUS_ASG:
2241
          case MINUS_ASG:
2157
          case JCTree.MUL_ASG:
2242
          case MUL_ASG:
2158
          case JCTree.DIV_ASG:
2243
          case DIV_ASG:
2159
          case JCTree.MOD_ASG:
2244
          case MOD_ASG:
2160
              return matchAssignop((JCAssignOp)t1, (JCAssignOp)t2);
2245
              return matchAssignop((JCAssignOp)t1, (JCAssignOp)t2);
2161
          default:
2246
          default:
2162
              String msg = ((com.sun.source.tree.Tree)t1).getKind().toString() +
2247
              String msg = ((com.sun.source.tree.Tree)t1).getKind().toString() +
Lines 3259-3452 Link Here
3259
        }
3344
        }
3260
3345
3261
        switch (oldT.getTag()) {
3346
        switch (oldT.getTag()) {
3262
          case JCTree.TOPLEVEL:
3347
          case TOPLEVEL:
3263
              diffTopLevel((JCCompilationUnit)oldT, (JCCompilationUnit)newT);
3348
              diffTopLevel((JCCompilationUnit)oldT, (JCCompilationUnit)newT);
3264
              break;
3349
              break;
3265
          case JCTree.IMPORT:
3350
          case IMPORT:
3266
              retVal = diffImport((JCImport)oldT, (JCImport)newT, elementBounds);
3351
              retVal = diffImport((JCImport)oldT, (JCImport)newT, elementBounds);
3267
              break;
3352
              break;
3268
          case JCTree.CLASSDEF:
3353
          case CLASSDEF:
3269
              retVal = diffClassDef((JCClassDecl)oldT, (JCClassDecl)newT, elementBounds);
3354
              retVal = diffClassDef((JCClassDecl)oldT, (JCClassDecl)newT, elementBounds);
3270
              break;
3355
              break;
3271
          case JCTree.METHODDEF:
3356
          case METHODDEF:
3272
              retVal = diffMethodDef((JCMethodDecl)oldT, (JCMethodDecl)newT, elementBounds);
3357
              retVal = diffMethodDef((JCMethodDecl)oldT, (JCMethodDecl)newT, elementBounds);
3273
              break;
3358
              break;
3274
          case JCTree.VARDEF:
3359
          case VARDEF:
3275
              retVal = diffVarDef((JCVariableDecl)oldT, (JCVariableDecl)newT, elementBounds);
3360
              retVal = diffVarDef((JCVariableDecl)oldT, (JCVariableDecl)newT, elementBounds);
3276
              break;
3361
              break;
3277
          case JCTree.SKIP:
3362
          case SKIP:
3278
              copyTo(elementBounds[0], elementBounds[1]);
3363
              copyTo(elementBounds[0], elementBounds[1]);
3279
              retVal = elementBounds[1];
3364
              retVal = elementBounds[1];
3280
              break;
3365
              break;
3281
          case JCTree.BLOCK:
3366
          case BLOCK:
3282
              retVal = diffBlock((JCBlock)oldT, (JCBlock)newT, elementBounds);
3367
              retVal = diffBlock((JCBlock)oldT, (JCBlock)newT, elementBounds);
3283
              break;
3368
              break;
3284
          case JCTree.DOLOOP:
3369
          case DOLOOP:
3285
              retVal = diffDoLoop((JCDoWhileLoop)oldT, (JCDoWhileLoop)newT, elementBounds);
3370
              retVal = diffDoLoop((JCDoWhileLoop)oldT, (JCDoWhileLoop)newT, elementBounds);
3286
              break;
3371
              break;
3287
          case JCTree.WHILELOOP:
3372
          case WHILELOOP:
3288
              retVal = diffWhileLoop((JCWhileLoop)oldT, (JCWhileLoop)newT, elementBounds);
3373
              retVal = diffWhileLoop((JCWhileLoop)oldT, (JCWhileLoop)newT, elementBounds);
3289
              break;
3374
              break;
3290
          case JCTree.FORLOOP:
3375
          case FORLOOP:
3291
              retVal = diffForLoop((JCForLoop)oldT, (JCForLoop)newT, elementBounds);
3376
              retVal = diffForLoop((JCForLoop)oldT, (JCForLoop)newT, elementBounds);
3292
              break;
3377
              break;
3293
          case JCTree.FOREACHLOOP:
3378
          case FOREACHLOOP:
3294
              retVal = diffForeachLoop((JCEnhancedForLoop)oldT, (JCEnhancedForLoop)newT, elementBounds);
3379
              retVal = diffForeachLoop((JCEnhancedForLoop)oldT, (JCEnhancedForLoop)newT, elementBounds);
3295
              break;
3380
              break;
3296
          case JCTree.LABELLED:
3381
          case LABELLED:
3297
              retVal = diffLabelled((JCLabeledStatement)oldT, (JCLabeledStatement)newT, elementBounds);
3382
              retVal = diffLabelled((JCLabeledStatement)oldT, (JCLabeledStatement)newT, elementBounds);
3298
              break;
3383
              break;
3299
          case JCTree.SWITCH:
3384
          case SWITCH:
3300
              retVal = diffSwitch((JCSwitch)oldT, (JCSwitch)newT, elementBounds);
3385
              retVal = diffSwitch((JCSwitch)oldT, (JCSwitch)newT, elementBounds);
3301
              break;
3386
              break;
3302
          case JCTree.CASE:
3387
          case CASE:
3303
              retVal = diffCase((JCCase)oldT, (JCCase)newT, elementBounds);
3388
              retVal = diffCase((JCCase)oldT, (JCCase)newT, elementBounds);
3304
              break;
3389
              break;
3305
          case JCTree.SYNCHRONIZED:
3390
          case SYNCHRONIZED:
3306
              retVal = diffSynchronized((JCSynchronized)oldT, (JCSynchronized)newT, elementBounds);
3391
              retVal = diffSynchronized((JCSynchronized)oldT, (JCSynchronized)newT, elementBounds);
3307
              break;
3392
              break;
3308
          case JCTree.TRY:
3393
          case TRY:
3309
              retVal = diffTry((JCTry)oldT, (JCTry)newT, elementBounds);
3394
              retVal = diffTry((JCTry)oldT, (JCTry)newT, elementBounds);
3310
              break;
3395
              break;
3311
          case JCTree.CATCH:
3396
          case CATCH:
3312
              retVal = diffCatch((JCCatch)oldT, (JCCatch)newT, elementBounds);
3397
              retVal = diffCatch((JCCatch)oldT, (JCCatch)newT, elementBounds);
3313
              break;
3398
              break;
3314
          case JCTree.CONDEXPR:
3399
          case CONDEXPR:
3315
              retVal = diffConditional((JCConditional)oldT, (JCConditional)newT, elementBounds);
3400
              retVal = diffConditional((JCConditional)oldT, (JCConditional)newT, elementBounds);
3316
              break;
3401
              break;
3317
          case JCTree.IF:
3402
          case IF:
3318
              retVal = diffIf((JCIf)oldT, (JCIf)newT, elementBounds);
3403
              retVal = diffIf((JCIf)oldT, (JCIf)newT, elementBounds);
3319
              break;
3404
              break;
3320
          case JCTree.EXEC:
3405
          case EXEC:
3321
              retVal = diffExec((JCExpressionStatement)oldT, (JCExpressionStatement)newT, elementBounds);
3406
              retVal = diffExec((JCExpressionStatement)oldT, (JCExpressionStatement)newT, elementBounds);
3322
              break;
3407
              break;
3323
          case JCTree.BREAK:
3408
          case BREAK:
3324
              retVal = diffBreak((JCBreak)oldT, (JCBreak)newT, elementBounds);
3409
              retVal = diffBreak((JCBreak)oldT, (JCBreak)newT, elementBounds);
3325
              break;
3410
              break;
3326
          case JCTree.CONTINUE:
3411
          case CONTINUE:
3327
              retVal = diffContinue((JCContinue)oldT, (JCContinue)newT, elementBounds);
3412
              retVal = diffContinue((JCContinue)oldT, (JCContinue)newT, elementBounds);
3328
              break;
3413
              break;
3329
          case JCTree.RETURN:
3414
          case RETURN:
3330
              retVal = diffReturn((JCReturn)oldT, (JCReturn)newT, elementBounds);
3415
              retVal = diffReturn((JCReturn)oldT, (JCReturn)newT, elementBounds);
3331
              break;
3416
              break;
3332
          case JCTree.THROW:
3417
          case THROW:
3333
              retVal = diffThrow((JCThrow)oldT, (JCThrow)newT,elementBounds);
3418
              retVal = diffThrow((JCThrow)oldT, (JCThrow)newT,elementBounds);
3334
              break;
3419
              break;
3335
          case JCTree.ASSERT:
3420
          case ASSERT:
3336
              retVal = diffAssert((JCAssert)oldT, (JCAssert)newT, elementBounds);
3421
              retVal = diffAssert((JCAssert)oldT, (JCAssert)newT, elementBounds);
3337
              break;
3422
              break;
3338
          case JCTree.APPLY:
3423
          case APPLY:
3339
              retVal = diffApply((JCMethodInvocation)oldT, (JCMethodInvocation)newT, elementBounds);
3424
              retVal = diffApply((JCMethodInvocation)oldT, (JCMethodInvocation)newT, elementBounds);
3340
              break;
3425
              break;
3341
          case JCTree.NEWCLASS:
3426
          case NEWCLASS:
3342
              retVal = diffNewClass((JCNewClass)oldT, (JCNewClass)newT, elementBounds);
3427
              retVal = diffNewClass((JCNewClass)oldT, (JCNewClass)newT, elementBounds);
3343
              break;
3428
              break;
3344
          case JCTree.NEWARRAY:
3429
          case NEWARRAY:
3345
              retVal = diffNewArray((JCNewArray)oldT, (JCNewArray)newT, elementBounds);
3430
              retVal = diffNewArray((JCNewArray)oldT, (JCNewArray)newT, elementBounds);
3346
              break;
3431
              break;
3347
          case JCTree.PARENS:
3432
          case PARENS:
3348
              retVal = diffParens((JCParens)oldT, (JCParens)newT, elementBounds);
3433
              retVal = diffParens((JCParens)oldT, (JCParens)newT, elementBounds);
3349
              break;
3434
              break;
3350
          case JCTree.ASSIGN:
3435
          case ASSIGN:
3351
              retVal = diffAssign((JCAssign)oldT, (JCAssign)newT, parent, elementBounds);
3436
              retVal = diffAssign((JCAssign)oldT, (JCAssign)newT, parent, elementBounds);
3352
              break;
3437
              break;
3353
          case JCTree.TYPECAST:
3438
          case TYPECAST:
3354
              retVal = diffTypeCast((JCTypeCast)oldT, (JCTypeCast)newT, elementBounds);
3439
              retVal = diffTypeCast((JCTypeCast)oldT, (JCTypeCast)newT, elementBounds);
3355
              break;
3440
              break;
3356
          case JCTree.TYPETEST:
3441
          case TYPETEST:
3357
              retVal = diffTypeTest((JCInstanceOf)oldT, (JCInstanceOf)newT, elementBounds);
3442
              retVal = diffTypeTest((JCInstanceOf)oldT, (JCInstanceOf)newT, elementBounds);
3358
              break;
3443
              break;
3359
          case JCTree.INDEXED:
3444
          case INDEXED:
3360
              retVal = diffIndexed((JCArrayAccess)oldT, (JCArrayAccess)newT, elementBounds);
3445
              retVal = diffIndexed((JCArrayAccess)oldT, (JCArrayAccess)newT, elementBounds);
3361
              break;
3446
              break;
3362
          case JCTree.SELECT:
3447
          case SELECT:
3363
              retVal = diffSelect((JCFieldAccess)oldT, (JCFieldAccess)newT, elementBounds);
3448
              retVal = diffSelect((JCFieldAccess)oldT, (JCFieldAccess)newT, elementBounds);
3364
              break;
3449
              break;
3365
          case JCTree.IDENT:
3450
          case IDENT:
3366
              retVal = diffIdent((JCIdent)oldT, (JCIdent)newT, elementBounds);
3451
              retVal = diffIdent((JCIdent)oldT, (JCIdent)newT, elementBounds);
3367
              break;
3452
              break;
3368
          case JCTree.LITERAL:
3453
          case LITERAL:
3369
              retVal = diffLiteral((JCLiteral)oldT, (JCLiteral)newT, elementBounds);
3454
              retVal = diffLiteral((JCLiteral)oldT, (JCLiteral)newT, elementBounds);
3370
              break;
3455
              break;
3371
          case JCTree.TYPEIDENT:
3456
          case TYPEIDENT:
3372
              retVal = diffTypeIdent((JCPrimitiveTypeTree)oldT, (JCPrimitiveTypeTree)newT, elementBounds);
3457
              retVal = diffTypeIdent((JCPrimitiveTypeTree)oldT, (JCPrimitiveTypeTree)newT, elementBounds);
3373
              break;
3458
              break;
3374
          case JCTree.TYPEARRAY:
3459
          case TYPEARRAY:
3375
              retVal = diffTypeArray((JCArrayTypeTree)oldT, (JCArrayTypeTree)newT, elementBounds);
3460
              retVal = diffTypeArray((JCArrayTypeTree)oldT, (JCArrayTypeTree)newT, elementBounds);
3376
              break;
3461
              break;
3377
          case JCTree.TYPEAPPLY:
3462
          case TYPEAPPLY:
3378
              retVal = diffTypeApply((JCTypeApply)oldT, (JCTypeApply)newT, elementBounds);
3463
              retVal = diffTypeApply((JCTypeApply)oldT, (JCTypeApply)newT, elementBounds);
3379
              break;
3464
              break;
3380
          case JCTree.TYPEPARAMETER:
3465
          case TYPEPARAMETER:
3381
              retVal = diffTypeParameter((JCTypeParameter)oldT, (JCTypeParameter)newT, elementBounds);
3466
              retVal = diffTypeParameter((JCTypeParameter)oldT, (JCTypeParameter)newT, elementBounds);
3382
              break;
3467
              break;
3383
          case JCTree.WILDCARD:
3468
          case WILDCARD:
3384
              retVal = diffWildcard((JCWildcard)oldT, (JCWildcard)newT, elementBounds);
3469
              retVal = diffWildcard((JCWildcard)oldT, (JCWildcard)newT, elementBounds);
3385
              break;
3470
              break;
3386
          case JCTree.TYPEBOUNDKIND:
3471
          case TYPEBOUNDKIND:
3387
              retVal = diffTypeBoundKind((TypeBoundKind)oldT, (TypeBoundKind)newT, elementBounds);
3472
              retVal = diffTypeBoundKind((TypeBoundKind)oldT, (TypeBoundKind)newT, elementBounds);
3388
              break;
3473
              break;
3389
          case JCTree.ANNOTATION:
3474
          case ANNOTATION:
3390
              retVal = diffAnnotation((JCAnnotation)oldT, (JCAnnotation)newT, elementBounds);
3475
              retVal = diffAnnotation((JCAnnotation)oldT, (JCAnnotation)newT, elementBounds);
3391
              break;
3476
              break;
3392
          case JCTree.LETEXPR:
3477
          case LETEXPR:
3393
              diffLetExpr((LetExpr)oldT, (LetExpr)newT);
3478
              diffLetExpr((LetExpr)oldT, (LetExpr)newT);
3394
              break;
3479
              break;
3395
          case JCTree.POS:
3480
          case POS:
3396
          case JCTree.NEG:
3481
          case NEG:
3397
          case JCTree.NOT:
3482
          case NOT:
3398
          case JCTree.COMPL:
3483
          case COMPL:
3399
          case JCTree.PREINC:
3484
          case PREINC:
3400
          case JCTree.PREDEC:
3485
          case PREDEC:
3401
          case JCTree.POSTINC:
3486
          case POSTINC:
3402
          case JCTree.POSTDEC:
3487
          case POSTDEC:
3403
          case JCTree.NULLCHK:
3488
          case NULLCHK:
3404
              retVal = diffUnary((JCUnary)oldT, (JCUnary)newT, elementBounds);
3489
              retVal = diffUnary((JCUnary)oldT, (JCUnary)newT, elementBounds);
3405
              break;
3490
              break;
3406
          case JCTree.OR:
3491
          case OR:
3407
          case JCTree.AND:
3492
          case AND:
3408
          case JCTree.BITOR:
3493
          case BITOR:
3409
          case JCTree.BITXOR:
3494
          case BITXOR:
3410
          case JCTree.BITAND:
3495
          case BITAND:
3411
          case JCTree.EQ:
3496
          case EQ:
3412
          case JCTree.NE:
3497
          case NE:
3413
          case JCTree.LT:
3498
          case LT:
3414
          case JCTree.GT:
3499
          case GT:
3415
          case JCTree.LE:
3500
          case LE:
3416
          case JCTree.GE:
3501
          case GE:
3417
          case JCTree.SL:
3502
          case SL:
3418
          case JCTree.SR:
3503
          case SR:
3419
          case JCTree.USR:
3504
          case USR:
3420
          case JCTree.PLUS:
3505
          case PLUS:
3421
          case JCTree.MINUS:
3506
          case MINUS:
3422
          case JCTree.MUL:
3507
          case MUL:
3423
          case JCTree.DIV:
3508
          case DIV:
3424
          case JCTree.MOD:
3509
          case MOD:
3425
              retVal = diffBinary((JCBinary)oldT, (JCBinary)newT, elementBounds);
3510
              retVal = diffBinary((JCBinary)oldT, (JCBinary)newT, elementBounds);
3426
              break;
3511
              break;
3427
          case JCTree.BITOR_ASG:
3512
          case BITOR_ASG:
3428
          case JCTree.BITXOR_ASG:
3513
          case BITXOR_ASG:
3429
          case JCTree.BITAND_ASG:
3514
          case BITAND_ASG:
3430
          case JCTree.SL_ASG:
3515
          case SL_ASG:
3431
          case JCTree.SR_ASG:
3516
          case SR_ASG:
3432
          case JCTree.USR_ASG:
3517
          case USR_ASG:
3433
          case JCTree.PLUS_ASG:
3518
          case PLUS_ASG:
3434
          case JCTree.MINUS_ASG:
3519
          case MINUS_ASG:
3435
          case JCTree.MUL_ASG:
3520
          case MUL_ASG:
3436
          case JCTree.DIV_ASG:
3521
          case DIV_ASG:
3437
          case JCTree.MOD_ASG:
3522
          case MOD_ASG:
3438
              retVal = diffAssignop((JCAssignOp)oldT, (JCAssignOp)newT, elementBounds);
3523
              retVal = diffAssignop((JCAssignOp)oldT, (JCAssignOp)newT, elementBounds);
3439
              break;
3524
              break;
3440
          case JCTree.ERRONEOUS:
3525
          case ERRONEOUS:
3441
              diffErroneous((JCErroneous)oldT, (JCErroneous)newT, elementBounds);
3526
              diffErroneous((JCErroneous)oldT, (JCErroneous)newT, elementBounds);
3442
              break;
3527
              break;
3443
          case JCTree.MODIFIERS:
3528
          case MODIFIERS:
3444
              retVal = diffModifiers((JCModifiers) oldT, (JCModifiers) newT, parent, elementBounds[0]);
3529
              retVal = diffModifiers((JCModifiers) oldT, (JCModifiers) newT, parent, elementBounds[0]);
3445
              copyTo(retVal, elementBounds[1]);
3530
              copyTo(retVal, elementBounds[1]);
3446
              break;
3531
              break;
3447
          case JCTree.TYPEUNION:
3532
          case TYPEUNION:
3448
              retVal = diffUnionType((JCTypeUnion) oldT, (JCTypeUnion) newT, elementBounds);
3533
              retVal = diffUnionType((JCTypeUnion) oldT, (JCTypeUnion) newT, elementBounds);
3449
              break;
3534
              break;
3535
          case LAMBDA:
3536
              retVal = diffLambda((JCLambda) oldT, (JCLambda) newT, elementBounds);
3537
              break;
3538
          case REFERENCE:
3539
              retVal = diffMemberReference((JCMemberReference) oldT, (JCMemberReference) newT, elementBounds);
3540
              break;
3450
          default:
3541
          default:
3451
              // handle special cases like field groups and enum constants
3542
              // handle special cases like field groups and enum constants
3452
              if (oldT.getKind() == Kind.OTHER) {
3543
              if (oldT.getKind() == Kind.OTHER) {
(-)a/java.source/src/org/netbeans/modules/java/source/save/ElementOverlay.java (+20 lines)
Lines 512-517 Link Here
512
        }
512
        }
513
513
514
        @Override
514
        @Override
515
        public <A extends Annotation> A[] getAnnotations(Class<A> annotationType) {
516
            throw new UnsupportedOperationException("Not supported yet.");
517
        }
518
519
        @Override
515
        public Set<Modifier> getModifiers() {
520
        public Set<Modifier> getModifiers() {
516
            return mods;
521
            return mods;
517
        }
522
        }
Lines 596-601 Link Here
596
        }
601
        }
597
602
598
        @Override
603
        @Override
604
        public <A extends Annotation> A[] getAnnotations(Class<A> annotationType) {
605
            throw new UnsupportedOperationException("Not supported yet.");
606
        }
607
608
        @Override
599
        public Set<Modifier> getModifiers() {
609
        public Set<Modifier> getModifiers() {
600
            return delegateTo.getModifiers();
610
            return delegateTo.getModifiers();
601
        }
611
        }
Lines 664-669 Link Here
664
        }
674
        }
665
675
666
        @Override
676
        @Override
677
        public <A extends Annotation> A[] getAnnotations(Class<A> annotationType) {
678
            throw new UnsupportedOperationException("Not supported yet.");
679
        }
680
681
        @Override
667
        public Set<Modifier> getModifiers() {
682
        public Set<Modifier> getModifiers() {
668
            throw new UnsupportedOperationException("Not supported yet.");
683
            throw new UnsupportedOperationException("Not supported yet.");
669
        }
684
        }
Lines 734-739 Link Here
734
        }
749
        }
735
750
736
        @Override
751
        @Override
752
        public <A extends Annotation> A[] getAnnotations(Class<A> annotationType) {
753
            throw new UnsupportedOperationException("Not supported yet.");
754
        }
755
756
        @Override
737
        public Set<Modifier> getModifiers() {
757
        public Set<Modifier> getModifiers() {
738
            throw new UnsupportedOperationException("Not supported yet.");
758
            throw new UnsupportedOperationException("Not supported yet.");
739
        }
759
        }
(-)a/java.source/src/org/netbeans/modules/java/source/save/Reformatter.java (-2 / +4 lines)
Lines 966-973 Link Here
966
                } else {
966
                } else {
967
                    if (!insideForOrCatch)
967
                    if (!insideForOrCatch)
968
                        continuationIndent = true;
968
                        continuationIndent = true;
969
                    if (scan(node.getType(), p)) {
969
                    if (node.getType() == null || scan(node.getType(), p)) {
970
                        spaces(1, fieldGroup);
970
                        if (node.getType() != null) {
971
                            spaces(1, fieldGroup);
972
                        }
971
                        if (!ERROR.contentEquals(node.getName()))
973
                        if (!ERROR.contentEquals(node.getName()))
972
                            accept(IDENTIFIER);
974
                            accept(IDENTIFIER);
973
                    }
975
                    }
(-)a/java.source/src/org/netbeans/modules/java/source/tasklist/CompilerSettings.java (+1 lines)
Lines 118-123 Link Here
118
        if (get(p, ENABLE_LINT_RAWTYPES))
118
        if (get(p, ENABLE_LINT_RAWTYPES))
119
            sb.append("-Xlint:rawtypes ");
119
            sb.append("-Xlint:rawtypes ");
120
120
121
        sb.append("-XDidentifyLambdaCandidate=true ");
121
        sb.append("-XDfindDiamond ");
122
        sb.append("-XDfindDiamond ");
122
        
123
        
123
        if (sb.length() > 0 && sb.charAt(sb.length() - 1) == ' ') {
124
        if (sb.length() > 0 && sb.charAt(sb.length() - 1) == ' ') {
(-)a/java.source/src/org/netbeans/modules/java/source/transform/FieldGroupTree.java (-2 / +2 lines)
Lines 105-111 Link Here
105
        return vars.hashCode();
105
        return vars.hashCode();
106
    }
106
    }
107
107
108
    public int getTag() {
108
    public Tag getTag() {
109
        return 0;
109
        return Tag.NO_TAG;
110
    }
110
    }
111
}
111
}
(-)a/java.source/src/org/netbeans/modules/java/source/transform/ImmutableTreeTranslator.java (-1 / +73 lines)
Lines 386-391 Link Here
386
    public Tree visitLabeledStatement(LabeledStatementTree tree, Object p) {
386
    public Tree visitLabeledStatement(LabeledStatementTree tree, Object p) {
387
	return rewriteChildren(tree);
387
	return rewriteChildren(tree);
388
    }
388
    }
389
    public Tree visitLambdaExpression(LambdaExpressionTree tree, Object p) {
390
        return rewriteChildren(tree);
391
    }
389
    public Tree visitSwitch(SwitchTree tree, Object p) {
392
    public Tree visitSwitch(SwitchTree tree, Object p) {
390
	return rewriteChildren(tree);
393
	return rewriteChildren(tree);
391
    }
394
    }
Lines 455-463 Link Here
455
    public Tree visitInstanceOf(InstanceOfTree tree, Object p) {
458
    public Tree visitInstanceOf(InstanceOfTree tree, Object p) {
456
	return rewriteChildren(tree);
459
	return rewriteChildren(tree);
457
    }
460
    }
461
    public Tree visitIntersectionType(IntersectionTypeTree tree, Object p) {
462
        return rewriteChildren(tree);
463
    }
458
    public Tree visitArrayAccess(ArrayAccessTree tree, Object p) {
464
    public Tree visitArrayAccess(ArrayAccessTree tree, Object p) {
459
	return rewriteChildren(tree);
465
	return rewriteChildren(tree);
460
    }
466
    }
467
    @Override
468
    public Tree visitMemberReference(MemberReferenceTree tree, Object p) {
469
        return rewriteChildren(tree);
470
    }
461
    public Tree visitMemberSelect(MemberSelectTree tree, Object p) {
471
    public Tree visitMemberSelect(MemberSelectTree tree, Object p) {
462
        if (tree instanceof QualIdentTree) {
472
        if (tree instanceof QualIdentTree) {
463
            QualIdentTree qit = (QualIdentTree) tree;
473
            QualIdentTree qit = (QualIdentTree) tree;
Lines 497-502 Link Here
497
    public Tree visitWildcard(WildcardTree tree, Object p) {
507
    public Tree visitWildcard(WildcardTree tree, Object p) {
498
        return rewriteChildren(tree);
508
        return rewriteChildren(tree);
499
    }
509
    }
510
    public Tree visitAnnotatedType(AnnotatedTypeTree tree, Object p) {
511
        return rewriteChildren(tree);
512
    }
500
    public Tree visitAnnotation(AnnotationTree tree, Object p) {
513
    public Tree visitAnnotation(AnnotationTree tree, Object p) {
501
        return rewriteChildren(tree);
514
        return rewriteChildren(tree);
502
    }
515
    }
Lines 737-742 Link Here
737
	return tree;
750
	return tree;
738
    }
751
    }
739
752
753
    protected final LambdaExpressionTree rewriteChildren(LambdaExpressionTree tree) {
754
        Tree body = translate(tree.getBody());
755
        List<? extends VariableTree> parameters = translate(tree.getParameters());
756
757
        if (body != tree.getBody() ||
758
            parameters != tree.getParameters())
759
        {
760
            LambdaExpressionTree n = make.LambdaExpression(parameters, body);
761
            model.setType(n, model.getType(tree));
762
	    copyCommentTo(tree,n);
763
            copyPosTo(tree,n);
764
	    tree = n;
765
        }
766
        return tree;
767
    }
768
740
    protected final SwitchTree rewriteChildren(SwitchTree tree) {
769
    protected final SwitchTree rewriteChildren(SwitchTree tree) {
741
	ExpressionTree selector = (ExpressionTree)translate(tree.getExpression());
770
	ExpressionTree selector = (ExpressionTree)translate(tree.getExpression());
742
	List<? extends CaseTree> cases = translateStable(tree.getCases());
771
	List<? extends CaseTree> cases = translateStable(tree.getCases());
Lines 1059-1064 Link Here
1059
	return tree;
1088
	return tree;
1060
    }
1089
    }
1061
    
1090
    
1091
    protected final IntersectionTypeTree rewriteChildren(IntersectionTypeTree tree) {
1092
	List<? extends Tree> bounds = translate(tree.getBounds());
1093
	if (!safeEquals(bounds, tree.getBounds())) {
1094
	    IntersectionTypeTree n = make.IntersectionType(bounds);
1095
            model.setType(n, model.getType(tree));
1096
	    copyCommentTo(tree,n);
1097
            copyPosTo(tree,n);
1098
	    tree = n;
1099
	}
1100
	return tree;
1101
    }
1102
    
1062
    protected final ArrayAccessTree rewriteChildren(ArrayAccessTree tree) {
1103
    protected final ArrayAccessTree rewriteChildren(ArrayAccessTree tree) {
1063
	ExpressionTree array = (ExpressionTree)translate(tree.getExpression());
1104
	ExpressionTree array = (ExpressionTree)translate(tree.getExpression());
1064
	ExpressionTree index = (ExpressionTree)translate(tree.getIndex());
1105
	ExpressionTree index = (ExpressionTree)translate(tree.getIndex());
Lines 1157-1169 Link Here
1157
        return tree;
1198
        return tree;
1158
    }
1199
    }
1159
    
1200
    
1201
    protected final AnnotatedTypeTree rewriteChildren(AnnotatedTypeTree tree) {
1202
        List<? extends AnnotationTree> annotations = translate(tree.getAnnotations());
1203
        ExpressionTree underlyingType = (ExpressionTree)translate(tree.getUnderlyingType());
1204
        if (!annotations.equals(tree.getAnnotations()) || underlyingType != tree.getUnderlyingType()) {
1205
            AnnotatedTypeTree n = make.AnnotatedType(annotations, underlyingType);
1206
            model.setType(n, model.getType(tree));
1207
	    copyCommentTo(tree,n);
1208
            copyPosTo(tree,n);
1209
	    tree = n;
1210
        }
1211
        return tree;
1212
    }
1213
    
1160
    protected final AnnotationTree rewriteChildren(AnnotationTree tree) {
1214
    protected final AnnotationTree rewriteChildren(AnnotationTree tree) {
1161
        Tree annotationType = translate(tree.getAnnotationType());
1215
        Tree annotationType = translate(tree.getAnnotationType());
1162
	List<? extends ExpressionTree> args = translate(tree.getArguments());
1216
	List<? extends ExpressionTree> args = translate(tree.getArguments());
1163
	if (annotationType!=tree.getAnnotationType() || !args.equals(tree.getArguments())) {
1217
	if (annotationType!=tree.getAnnotationType() || !args.equals(tree.getArguments())) {
1164
            if (args != tree.getArguments())
1218
            if (args != tree.getArguments())
1165
                args = optimize(args);
1219
                args = optimize(args);
1166
	    AnnotationTree n = make.Annotation(annotationType, args);
1220
	    AnnotationTree n = tree.getKind() == Kind.ANNOTATION
1221
                    ? make.Annotation(annotationType, args)
1222
                    : make.TypeAnnotation(annotationType, args);
1167
            model.setType(n, model.getType(tree));
1223
            model.setType(n, model.getType(tree));
1168
	    copyCommentTo(tree,n);
1224
	    copyCommentTo(tree,n);
1169
	    tree = n;
1225
	    tree = n;
Lines 1200-1204 Link Here
1200
	return tree;
1256
	return tree;
1201
    }
1257
    }
1202
1258
1259
    private Tree rewriteChildren(MemberReferenceTree node) {
1260
        ExpressionTree qualifierExpression = (ExpressionTree) translate(node.getQualifierExpression());
1261
        List<ExpressionTree> typeArguments = (List<ExpressionTree>) translate(node.getTypeArguments());
1262
1263
        if (qualifierExpression != node.getQualifierExpression() ||
1264
            typeArguments != node.getTypeArguments())
1265
        {
1266
	    MemberReferenceTree n = make.MemberReference(node.getMode(), node.getName(), qualifierExpression, typeArguments);
1267
            model.setType(n, model.getType(node));
1268
	    copyCommentTo(node,n);
1269
            copyPosTo(node,n);
1270
	    node = n;
1271
	}
1272
	return node;
1273
    }
1274
1203
1275
1204
}
1276
}
(-)a/java.source/src/org/netbeans/modules/java/source/usages/BinaryAnalyser.java (-1 / +1 lines)
Lines 121-127 Link Here
121
121
122
122
123
123
124
/**
124
/**TODO: the full index does not handle invokeDynamicInfo, MethodHandleInfo and MethodTypeInfo.
125
 *
125
 *
126
 * @author Petr Hrebejk, Tomas Zezula
126
 * @author Petr Hrebejk, Tomas Zezula
127
 */
127
 */
(-)a/java.source/src/org/netbeans/modules/java/source/usages/ClassFileUtil.java (-5 / +11 lines)
Lines 59-64 Link Here
59
import javax.lang.model.type.ArrayType;
59
import javax.lang.model.type.ArrayType;
60
import javax.lang.model.type.DeclaredType;
60
import javax.lang.model.type.DeclaredType;
61
import javax.lang.model.type.ErrorType;
61
import javax.lang.model.type.ErrorType;
62
import javax.lang.model.type.IntersectionType;
62
import javax.lang.model.type.TypeKind;
63
import javax.lang.model.type.TypeKind;
63
import javax.lang.model.type.TypeMirror;
64
import javax.lang.model.type.TypeMirror;
64
import javax.lang.model.type.TypeVariable;
65
import javax.lang.model.type.TypeVariable;
Lines 278-288 Link Here
278
		break;
279
		break;
279
	    case DECLARED:
280
	    case DECLARED:
280
            {
281
            {
281
		sb.append('L');	    // NOI18N
282
                sb.append('L');	    // NOI18N
282
		TypeElement te = (TypeElement) ((DeclaredType)type).asElement();
283
                TypeElement te = (TypeElement) ((DeclaredType)type).asElement();
283
		encodeClassName(te, sb,'/');
284
                encodeClassName(te, sb,'/');
284
		sb.append(';');	    // NOI18N
285
                sb.append(';');	    // NOI18N
285
		break;
286
                break;
286
            }
287
            }
287
	    case TYPEVAR:
288
	    case TYPEVAR:
288
            {
289
            {
Lines 307-312 Link Here
307
                    break;
308
                    break;
308
                }                
309
                }                
309
            }
310
            }
311
            case INTERSECTION:
312
            {
313
                encodeType(((IntersectionType) type).getBounds().get(0), sb);
314
                break;
315
            }
310
	    default:
316
	    default:
311
		throw new IllegalArgumentException ();
317
		throw new IllegalArgumentException ();
312
	}                
318
	}                
(-)a/java.source/test/unit/src/org/netbeans/api/java/source/gen/AddCastTest.java (-171 / +461 lines)
Lines 44-58 Link Here
44
package org.netbeans.api.java.source.gen;
44
package org.netbeans.api.java.source.gen;
45
45
46
import com.sun.source.tree.BlockTree;
46
import com.sun.source.tree.BlockTree;
47
import com.sun.source.tree.ClassTree;
48
import com.sun.source.tree.CompilationUnitTree;
47
import com.sun.source.tree.CompilationUnitTree;
49
import com.sun.source.tree.ExpressionTree;
48
import com.sun.source.tree.ExpressionTree;
50
import com.sun.source.tree.ForLoopTree;
49
import com.sun.source.tree.LambdaExpressionTree;
51
import com.sun.source.tree.MethodTree;
50
import com.sun.source.tree.LiteralTree;
51
import com.sun.source.tree.MemberReferenceTree;
52
import com.sun.source.tree.MemberReferenceTree.ReferenceMode;
53
import com.sun.source.tree.ReturnTree;
52
import com.sun.source.tree.VariableTree;
54
import com.sun.source.tree.VariableTree;
55
import com.sun.source.util.TreeScanner;
53
import java.io.File;
56
import java.io.File;
54
import java.io.IOException;
57
import java.io.IOException;
55
import javax.lang.model.type.TypeKind;
58
import java.util.Collections;
59
import java.util.EnumSet;
60
import javax.lang.model.element.Modifier;
56
import org.netbeans.api.java.source.Task;
61
import org.netbeans.api.java.source.Task;
57
import org.netbeans.api.java.source.JavaSource;
62
import org.netbeans.api.java.source.JavaSource;
58
import org.netbeans.api.java.source.JavaSource.Phase;
63
import org.netbeans.api.java.source.JavaSource.Phase;
Lines 66-121 Link Here
66
 *
71
 *
67
 * @author Pavel Flaska
72
 * @author Pavel Flaska
68
 */
73
 */
69
public class AddCastTest extends GeneratorTestMDRCompat {
74
public class LambdaTest extends GeneratorTestMDRCompat {
70
    
75
    
71
    /** Creates a new instance of AddCastTest */
76
    /** Creates a new instance of AddCastTest */
72
    public AddCastTest(String name) {
77
    public LambdaTest(String name) {
73
        super(name);
78
        super(name);
74
    }
79
    }
75
    
80
    
76
    public static NbTestSuite suite() {
81
    public static NbTestSuite suite() {
77
        NbTestSuite suite = new NbTestSuite();
82
        NbTestSuite suite = new NbTestSuite();
78
        suite.addTestSuite(AddCastTest.class);
83
        suite.addTestSuite(LambdaTest.class);
79
        return suite;
84
        return suite;
80
    }
85
    }
81
86
82
    public void testAddCastToDeclStmt() throws Exception {
87
    public void testPrintMemberReference() throws Exception {
83
        testFile = new File(getWorkDir(), "Test.java");
88
        testFile = new File(getWorkDir(), "Test.java");
84
        TestUtilities.copyStringToFile(testFile, 
89
        TestUtilities.copyStringToFile(testFile, 
85
            "package hierbas.del.litoral;\n\n" +
90
            "package hierbas.del.litoral;\n\n" +
86
            "import java.util.*;\n\n" +
91
            "public class Test {\n" +
87
            "public class Test<E> {\n" +
92
            "    public static void taragui() {\n" +
88
            "    public void taragui() {\n" +
93
            "        Runnable r = null;\n" + 
89
            "        System.err.println(\"taragui() method\");\n" + 
90
            "        String s = \"Oven.\";\n" +
91
            "//         line comment\n" + 
92
            "    }\n" +
94
            "    }\n" +
93
            "}\n"
95
            "}\n"
94
            );
96
            );
95
        String golden =
97
        String golden =
96
            "package hierbas.del.litoral;\n\n" +
98
            "package hierbas.del.litoral;\n\n" +
97
            "import java.util.*;\n\n" +
99
            "public class Test {\n" +
98
            "public class Test<E> {\n" +
100
            "    public static void taragui() {\n" +
99
            "    public void taragui() {\n" +
101
            "        Runnable r = Test::taragui;\n" + 
100
            "        System.err.println(\"taragui() method\");\n" + 
101
            "        String s = (String) \"Oven.\";\n" +
102
            "//         line comment\n" + 
103
            "    }\n" +
102
            "    }\n" +
104
            "}\n";
103
            "}\n";
105
        JavaSource src = getJavaSource(testFile);
104
        JavaSource src = getJavaSource(testFile);
106
        
105
        
107
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
106
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
108
107
109
            public void run(WorkingCopy workingCopy) throws IOException {
108
            public void run(final WorkingCopy workingCopy) throws IOException {
110
                workingCopy.toPhase(Phase.RESOLVED);
109
                workingCopy.toPhase(Phase.RESOLVED);
111
                CompilationUnitTree cut = workingCopy.getCompilationUnit();
110
                CompilationUnitTree cut = workingCopy.getCompilationUnit();
112
                TreeMaker make = workingCopy.getTreeMaker();
111
                final TreeMaker make = workingCopy.getTreeMaker();
113
                ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
112
                new TreeScanner<Void, Void>() {
114
                MethodTree method = (MethodTree) clazz.getMembers().get(1);
113
                    @Override public Void visitLiteral(LiteralTree node, Void p) {
115
                VariableTree var = (VariableTree) method.getBody().getStatements().get(1);
114
                        workingCopy.rewrite(node, make.MemberReference(ReferenceMode.INVOKE, make.Identifier("Test"), "taragui", Collections.<ExpressionTree>emptyList()));
116
                ExpressionTree init = var.getInitializer();
115
                        return super.visitLiteral(node, p);
117
                ExpressionTree cast = make.TypeCast(make.Identifier("String"), init);
116
                    }
118
                workingCopy.rewrite(init, cast);
117
                }.scan(workingCopy.getCompilationUnit(), null);
119
            }
118
            }
120
119
121
        };
120
        };
Lines 125-171 Link Here
125
        assertEquals(golden, res);
124
        assertEquals(golden, res);
126
    }
125
    }
127
    
126
    
128
    public void testAddCastInForWithoutSteps() throws Exception {
127
    public void testBasicLambdaDiff() throws Exception {
129
        testFile = new File(getWorkDir(), "Test.java");
128
        testFile = new File(getWorkDir(), "Test.java");
130
        TestUtilities.copyStringToFile(testFile, 
129
        TestUtilities.copyStringToFile(testFile, 
131
            "package hierbas.del.litoral;\n\n" +
130
            "package hierbas.del.litoral;\n\n" +
132
            "import java.util.*;\n\n" +
131
            "public class Test {\n" +
133
            "public class Test<E> {\n" +
132
            "    public static void taragui() {\n" +
134
            "    public void cast() {\n" +
133
            "        ChangeListener l = (e) -> {};\n" + 
135
            "        Object o = null;\n" +
136
            "        for (int i = 0; i < 5; ) {\n" +
137
            "            String s = o;\n" +
138
            "        }\n" +
139
            "    }\n" +
134
            "    }\n" +
140
            "}\n"
135
            "}\n"
141
            );
136
            );
142
        String golden =
137
        String golden =
143
            "package hierbas.del.litoral;\n\n" +
138
            "package hierbas.del.litoral;\n\n" +
144
            "import java.util.*;\n\n" +
139
            "public class Test {\n" +
145
            "public class Test<E> {\n" +
140
            "    public static void taragui() {\n" +
146
            "    public void cast() {\n" +
141
            "        ChangeListener l = (f) -> {};\n" + 
147
            "        Object o = null;\n" +
148
            "        for (int i = 0; i < 5; ) {\n" +
149
            "            String s = (String) o;\n" +
150
            "        }\n" +
151
            "    }\n" +
142
            "    }\n" +
152
            "}\n";
143
            "}\n";
153
        JavaSource src = getJavaSource(testFile);
144
        JavaSource src = getJavaSource(testFile);
154
        
145
        
155
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
146
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
156
147
157
            public void run(WorkingCopy workingCopy) throws IOException {
148
            public void run(final WorkingCopy workingCopy) throws IOException {
158
                workingCopy.toPhase(Phase.RESOLVED);
149
                workingCopy.toPhase(Phase.RESOLVED);
159
                CompilationUnitTree cut = workingCopy.getCompilationUnit();
150
                CompilationUnitTree cut = workingCopy.getCompilationUnit();
160
                TreeMaker make = workingCopy.getTreeMaker();
151
                final TreeMaker make = workingCopy.getTreeMaker();
161
                ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
152
                new TreeScanner<Void, Void>() {
162
                MethodTree method = (MethodTree) clazz.getMembers().get(1);
153
                    @Override public Void visitVariable(VariableTree node, Void p) {
163
                ForLoopTree forLoop = (ForLoopTree) method.getBody().getStatements().get(1);
154
                        if (node.getName().contentEquals("e")) {
164
                BlockTree block = (BlockTree) forLoop.getStatement();
155
                            workingCopy.rewrite(node, make.setLabel(node, "f"));
165
                VariableTree vt = (VariableTree) block.getStatements().get(0);
156
                        }
166
                ExpressionTree init = vt.getInitializer();
157
                        return super.visitVariable(node, p);
167
                ExpressionTree cast = make.TypeCast(make.Identifier("String"), init);
158
                    }
168
                workingCopy.rewrite(init, cast);
159
                }.scan(workingCopy.getCompilationUnit(), null);
169
            }
160
            }
170
161
171
        };
162
        };
Lines 175-230 Link Here
175
        assertEquals(golden, res);
166
        assertEquals(golden, res);
176
    }
167
    }
177
    
168
    
178
    /*
169
    public void testAddFirstLambdaParam() throws Exception {
179
     * #94324
180
     */
181
    public void testAddCast94324() throws Exception {
182
        testFile = new File(getWorkDir(), "Test.java");
170
        testFile = new File(getWorkDir(), "Test.java");
183
        TestUtilities.copyStringToFile(testFile, 
171
        TestUtilities.copyStringToFile(testFile, 
184
            "package javaapplication3;\n" +
172
            "package hierbas.del.litoral;\n\n" +
185
            "\n" +
173
            "public class Test {\n" +
186
            "public class Klasa {\n" +
174
            "    public static void taragui() {\n" +
187
            "    \n" +
175
            "        ChangeListener l = () -> {};\n" + 
188
            "    static Object method() {\n" +
189
            "        return null;\n" +
190
            "    }\n" +
176
            "    }\n" +
191
            "    \n" +
177
            "}\n"
192
            "    public static void main(String[] args) {\n" +
178
            );
193
            "        // TODO code application logic here\n" +
179
        String golden =
194
            "        String s = Klasa.method();\n" +
180
            "package hierbas.del.litoral;\n\n" +
181
            "public class Test {\n" +
182
            "    public static void taragui() {\n" +
183
            "        ChangeListener l = (e) -> {};\n" + 
195
            "    }\n" +
184
            "    }\n" +
196
            "\n" +
197
            "}\n"
198
        );
199
        String golden =
200
            "package javaapplication3;\n" +
201
            "\n" +
202
            "public class Klasa {\n" +
203
            "    \n" +
204
            "    static Object method() {\n" +
205
            "        return null;\n" +
206
            "    }\n" +
207
            "    \n" +
208
            "    public static void main(String[] args) {\n" +
209
            "        // TODO code application logic here\n" +
210
            "        String s = (String) Klasa.method();\n" +
211
            "    }\n" +
212
            "\n" +
213
            "}\n";
185
            "}\n";
214
        JavaSource src = getJavaSource(testFile);
186
        JavaSource src = getJavaSource(testFile);
215
        
187
        
216
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
188
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
217
189
218
            public void run(WorkingCopy workingCopy) throws IOException {
190
            public void run(final WorkingCopy workingCopy) throws IOException {
219
                workingCopy.toPhase(Phase.RESOLVED);
191
                workingCopy.toPhase(Phase.RESOLVED);
220
                CompilationUnitTree cut = workingCopy.getCompilationUnit();
192
                final TreeMaker make = workingCopy.getTreeMaker();
221
                TreeMaker make = workingCopy.getTreeMaker();
193
                new TreeScanner<Void, Void>() {
222
                ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
194
                    @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
223
                MethodTree method = (MethodTree) clazz.getMembers().get(2);
195
                        workingCopy.rewrite(node, make.addLambdaParameter(node, make.Variable(make.Modifiers(EnumSet.noneOf(Modifier.class)), "e", null, null)));
224
                VariableTree var = (VariableTree) method.getBody().getStatements().get(0);
196
                        return super.visitLambdaExpression(node, p);
225
                ExpressionTree init = var.getInitializer();
197
                    }
226
                ExpressionTree cast = make.TypeCast(make.Identifier("String"), init);
198
                }.scan(workingCopy.getCompilationUnit(), null);
227
                workingCopy.rewrite(init, cast);
228
            }
199
            }
229
200
230
        };
201
        };
Lines 234-274 Link Here
234
        assertEquals(golden, res);
205
        assertEquals(golden, res);
235
    }
206
    }
236
    
207
    
237
    public void testAddCastLiteral() throws Exception {
208
    public void testAddSecondLambdaParam() throws Exception {
238
        testFile = new File(getWorkDir(), "Test.java");
209
        testFile = new File(getWorkDir(), "Test.java");
239
        TestUtilities.copyStringToFile(testFile,
210
        TestUtilities.copyStringToFile(testFile, 
240
            "package javaapplication3;\n" +
211
            "package hierbas.del.litoral;\n\n" +
241
            "\n" +
212
            "public class Test {\n" +
242
            "public class Klasa {\n" +
213
            "    public static void taragui() {\n" +
243
            "    public static void main(String[] args) {\n" +
214
            "        ChangeListener l = (e) -> {};\n" + 
244
            "        int i = args.length & 0xFEFE;\n" +
245
            "    }\n" +
215
            "    }\n" +
246
            "\n" +
247
            "}\n"
216
            "}\n"
248
        );
217
            );
249
        String golden =
218
        String golden =
250
            "package javaapplication3;\n" +
219
            "package hierbas.del.litoral;\n\n" +
251
            "\n" +
220
            "public class Test {\n" +
252
            "public class Klasa {\n" +
221
            "    public static void taragui() {\n" +
253
            "    public static void main(String[] args) {\n" +
222
            "        ChangeListener l = (e, f) -> {};\n" + 
254
            "        int i = (int) (args.length & 0xFEFE);\n" +
255
            "    }\n" +
223
            "    }\n" +
256
            "\n" +
257
            "}\n";
224
            "}\n";
258
        JavaSource src = getJavaSource(testFile);
225
        JavaSource src = getJavaSource(testFile);
259
226
        
260
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
227
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
261
228
262
            public void run(WorkingCopy workingCopy) throws IOException {
229
            public void run(final WorkingCopy workingCopy) throws IOException {
263
                workingCopy.toPhase(Phase.RESOLVED);
230
                workingCopy.toPhase(Phase.RESOLVED);
264
                CompilationUnitTree cut = workingCopy.getCompilationUnit();
231
                final TreeMaker make = workingCopy.getTreeMaker();
265
                TreeMaker make = workingCopy.getTreeMaker();
232
                new TreeScanner<Void, Void>() {
266
                ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
233
                    @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
267
                MethodTree method = (MethodTree) clazz.getMembers().get(1);
234
                        workingCopy.rewrite(node, make.addLambdaParameter(node, make.Variable(make.Modifiers(EnumSet.noneOf(Modifier.class)), "f", null, null)));
268
                VariableTree var = (VariableTree) method.getBody().getStatements().get(0);
235
                        return super.visitLambdaExpression(node, p);
269
                ExpressionTree init = var.getInitializer();
236
                    }
270
                ExpressionTree cast = make.TypeCast(make.PrimitiveType(TypeKind.INT), make.Parenthesized(init));
237
                }.scan(workingCopy.getCompilationUnit(), null);
271
                workingCopy.rewrite(init, cast);
272
            }
238
            }
273
239
274
        };
240
        };
Lines 277-351 Link Here
277
        System.err.println(res);
243
        System.err.println(res);
278
        assertEquals(golden, res);
244
        assertEquals(golden, res);
279
    }
245
    }
280
246
    
281
    /*
247
    public void testPrependSecondLambdaParam() throws Exception {
282
     * #94324 - second test. If the moved expression is changed, it is again
283
     * rewritten by VeryPretty - in this time, i do not see any solution for
284
     * that.
285
     *//*
286
    public void testAddCast94324_2() throws Exception {
287
        testFile = new File(getWorkDir(), "Test.java");
248
        testFile = new File(getWorkDir(), "Test.java");
288
        TestUtilities.copyStringToFile(testFile, 
249
        TestUtilities.copyStringToFile(testFile, 
289
            "package javaapplication3;\n" +
250
            "package hierbas.del.litoral;\n\n" +
290
            "\n" +
251
            "public class Test {\n" +
291
            "public class Klasa {\n" +
252
            "    public static void taragui() {\n" +
292
            "    \n" +
253
            "        ChangeListener l = (e) -> {};\n" + 
293
            "    static Object method() {\n" +
294
            "        return null;\n" +
295
            "    }\n" +
254
            "    }\n" +
296
            "    \n" +
255
            "}\n"
297
            "    public static void main(String[] args) {\n" +
256
            );
298
            "        // TODO code application logic here\n" +
257
        String golden =
299
            "        String s = Klasa.method();\n" +
258
            "package hierbas.del.litoral;\n\n" +
259
            "public class Test {\n" +
260
            "    public static void taragui() {\n" +
261
            "        ChangeListener l = (f, e) -> {};\n" + 
300
            "    }\n" +
262
            "    }\n" +
301
            "\n" +
302
            "}\n"
303
        );
304
        String golden =
305
            "package javaapplication3;\n" +
306
            "\n" +
307
            "public class Klasa {\n" +
308
            "    \n" +
309
            "    static Object method() {\n" +
310
            "        return null;\n" +
311
            "    }\n" +
312
            "    \n" +
313
            "    public static void main(String[] args) {\n" +
314
            "        // TODO code application logic here\n" +
315
            "        String s = (String) javaapplication3.Klasa.metoda();\n" +
316
            "    }\n" +
317
            "\n" +
318
            "}\n";
263
            "}\n";
319
        JavaSource src = getJavaSource(testFile);
264
        JavaSource src = getJavaSource(testFile);
320
        
265
        
321
        CancellableTask<WorkingCopy> task = new CancellableTask<WorkingCopy>() {
266
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
322
267
323
            public void run(WorkingCopy workingCopy) throws IOException {
268
            public void run(final WorkingCopy workingCopy) throws IOException {
324
                workingCopy.toPhase(Phase.RESOLVED);
269
                workingCopy.toPhase(Phase.RESOLVED);
325
                CompilationUnitTree cut = workingCopy.getCompilationUnit();
270
                final TreeMaker make = workingCopy.getTreeMaker();
326
                TreeMaker make = workingCopy.getTreeMaker();
271
                new TreeScanner<Void, Void>() {
327
                ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
272
                    @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
328
                MethodTree method = (MethodTree) clazz.getMembers().get(2);
273
                        workingCopy.rewrite(node, make.insertLambdaParameter(node, 0, make.Variable(make.Modifiers(EnumSet.noneOf(Modifier.class)), "f", null, null)));
329
                VariableTree var = (VariableTree) method.getBody().getStatements().get(0);
274
                        return super.visitLambdaExpression(node, p);
330
                MethodInvocationTree init = (MethodInvocationTree) var.getInitializer();
275
                    }
331
                MethodInvocationTree initCopy = make.MethodInvocation(
276
                }.scan(workingCopy.getCompilationUnit(), null);
332
                        (List<ExpressionTree>) init.getTypeArguments(),
333
                        make.setLabel((MemberSelectTree) init.getMethodSelect(), "metoda"),
334
                        init.getArguments()
335
                );
336
                workingCopy.rewrite(init, initCopy);
337
                ExpressionTree cast = make.TypeCast(make.Identifier("String"), initCopy);
338
                workingCopy.rewrite(init, cast);
339
            }
277
            }
340
278
341
            public void cancel() {
342
            }
343
        };
279
        };
344
        src.runModificationTask(task).commit();
280
        src.runModificationTask(task).commit();
345
        String res = TestUtilities.copyFileToString(testFile);
281
        String res = TestUtilities.copyFileToString(testFile);
346
        System.err.println(res);
282
        System.err.println(res);
347
        assertEquals(golden, res);
283
        assertEquals(golden, res);
348
    }*/
284
    }
285
    
286
    public void testRemoveFirstLambdaParam() throws Exception {
287
        testFile = new File(getWorkDir(), "Test.java");
288
        TestUtilities.copyStringToFile(testFile, 
289
            "package hierbas.del.litoral;\n\n" +
290
            "public class Test {\n" +
291
            "    public static void taragui() {\n" +
292
            "        ChangeListener l = (e, f) -> {};\n" + 
293
            "    }\n" +
294
            "}\n"
295
            );
296
        String golden =
297
            "package hierbas.del.litoral;\n\n" +
298
            "public class Test {\n" +
299
            "    public static void taragui() {\n" +
300
            "        ChangeListener l = (f) -> {};\n" + 
301
            "    }\n" +
302
            "}\n";
303
        JavaSource src = getJavaSource(testFile);
304
        
305
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
306
307
            public void run(final WorkingCopy workingCopy) throws IOException {
308
                workingCopy.toPhase(Phase.RESOLVED);
309
                final TreeMaker make = workingCopy.getTreeMaker();
310
                new TreeScanner<Void, Void>() {
311
                    @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
312
                        workingCopy.rewrite(node, make.removeLambdaParameter(node, 0));
313
                        return super.visitLambdaExpression(node, p);
314
                    }
315
                }.scan(workingCopy.getCompilationUnit(), null);
316
            }
317
318
        };
319
        src.runModificationTask(task).commit();
320
        String res = TestUtilities.copyFileToString(testFile);
321
        System.err.println(res);
322
        assertEquals(golden, res);
323
    }
324
    
325
    public void testRemoveSecondLambdaParam() throws Exception {
326
        testFile = new File(getWorkDir(), "Test.java");
327
        TestUtilities.copyStringToFile(testFile, 
328
            "package hierbas.del.litoral;\n\n" +
329
            "public class Test {\n" +
330
            "    public static void taragui() {\n" +
331
            "        ChangeListener l = (e, f) -> {};\n" + 
332
            "    }\n" +
333
            "}\n"
334
            );
335
        String golden =
336
            "package hierbas.del.litoral;\n\n" +
337
            "public class Test {\n" +
338
            "    public static void taragui() {\n" +
339
            "        ChangeListener l = (e) -> {};\n" + 
340
            "    }\n" +
341
            "}\n";
342
        JavaSource src = getJavaSource(testFile);
343
        
344
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
345
346
            public void run(final WorkingCopy workingCopy) throws IOException {
347
                workingCopy.toPhase(Phase.RESOLVED);
348
                final TreeMaker make = workingCopy.getTreeMaker();
349
                new TreeScanner<Void, Void>() {
350
                    @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
351
                        workingCopy.rewrite(node, make.removeLambdaParameter(node, 1));
352
                        return super.visitLambdaExpression(node, p);
353
                    }
354
                }.scan(workingCopy.getCompilationUnit(), null);
355
            }
356
357
        };
358
        src.runModificationTask(task).commit();
359
        String res = TestUtilities.copyFileToString(testFile);
360
        System.err.println(res);
361
        assertEquals(golden, res);
362
    }
363
    
364
    public void testOnlyLambdaParam() throws Exception {
365
        testFile = new File(getWorkDir(), "Test.java");
366
        TestUtilities.copyStringToFile(testFile, 
367
            "package hierbas.del.litoral;\n\n" +
368
            "public class Test {\n" +
369
            "    public static void taragui() {\n" +
370
            "        ChangeListener l = (e) -> {};\n" + 
371
            "    }\n" +
372
            "}\n"
373
            );
374
        String golden =
375
            "package hierbas.del.litoral;\n\n" +
376
            "public class Test {\n" +
377
            "    public static void taragui() {\n" +
378
            "        ChangeListener l = () -> {};\n" + 
379
            "    }\n" +
380
            "}\n";
381
        JavaSource src = getJavaSource(testFile);
382
        
383
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
384
385
            public void run(final WorkingCopy workingCopy) throws IOException {
386
                workingCopy.toPhase(Phase.RESOLVED);
387
                final TreeMaker make = workingCopy.getTreeMaker();
388
                new TreeScanner<Void, Void>() {
389
                    @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
390
                        workingCopy.rewrite(node, make.removeLambdaParameter(node, 0));
391
                        return super.visitLambdaExpression(node, p);
392
                    }
393
                }.scan(workingCopy.getCompilationUnit(), null);
394
            }
395
396
        };
397
        src.runModificationTask(task).commit();
398
        String res = TestUtilities.copyFileToString(testFile);
399
        System.err.println(res);
400
        assertEquals(golden, res);
401
    }
402
    
403
    public void testLambdaFullBody2Expression() throws Exception {
404
        testFile = new File(getWorkDir(), "Test.java");
405
        TestUtilities.copyStringToFile(testFile, 
406
            "package hierbas.del.litoral;\n\n" +
407
            "public class Test {\n" +
408
            "    public static void taragui() {\n" +
409
            "        ChangeListener l = (e) -> {return 1;};\n" + 
410
            "    }\n" +
411
            "}\n"
412
            );
413
        String golden =
414
            "package hierbas.del.litoral;\n\n" +
415
            "public class Test {\n" +
416
            "    public static void taragui() {\n" +
417
            "        ChangeListener l = (e) -> 1;\n" + 
418
            "    }\n" +
419
            "}\n";
420
        JavaSource src = getJavaSource(testFile);
421
        
422
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
423
424
            public void run(final WorkingCopy workingCopy) throws IOException {
425
                workingCopy.toPhase(Phase.RESOLVED);
426
                final TreeMaker make = workingCopy.getTreeMaker();
427
                new TreeScanner<Void, Void>() {
428
                    @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
429
                        ReturnTree t = (ReturnTree) ((BlockTree) node.getBody()).getStatements().get(0);
430
                        workingCopy.rewrite(node, make.setLambdaBody(node, t.getExpression()));
431
                        return super.visitLambdaExpression(node, p);
432
                    }
433
                }.scan(workingCopy.getCompilationUnit(), null);
434
            }
435
436
        };
437
        src.runModificationTask(task).commit();
438
        String res = TestUtilities.copyFileToString(testFile);
439
        System.err.println(res);
440
        assertEquals(golden, res);
441
    }
442
    
443
    public void testLambdaExpression2FullBody() throws Exception {
444
        testFile = new File(getWorkDir(), "Test.java");
445
        TestUtilities.copyStringToFile(testFile, 
446
            "package hierbas.del.litoral;\n\n" +
447
            "public class Test {\n" +
448
            "    public static void taragui() {\n" +
449
            "        ChangeListener l = (e) -> 1;\n" + 
450
            "    }\n" +
451
            "}\n"
452
            );
453
        String golden =
454
            "package hierbas.del.litoral;\n\n" +
455
            "public class Test {\n" +
456
            "    public static void taragui() {\n" +
457
            "        ChangeListener l = (e) -> {\n" +
458
            "            return 1;\n" +
459
            "        };\n" + 
460
            "    }\n" +
461
            "}\n";
462
        JavaSource src = getJavaSource(testFile);
463
        
464
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
465
466
            public void run(final WorkingCopy workingCopy) throws IOException {
467
                workingCopy.toPhase(Phase.RESOLVED);
468
                final TreeMaker make = workingCopy.getTreeMaker();
469
                new TreeScanner<Void, Void>() {
470
                    @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
471
                        workingCopy.rewrite(node, make.setLambdaBody(node, make.Block(Collections.singletonList(make.Return((ExpressionTree) node.getBody())), false)));
472
                        return super.visitLambdaExpression(node, p);
473
                    }
474
                }.scan(workingCopy.getCompilationUnit(), null);
475
            }
476
477
        };
478
        src.runModificationTask(task).commit();
479
        String res = TestUtilities.copyFileToString(testFile);
480
        System.err.println(res);
481
        assertEquals(golden, res);
482
    }
483
    
484
    public void testMethodReferenceDiff() throws Exception {
485
        testFile = new File(getWorkDir(), "Test.java");
486
        TestUtilities.copyStringToFile(testFile, 
487
            "package hierbas.del.litoral;\n\n" +
488
            "public class Test {\n" +
489
            "    public static void taragui() {\n" +
490
            "        Runnable r = hierbas.del.litoral.Test :: taragui;\n" + 
491
            "    }\n" +
492
            "}\n"
493
            );
494
        String golden =
495
            "package hierbas.del.litoral;\n\n" +
496
            "public class Test {\n" +
497
            "    public static void taragui() {\n" +
498
            "        Runnable r = Test :: taragui;\n" + 
499
            "    }\n" +
500
            "}\n";
501
        JavaSource src = getJavaSource(testFile);
502
        
503
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
504
505
            public void run(final WorkingCopy workingCopy) throws IOException {
506
                workingCopy.toPhase(Phase.RESOLVED);
507
                final TreeMaker make = workingCopy.getTreeMaker();
508
                new TreeScanner<Void, Void>() {
509
                    @Override public Void visitMemberReference(MemberReferenceTree node, Void p) {
510
                        workingCopy.rewrite(node, make.MemberReference(node.getMode(), make.Identifier("Test"), node.getName(), node.getTypeArguments()));
511
                        return super.visitMemberReference(node, p);
512
                    }
513
                }.scan(workingCopy.getCompilationUnit(), null);
514
            }
515
516
        };
517
        src.runModificationTask(task).commit();
518
        String res = TestUtilities.copyFileToString(testFile);
519
        System.err.println(res);
520
        assertEquals(golden, res);
521
    }
522
    
523
    public void testMethodReferenceNameDiff() throws Exception {
524
        testFile = new File(getWorkDir(), "Test.java");
525
        TestUtilities.copyStringToFile(testFile, 
526
            "package hierbas.del.litoral;\n\n" +
527
            "public class Test {\n" +
528
            "    public static void taragui() {\n" +
529
            "        Runnable r = Test :: taragui;\n" + 
530
            "    }\n" +
531
            "}\n"
532
            );
533
        String golden =
534
            "package hierbas.del.litoral;\n\n" +
535
            "public class Test {\n" +
536
            "    public static void taragui() {\n" +
537
            "        Runnable r = Test :: taragui2;\n" + 
538
            "    }\n" +
539
            "}\n";
540
        JavaSource src = getJavaSource(testFile);
541
        
542
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
543
544
            public void run(final WorkingCopy workingCopy) throws IOException {
545
                workingCopy.toPhase(Phase.RESOLVED);
546
                final TreeMaker make = workingCopy.getTreeMaker();
547
                new TreeScanner<Void, Void>() {
548
                    @Override public Void visitMemberReference(MemberReferenceTree node, Void p) {
549
                        workingCopy.rewrite(node, make.setLabel(node, "taragui2"));
550
                        return super.visitMemberReference(node, p);
551
                    }
552
                }.scan(workingCopy.getCompilationUnit(), null);
553
            }
554
555
        };
556
        src.runModificationTask(task).commit();
557
        String res = TestUtilities.copyFileToString(testFile);
558
        System.err.println(res);
559
        assertEquals(golden, res);
560
    }
561
    
562
    public void testMethodReferenceFirstTypeParam() throws Exception {
563
        testFile = new File(getWorkDir(), "Test.java");
564
        TestUtilities.copyStringToFile(testFile, 
565
            "package hierbas.del.litoral;\n\n" +
566
            "public class Test {\n" +
567
            "    public static void taragui() {\n" +
568
            "        Runnable r = Test::taragui;\n" + 
569
            "    }\n" +
570
            "}\n"
571
            );
572
        String golden =
573
            "package hierbas.del.litoral;\n\n" +
574
            "public class Test {\n" +
575
            "    public static void taragui() {\n" +
576
            "        Runnable r = Test::<String>taragui;\n" + 
577
            "    }\n" +
578
            "}\n";
579
        JavaSource src = getJavaSource(testFile);
580
        
581
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
582
583
            public void run(final WorkingCopy workingCopy) throws IOException {
584
                workingCopy.toPhase(Phase.RESOLVED);
585
                final TreeMaker make = workingCopy.getTreeMaker();
586
                new TreeScanner<Void, Void>() {
587
                    @Override public Void visitMemberReference(MemberReferenceTree node, Void p) {
588
                        workingCopy.rewrite(node, make.MemberReference(node.getMode(), node.getQualifierExpression(), node.getName(), Collections.singletonList(make.Identifier("String"))));
589
                        return super.visitMemberReference(node, p);
590
                    }
591
                }.scan(workingCopy.getCompilationUnit(), null);
592
            }
593
594
        };
595
        src.runModificationTask(task).commit();
596
        String res = TestUtilities.copyFileToString(testFile);
597
        System.err.println(res);
598
        assertEquals(golden, res);
599
    }
600
    
601
    public void testMethodReferenceLastTypeParam() throws Exception {
602
        testFile = new File(getWorkDir(), "Test.java");
603
        TestUtilities.copyStringToFile(testFile, 
604
            "package hierbas.del.litoral;\n\n" +
605
            "public class Test {\n" +
606
            "    public static void taragui() {\n" +
607
            "        Runnable r = Test::<String>taragui;\n" + 
608
            "    }\n" +
609
            "}\n"
610
            );
611
        String golden =
612
            "package hierbas.del.litoral;\n\n" +
613
            "public class Test {\n" +
614
            "    public static void taragui() {\n" +
615
            "        Runnable r = Test::taragui;\n" + 
616
            "    }\n" +
617
            "}\n";
618
        JavaSource src = getJavaSource(testFile);
619
        
620
        Task<WorkingCopy> task = new Task<WorkingCopy>() {
621
622
            public void run(final WorkingCopy workingCopy) throws IOException {
623
                workingCopy.toPhase(Phase.RESOLVED);
624
                final TreeMaker make = workingCopy.getTreeMaker();
625
                new TreeScanner<Void, Void>() {
626
                    @Override public Void visitMemberReference(MemberReferenceTree node, Void p) {
627
                        workingCopy.rewrite(node, make.MemberReference(node.getMode(), node.getQualifierExpression(), node.getName(), null));
628
                        return super.visitMemberReference(node, p);
629
                    }
630
                }.scan(workingCopy.getCompilationUnit(), null);
631
            }
632
633
        };
634
        src.runModificationTask(task).commit();
635
        String res = TestUtilities.copyFileToString(testFile);
636
        System.err.println(res);
637
        assertEquals(golden, res);
638
    }
349
    
639
    
350
    String getGoldenPckg() {
640
    String getGoldenPckg() {
351
        return "";
641
        return "";
(-)a/java.source/test/unit/src/org/netbeans/modules/java/source/parsing/JavacParserTest.java (+67 lines)
Lines 42-53 Link Here
42
42
43
package org.netbeans.modules.java.source.parsing;
43
package org.netbeans.modules.java.source.parsing;
44
44
45
import com.sun.source.tree.CompilationUnitTree;
46
import com.sun.source.tree.Tree;
47
import com.sun.source.util.TreePath;
48
import com.sun.source.util.TreePathScanner;
45
import java.io.File;
49
import java.io.File;
46
import java.util.Arrays;
50
import java.util.Arrays;
47
import java.util.HashSet;
51
import java.util.HashSet;
48
import java.util.Set;
52
import java.util.Set;
53
import java.util.concurrent.atomic.AtomicReference;
49
import javax.lang.model.element.TypeElement;
54
import javax.lang.model.element.TypeElement;
55
import javax.swing.text.Document;
50
import javax.tools.Diagnostic;
56
import javax.tools.Diagnostic;
57
import static junit.framework.Assert.assertTrue;
58
import org.netbeans.api.java.lexer.JavaTokenId;
51
import org.netbeans.api.java.source.ClasspathInfo;
59
import org.netbeans.api.java.source.ClasspathInfo;
52
import org.netbeans.api.java.source.CompilationController;
60
import org.netbeans.api.java.source.CompilationController;
53
import org.netbeans.api.java.source.JavaSource;
61
import org.netbeans.api.java.source.JavaSource;
Lines 55-64 Link Here
55
import org.netbeans.api.java.source.SourceUtilsTestUtil;
63
import org.netbeans.api.java.source.SourceUtilsTestUtil;
56
import org.netbeans.api.java.source.Task;
64
import org.netbeans.api.java.source.Task;
57
import org.netbeans.api.java.source.TestUtilities;
65
import org.netbeans.api.java.source.TestUtilities;
66
import org.netbeans.api.lexer.Language;
67
import org.netbeans.api.lexer.TokenHierarchy;
68
import org.netbeans.api.lexer.TokenSequence;
58
import org.netbeans.junit.NbTestCase;
69
import org.netbeans.junit.NbTestCase;
59
import org.netbeans.modules.java.source.tasklist.CompilerSettings;
70
import org.netbeans.modules.java.source.tasklist.CompilerSettings;
71
import org.openide.cookies.EditorCookie;
60
import org.openide.filesystems.FileObject;
72
import org.openide.filesystems.FileObject;
61
import org.openide.filesystems.FileUtil;
73
import org.openide.filesystems.FileUtil;
74
import org.openide.loaders.DataObject;
62
75
63
/**
76
/**
64
 *
77
 *
Lines 126-131 Link Here
126
            }
139
            }
127
        }, true);
140
        }, true);
128
    }
141
    }
142
    
143
    public void testPartialReparse() throws Exception {
144
        FileObject f2 = createFile("test/Test2.java", "package test; class Test2 { private void test() { System.err.println(\"\"); System.err.println(1); } }");
145
        DataObject d = DataObject.find(f2);
146
        EditorCookie ec = d.getLookup().lookup(EditorCookie.class);
147
        Document doc = ec.openDocument();
148
        JavaSource js = JavaSource.forFileObject(f2);
149
150
        doc.putProperty(Language.class, JavaTokenId.language());
151
        
152
        //initialize the tokens hierarchy:
153
        TokenSequence<?> ts = TokenHierarchy.get(doc).tokenSequence();
154
        
155
        ts.moveStart();
156
        
157
        while (ts.moveNext());
158
        
159
        final AtomicReference<CompilationUnitTree> tree = new AtomicReference<CompilationUnitTree>();
160
        
161
        js.runUserActionTask(new Task<CompilationController>() {
162
            public void run(CompilationController parameter) throws Exception {
163
                assertTrue(Phase.RESOLVED.compareTo(parameter.toPhase(Phase.RESOLVED)) <= 0);
164
                tree.set(parameter.getCompilationUnit());
165
            }
166
        }, true);
167
        
168
        doc.insertString(doc.getText(0, doc.getLength()).indexOf("\"") + 1, "aaaaaaaa", null);
169
        
170
        js.runUserActionTask(new Task<CompilationController>() {
171
            public void run(final CompilationController parameter) throws Exception {
172
                assertTrue(Phase.RESOLVED.compareTo(parameter.toPhase(Phase.RESOLVED)) <= 0);
173
                
174
                assertSame(tree.get(), parameter.getCompilationUnit());
175
                
176
                new TreePathScanner<Void, long[]>() {
177
178
                    @Override
179
                    public Void scan(Tree tree, long[] parentSpan) {
180
                        if (tree == null) return null;
181
                        if (parameter.getTreeUtilities().isSynthetic(new TreePath(getCurrentPath(), tree))) return null;
182
                        long start = parameter.getTrees().getSourcePositions().getStartPosition(parameter.getCompilationUnit(), tree);
183
                        long end   = parameter.getTrees().getSourcePositions().getEndPosition(parameter.getCompilationUnit(), tree);
184
                        assertTrue(start <= end);
185
                        if (parentSpan != null) {
186
                            assertTrue(parentSpan[0] <= start);
187
                            assertTrue(end <= parentSpan[1]);
188
                        }
189
                        return super.scan(tree, new long[] {start, end});
190
                    }
191
                    
192
                }.scan(parameter.getCompilationUnit(), null);
193
            }
194
        }, true);
195
    }
129
196
130
    private FileObject createFile(String path, String content) throws Exception {
197
    private FileObject createFile(String path, String content) throws Exception {
131
        FileObject file = FileUtil.createData(sourceRoot, path);
198
        FileObject file = FileUtil.createData(sourceRoot, path);
(-)a/java.source/test/unit/src/org/netbeans/modules/java/source/save/FormatingTest.java (+26 lines)
Lines 4227-4232 Link Here
4227
        reformat(doc, content, golden);
4227
        reformat(doc, content, golden);
4228
    }
4228
    }
4229
4229
4230
    public void testLambdaParameterWithInferredType() throws Exception {
4231
        testFile = new File(getWorkDir(), "Test.java");
4232
        TestUtilities.copyStringToFile(testFile, "");
4233
        FileObject testSourceFO = FileUtil.toFileObject(testFile);
4234
        DataObject testSourceDO = DataObject.find(testSourceFO);
4235
        EditorCookie ec = (EditorCookie)testSourceDO.getCookie(EditorCookie.class);
4236
        final Document doc = ec.openDocument();
4237
        doc.putProperty(Language.class, JavaTokenId.language());
4238
        String content =
4239
                "package hierbas.del.litoral;\n\n"
4240
                + "public class Test {\n\n"
4241
                + "    public static void main(String[] args) {\n"
4242
                + "        java.util.Arrays.asList(args).map((val) -> val.length());\n"
4243
                + "    }\n"
4244
                + "}\n";
4245
4246
        String golden =
4247
                "package hierbas.del.litoral;\n\n"
4248
                + "public class Test {\n\n"
4249
                + "    public static void main(String[] args) {\n"
4250
                + "        java.util.Arrays.asList(args).map((val) -> val.length());\n"
4251
                + "    }\n"
4252
                + "}\n";
4253
        reformat(doc, content, golden);
4254
    }
4255
4230
    private void reformat(Document doc, String content, String golden) throws Exception {
4256
    private void reformat(Document doc, String content, String golden) throws Exception {
4231
        reformat(doc, content, golden, 0, content.length());
4257
        reformat(doc, content, golden, 0, content.length());
4232
    }
4258
    }

Return to bug 225533