langtools/test/tools/javac/warnings/suppress/VerifySuppressWarnings.java
author ctornqvi
Fri, 12 May 2017 15:14:16 -0700
changeset 45090 a0908e5be3bc
parent 34560 b6a567b677f7
permissions -rw-r--r--
8180084: A few javac tests fail on Windows when the source and jtreg work dir are not on the same drive Reviewed-by: jlahoda
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
     1
/*
34560
b6a567b677f7 8059976: Convert JavacFileManager to use java.nio.file internally
jjg
parents: 27852
diff changeset
     2
 * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
     4
 *
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
     7
 * published by the Free Software Foundation.
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
     8
 *
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    13
 * accompanied this code).
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    14
 *
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    18
 *
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    21
 * questions.
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    22
 */
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    23
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    24
import com.sun.source.tree.ClassTree;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    25
import com.sun.source.tree.CompilationUnitTree;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    26
import com.sun.source.tree.MethodTree;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    27
import com.sun.source.tree.NewClassTree;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    28
import com.sun.source.tree.Tree;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    29
import com.sun.source.tree.VariableTree;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    30
import com.sun.source.util.JavacTask;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    31
import com.sun.source.util.TreeScanner;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    32
import com.sun.source.util.Trees;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    33
import com.sun.tools.javac.api.JavacTool;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    34
import com.sun.tools.javac.code.Flags;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    35
import com.sun.tools.javac.file.JavacFileManager;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    36
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    37
import java.io.File;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    38
import java.io.IOException;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    39
import java.net.URI;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    40
import java.net.URISyntaxException;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    41
import java.util.ArrayList;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    42
import java.util.Arrays;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    43
import java.util.Iterator;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    44
import java.util.List;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    45
import javax.tools.Diagnostic;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    46
import javax.tools.DiagnosticListener;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    47
import javax.tools.FileObject;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    48
import javax.tools.ForwardingJavaFileManager;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    49
import javax.tools.JavaFileManager;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    50
import javax.tools.JavaFileObject;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    51
import javax.tools.SimpleJavaFileObject;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    52
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    53
/**Takes a source file, parses it once to get the warnings inside the file and
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    54
 * then for each and every declaration in the file, it tries to place
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    55
 * the @SuppressWarnings annotation on the declaration and verifies than no
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    56
 * warnings are produced inside the declaration, but all are produced outside it.
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    57
 *
25301
e5da086c7d43 6707032: Division by zero warning not suppressed properly in some cases
jlahoda
parents: 19942
diff changeset
    58
 * Currently only works with <code>unchecked,deprecation,cast,divzero</code> warnings.
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    59
 */
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    60
public class VerifySuppressWarnings {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    61
25301
e5da086c7d43 6707032: Division by zero warning not suppressed properly in some cases
jlahoda
parents: 19942
diff changeset
    62
    private static final List<String> STANDARD_PARAMS =
e5da086c7d43 6707032: Division by zero warning not suppressed properly in some cases
jlahoda
parents: 19942
diff changeset
    63
            Arrays.asList("-Xlint:unchecked,deprecation,cast,divzero");
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    64
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    65
    public static void main(String... args) throws IOException, URISyntaxException {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    66
        if (args.length != 1) throw new IllegalStateException("Must provide class name!");
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    67
        String testContent = null;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    68
        List<File> sourcePath = new ArrayList<>();
45090
a0908e5be3bc 8180084: A few javac tests fail on Windows when the source and jtreg work dir are not on the same drive
ctornqvi
parents: 34560
diff changeset
    69
        for (String sourcePaths : System.getProperty("test.src.path").split(File.pathSeparator)) {
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    70
            sourcePath.add(new File(sourcePaths));
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    71
        }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    72
        JavacFileManager fm = JavacTool.create().getStandardFileManager(null, null, null);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    73
        for (File sp : sourcePath) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    74
            File inp = new File(sp, args[0]);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    75
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    76
            if (inp.canRead()) {
34560
b6a567b677f7 8059976: Convert JavacFileManager to use java.nio.file internally
jjg
parents: 27852
diff changeset
    77
                testContent = fm.getJavaFileObject(inp.toPath()).getCharContent(true).toString();
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    78
            }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    79
        }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    80
        if (testContent == null) throw new IllegalStateException();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    81
        final List<Diagnostic<?>> diagnostics = new ArrayList<>();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    82
        DiagnosticListener<JavaFileObject> collectDiagnostics = new DiagnosticListener<JavaFileObject>() {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    83
            @Override public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    84
                diagnostics.add(diagnostic);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    85
            }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    86
        };
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    87
        JavaFileObject testFile = new TestFO(new URI("mem://" + args[0]), testContent);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    88
        JavacTask task = JavacTool.create().getTask(null,
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    89
                                                    new TestFM(fm),
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    90
                                                    collectDiagnostics,
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    91
                                                    STANDARD_PARAMS,
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    92
                                                    null,
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    93
                                                    Arrays.asList(testFile));
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    94
        final Trees trees = Trees.instance(task);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    95
        final CompilationUnitTree cut = task.parse().iterator().next();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    96
        task.analyze();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    97
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    98
        final List<int[]> declarationSpans = new ArrayList<>();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
    99
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   100
        new TreeScanner<Void, Void>() {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   101
            @Override public Void visitClass(ClassTree node, Void p) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   102
                handleDeclaration(node);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   103
                return super.visitClass(node, p);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   104
            }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   105
            @Override public Void visitMethod(MethodTree node, Void p) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   106
                handleDeclaration(node);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   107
                return super.visitMethod(node, p);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   108
            }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   109
            @Override public Void visitVariable(VariableTree node, Void p) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   110
                handleDeclaration(node);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   111
                return super.visitVariable(node, p);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   112
            }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   113
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   114
            @Override
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   115
            public Void visitNewClass(NewClassTree node, Void p) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   116
                if (node.getClassBody() != null) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   117
                    scan(node.getClassBody().getMembers(), null);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   118
                }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   119
                return null;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   120
            }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   121
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   122
            private void handleDeclaration(Tree node) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   123
                int endPos = (int) trees.getSourcePositions().getEndPosition(cut, node);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   124
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   125
                if (endPos == (-1)) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   126
                    if (node.getKind() == Tree.Kind.METHOD && (((JCMethodDecl) node).getModifiers().flags & Flags.GENERATEDCONSTR) != 0) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   127
                        return ;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   128
                    }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   129
                    throw new IllegalStateException();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   130
                }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   131
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   132
                declarationSpans.add(new int[] {(int) trees.getSourcePositions().getStartPosition(cut, node), endPos});
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   133
            }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   134
        }.scan(cut, null);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   135
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   136
        for (final int[] declarationSpan : declarationSpans) {
25301
e5da086c7d43 6707032: Division by zero warning not suppressed properly in some cases
jlahoda
parents: 19942
diff changeset
   137
            final String suppressWarnings =
e5da086c7d43 6707032: Division by zero warning not suppressed properly in some cases
jlahoda
parents: 19942
diff changeset
   138
                    "@SuppressWarnings({\"deprecation\", \"unchecked\", \"serial\", \"divzero\"})";
19942
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   139
            final String updatedContent = testContent.substring(0, declarationSpan[0]) + suppressWarnings + testContent.substring(declarationSpan[0]);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   140
            final List<Diagnostic<?>> foundErrors = new ArrayList<>(diagnostics);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   141
            DiagnosticListener<JavaFileObject> verifyDiagnostics = new DiagnosticListener<JavaFileObject>() {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   142
                @Override public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   143
                    long adjustedPos = diagnostic.getPosition();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   144
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   145
                    if (adjustedPos >= declarationSpan[0]) adjustedPos -= suppressWarnings.length();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   146
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   147
                    if (declarationSpan[0] <= adjustedPos && adjustedPos <= declarationSpan[1]) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   148
                        throw new IllegalStateException("unsuppressed: " + diagnostic.getMessage(null));
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   149
                    }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   150
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   151
                    boolean found = false;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   152
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   153
                    for (Iterator<Diagnostic<?>> it = foundErrors.iterator(); it.hasNext();) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   154
                        Diagnostic<?> d = it.next();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   155
                        if (d.getPosition() == adjustedPos && d.getCode().equals(diagnostic.getCode())) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   156
                            it.remove();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   157
                            found = true;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   158
                            break;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   159
                        }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   160
                    }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   161
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   162
                    if (!found) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   163
                        throw new IllegalStateException("diagnostic not originally reported: " + diagnostic.getMessage(null));
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   164
                    }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   165
                }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   166
            };
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   167
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   168
            JavaFileObject updatedFile = new TestFO(new URI("mem://" + args[0]), updatedContent);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   169
            JavacTask testTask = JavacTool.create().getTask(null,
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   170
                                                            new TestFM(fm),
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   171
                                                            verifyDiagnostics,
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   172
                                                            STANDARD_PARAMS,
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   173
                                                            null,
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   174
                                                            Arrays.asList(updatedFile));
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   175
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   176
            testTask.analyze();
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   177
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   178
            for (Diagnostic<?> d : foundErrors) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   179
                if (d.getPosition() < declarationSpan[0] || declarationSpan[1] < d.getPosition()) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   180
                    throw new IllegalStateException("missing: " + d.getMessage(null));
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   181
                }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   182
            }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   183
        }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   184
    }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   185
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   186
    private static final class TestFO extends SimpleJavaFileObject {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   187
        private final String content;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   188
        public TestFO(URI uri, String content) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   189
            super(uri, Kind.SOURCE);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   190
            this.content = content;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   191
        }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   192
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   193
        @Override public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   194
            return content;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   195
        }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   196
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   197
        @Override public boolean isNameCompatible(String simpleName, Kind kind) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   198
            return true;
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   199
        }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   200
    }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   201
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   202
    private static final class TestFM extends ForwardingJavaFileManager<JavaFileManager> {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   203
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   204
        public TestFM(JavaFileManager fileManager) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   205
            super(fileManager);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   206
        }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   207
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   208
        @Override
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   209
        public boolean isSameFile(FileObject a, FileObject b) {
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   210
            return a.equals(b);
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   211
        }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   212
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   213
    }
e9dae0e41075 8021112: Spurious unchecked warning reported by javac
jlahoda
parents:
diff changeset
   214
}