langtools/test/tools/javac/tree/MissingSemicolonTest.java
author jjg
Wed, 29 Oct 2014 17:25:23 -0700
changeset 27319 030080f03e4f
parent 25274 a06a738fc6be
child 30730 d3ce7619db2c
permissions -rw-r--r--
8062348: langtools tests should close file manager (group 1) Reviewed-by: darcy
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
25274
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
     1
/*
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
     2
 * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
     4
 *
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
     7
 * published by the Free Software Foundation.
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
     8
 *
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    13
 * accompanied this code).
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    14
 *
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    18
 *
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    21
 * questions.
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    22
 */
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    23
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    24
/*
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    25
 * @test
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    26
 * @bug 8041648
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    27
 * @summary Verify that end positions are sane if semicolons are missing.
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    28
 * @run main MissingSemicolonTest MissingSemicolonTest.java
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    29
 */
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    30
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    31
import java.io.File;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    32
import java.io.IOException;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    33
import java.net.URI;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    34
import java.nio.file.Files;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    35
import java.util.*;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    36
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    37
import javax.tools.*;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    38
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    39
import com.sun.source.tree.*;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    40
import com.sun.source.tree.Tree.Kind;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    41
import com.sun.source.util.*;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    42
import com.sun.tools.javac.api.JavacTool;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    43
import com.sun.tools.javac.parser.Scanner;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    44
import com.sun.tools.javac.parser.ScannerFactory;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    45
import com.sun.tools.javac.tree.JCTree;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    46
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    47
import com.sun.tools.javac.util.Context;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    48
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    49
public class MissingSemicolonTest {
27319
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    50
    public static void main(String... args) throws IOException {
25274
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    51
        String testSrc = System.getProperty("test.src");
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    52
        File baseDir = new File(testSrc);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    53
        boolean ok = new MissingSemicolonTest().run(baseDir, args);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    54
        if (!ok) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    55
            throw new Error("failed");
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    56
        }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    57
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    58
27319
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    59
    boolean run(File baseDir, String... args) throws IOException {
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    60
        try {
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    61
            if (args.length == 0) {
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    62
                throw new IllegalStateException("Needs input files.");
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    63
            }
25274
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    64
27319
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    65
            for (String arg : args) {
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    66
                File file = new File(baseDir, arg);
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    67
                if (file.exists())
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    68
                    test(file);
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    69
                else
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    70
                    error("File not found: " + file);
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    71
            }
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    72
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    73
            System.err.println(fileCount + " files read");
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    74
            if (errors > 0)
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    75
                System.err.println(errors + " errors");
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    76
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    77
            return errors == 0;
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    78
        } finally {
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 25274
diff changeset
    79
            fm.close();
25274
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    80
        }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    81
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    82
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    83
    void test(File file) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    84
        if (file.isFile() && file.getName().endsWith(".java")) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    85
            try {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    86
                fileCount++;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    87
                String content = new String(Files.readAllBytes(file.toPath()));
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    88
                List<int[]> spans = gatherTreeSpans(file, content);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    89
                int nextSemicolon = -1;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    90
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    91
                //remove semicolons, one at a time, and verify the positions are still meaningful:
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    92
                while ((nextSemicolon = content.indexOf(';', nextSemicolon + 1)) != (-1)) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    93
                    String updatedContent =
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    94
                            content.substring(0, nextSemicolon) +
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    95
                                                 " " +
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    96
                                                 content.substring(nextSemicolon + 1);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    97
                    verifyTreeSpans(file, spans, updatedContent, nextSemicolon);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    98
                }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
    99
            } catch (IOException e) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   100
                error("Error reading " + file + ": " + e);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   101
            }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   102
        }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   103
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   104
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   105
    public List<int[]> gatherTreeSpans(File file, String content) throws IOException {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   106
        JCCompilationUnit unit = read(file.toURI(), content);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   107
        List<int[]> spans = new ArrayList<>();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   108
        new TreePathScanner<Void, Void>() {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   109
            @Override
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   110
            public Void scan(Tree tree, Void p) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   111
                if (tree != null) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   112
                    int start = ((JCTree) tree).getStartPosition();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   113
                    int end = ((JCTree) tree).getEndPosition(unit.endPositions);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   114
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   115
                    spans.add(new int[] {start, end});
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   116
                }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   117
                return super.scan(tree, p);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   118
            }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   119
        }.scan(unit, null);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   120
        return spans;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   121
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   122
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   123
    public void verifyTreeSpans(File file, List<int[]> spans,
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   124
                                String updatedContent, int semicolon) throws IOException {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   125
        JCCompilationUnit updated = read(file.toURI(), updatedContent);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   126
        Iterator<int[]> nextSpan = spans.iterator();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   127
        new TreePathScanner<Void, Void>() {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   128
            @Override
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   129
            public Void scan(Tree tree, Void p) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   130
                if (tree != null) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   131
                    int start = ((JCTree) tree).getStartPosition();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   132
                    int end = ((JCTree) tree).getEndPosition(updated.endPositions);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   133
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   134
                    if (tree.getKind() != Kind.ERRONEOUS) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   135
                        int[] expected = nextSpan.next();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   136
                        int expectedEnd = expected[1];
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   137
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   138
                        if (expectedEnd == semicolon + 1) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   139
                            Scanner scanner = scannerFactory.newScanner(updatedContent, true);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   140
                            scanner.nextToken();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   141
                            while (scanner.token().pos < expectedEnd)
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   142
                                scanner.nextToken();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   143
                            expectedEnd = scanner.token().pos;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   144
                        }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   145
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   146
                        if (expected[0] != start || expectedEnd != end) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   147
                            error(updatedContent + "; semicolon: " + semicolon + "; expected: " +
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   148
                                  expected[0] + "-" + expectedEnd + "; found=" + start + "-" + end +
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   149
                                  ";" + tree);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   150
                        }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   151
                    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   152
                }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   153
                return super.scan(tree, p);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   154
            }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   155
        }.scan(updated, null);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   156
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   157
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   158
    DiagnosticListener<JavaFileObject> devNull = (d) -> {};
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   159
    JavacTool tool = JavacTool.create();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   160
    StandardJavaFileManager fm = tool.getStandardFileManager(devNull, null, null);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   161
    ScannerFactory scannerFactory = ScannerFactory.instance(new Context());
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   162
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   163
    /**
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   164
     * Read a file.
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   165
     * @param file the file to be read
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   166
     * @return the tree for the content of the file
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   167
     * @throws IOException if any IO errors occur
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   168
     * @throws MissingSemicolonTest.ParseException if any errors occur while parsing the file
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   169
     */
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   170
    JCCompilationUnit read(URI uri, String content) throws IOException {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   171
        JavacTool tool = JavacTool.create();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   172
        JavacTask task = tool.getTask(null, fm, devNull, Collections.<String>emptyList(), null,
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   173
                Arrays.<JavaFileObject>asList(new JavaSource(uri, content)));
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   174
        Iterable<? extends CompilationUnitTree> trees = task.parse();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   175
        Iterator<? extends CompilationUnitTree> iter = trees.iterator();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   176
        if (!iter.hasNext())
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   177
            throw new Error("no trees found");
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   178
        JCCompilationUnit t = (JCCompilationUnit) iter.next();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   179
        if (iter.hasNext())
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   180
            throw new Error("too many trees found");
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   181
        return t;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   182
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   183
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   184
    class JavaSource extends SimpleJavaFileObject {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   185
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   186
        private final String content;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   187
        public JavaSource(URI uri, String content) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   188
            super(uri, JavaFileObject.Kind.SOURCE);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   189
            this.content = content;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   190
        }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   191
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   192
        @Override
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   193
        public CharSequence getCharContent(boolean ignoreEncodingErrors) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   194
            return content;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   195
        }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   196
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   197
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   198
    /**
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   199
     * Report an error. When the program is complete, the program will either
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   200
     * exit or throw an Error if any errors have been reported.
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   201
     * @param msg the error message
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   202
     */
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   203
    void error(String msg) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   204
        System.err.println(msg);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   205
        errors++;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   206
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   207
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   208
    /** Number of files that have been analyzed. */
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   209
    int fileCount;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   210
    /** Number of errors reported. */
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   211
    int errors;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   212
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   213
}
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   214
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   215
class TestCase {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   216
    String str1;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   217
    String str2;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   218
    public TestCase() {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   219
        super();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   220
        super.hashCode();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   221
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   222
    public TestCase(String str1, String str2) {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   223
        super();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   224
        this.str1 = str1;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   225
        this.str2 = str2;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   226
        assert true;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   227
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   228
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   229
    void newClass() {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   230
        new String();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   231
        new String();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   232
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   233
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   234
    void localVars() {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   235
        String str1 = "";
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   236
        String str2;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   237
        String str3;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   238
        final String str4;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   239
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   240
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   241
    void throwsException() {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   242
        throw new IllegalStateException();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   243
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   244
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   245
    int returnWithExpression() {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   246
        return 1;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   247
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   248
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   249
    void returnWithoutExpression() {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   250
        return ;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   251
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   252
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   253
    void doWhileBreakContinue() {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   254
        do {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   255
            if (true)
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   256
                break;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   257
            if (false)
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   258
                continue;
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   259
        } while(true);
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   260
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   261
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   262
    void labelled() {
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   263
        LABEL: doWhileBreakContinue();
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   264
    }
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   265
a06a738fc6be 8041648: do while loop that misses ending semicolon has wrong end position
jlahoda
parents:
diff changeset
   266
}