test/langtools/tools/javac/T8180141/MissingLNTEntryForBreakContinueTest.java
author darcy
Fri, 02 Feb 2018 10:29:25 -0800
changeset 48723 6cb86bf0b51e
parent 47216 71c04702a3d5
permissions -rw-r--r--
8196623: Update JavaBaseTest.java to be version agnostic Reviewed-by: vromero
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45088
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
     1
/*
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
     2
 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
     4
 *
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
     7
 * published by the Free Software Foundation.
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
     8
 *
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    13
 * accompanied this code).
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    14
 *
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    18
 *
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    21
 * questions.
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    22
 */
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    23
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    24
/*
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    25
 * @test
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    26
 * @bug 8180141
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    27
 * @summary Missing entry in LineNumberTable for break statement that jumps out of try-finally
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    28
 * @modules jdk.jdeps/com.sun.tools.classfile
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    29
 *          jdk.compiler/com.sun.tools.javac.code
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    30
 *          jdk.compiler/com.sun.tools.javac.comp
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    31
 *          jdk.compiler/com.sun.tools.javac.file
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    32
 *          jdk.compiler/com.sun.tools.javac.main
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    33
 *          jdk.compiler/com.sun.tools.javac.tree
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    34
 *          jdk.compiler/com.sun.tools.javac.util
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    35
 * @compile -g MissingLNTEntryForBreakContinueTest.java
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    36
 * @run main MissingLNTEntryForBreakContinueTest
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    37
 */
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    38
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    39
import java.io.File;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    40
import java.net.URI;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    41
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    42
import javax.tools.JavaFileObject;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    43
import javax.tools.SimpleJavaFileObject;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    44
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    45
import com.sun.tools.classfile.*;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    46
import com.sun.tools.javac.comp.Attr;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    47
import com.sun.tools.javac.comp.AttrContext;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    48
import com.sun.tools.javac.comp.Env;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    49
import com.sun.tools.javac.comp.Modules;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    50
import com.sun.tools.javac.file.JavacFileManager;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    51
import com.sun.tools.javac.main.JavaCompiler;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    52
import com.sun.tools.javac.tree.JCTree;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    53
import com.sun.tools.javac.util.Context;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    54
import com.sun.tools.javac.util.List;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    55
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    56
import static com.sun.tools.javac.util.List.of;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    57
import static com.sun.tools.javac.tree.JCTree.Tag.*;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    58
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    59
public class MissingLNTEntryForBreakContinueTest {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    60
    protected ReusableJavaCompiler tool;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    61
    Context context;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    62
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    63
    MissingLNTEntryForBreakContinueTest() {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    64
        context = new Context();
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    65
        JavacFileManager.preRegister(context);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    66
        MyAttr.preRegister(context);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    67
        tool = new ReusableJavaCompiler(context);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    68
    }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    69
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    70
    public static void main(String... args) throws Throwable {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    71
        new MissingLNTEntryForBreakContinueTest().test();
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    72
    }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    73
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    74
    void test() throws Throwable {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    75
        testFor("1", "break");
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    76
        testFor("2", "continue");
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    77
    }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    78
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    79
    void testFor(String id, String statement) throws Throwable {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    80
        JavaSource source = new JavaSource(id, statement);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    81
        tool.clear();
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    82
        List<JavaFileObject> inputs = of(source);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    83
        try {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    84
            tool.compile(inputs);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    85
        } catch (Throwable ex) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    86
            throw new AssertionError(ex);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    87
        }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    88
        File testClasses = new File(".");
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    89
        File file = new File(testClasses, "Test" + id + ".class");
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    90
        ClassFile classFile = ClassFile.read(file);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    91
        for (Method m : classFile.methods) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    92
            if (classFile.constant_pool.getUTF8Value(m.name_index).equals("foo")) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    93
                Code_attribute code = (Code_attribute)m.attributes.get(Attribute.Code);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    94
                LineNumberTable_attribute lnt = (LineNumberTable_attribute)code.attributes.get(Attribute.LineNumberTable);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    95
                checkLNT(lnt, MyAttr.lineNumber);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    96
            }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    97
        }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    98
    }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
    99
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   100
    void checkLNT(LineNumberTable_attribute lnt, int lineToCheckFor) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   101
        for (LineNumberTable_attribute.Entry e: lnt.line_number_table) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   102
            if (e.line_number == lineToCheckFor) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   103
                return;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   104
            }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   105
        }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   106
        throw new AssertionError("seek line number not found in the LNT for method foo()");
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   107
    }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   108
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   109
    class JavaSource extends SimpleJavaFileObject {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   110
        String statement;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   111
        String id;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   112
        String template =
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   113
                "class Test#Id {\n" +
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   114
                "    void foo(boolean condition) {\n" +
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   115
                "        while (true) {\n" +
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   116
                "            try {\n" +
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   117
                "                if (condition) {\n" +
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   118
                "                    #STM;\n" +
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   119
                "                }\n" +
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   120
                "            } finally {\n" +
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   121
                "                System.out.println(\"finalizer\");\n" +
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   122
                "            }\n" +
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   123
                "        }\n" +
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   124
                "    }" +
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   125
                "}";
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   126
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   127
        JavaSource(String id, String statement) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   128
            super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   129
            this.statement = statement;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   130
            this.id = id;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   131
        }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   132
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   133
        @Override
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   134
        public CharSequence getCharContent(boolean ignoreEncodingErrors) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   135
            return template.replace("#Id", id).replace("#STM", statement);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   136
        }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   137
    }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   138
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   139
    /* this class has been set up to do not depend on a fixed line number, this Attr subclass will
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   140
     * look for 'break' or 'continue' statements in order to find the actual line number they occupy.
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   141
     * This way the test can find if that line number appears in the LNT generated for a given class.
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   142
     */
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   143
    static class MyAttr extends Attr {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   144
        static int lineNumber;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   145
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   146
        static void preRegister(Context context) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   147
            context.put(attrKey, (com.sun.tools.javac.util.Context.Factory<Attr>) c -> new MyAttr(c));
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   148
        }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   149
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   150
        MyAttr(Context context) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   151
            super(context);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   152
        }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   153
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   154
        @Override
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   155
        public com.sun.tools.javac.code.Type attribStat(JCTree tree, Env<AttrContext> env) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   156
            com.sun.tools.javac.code.Type result = super.attribStat(tree, env);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   157
            if (tree.hasTag(BREAK) || tree.hasTag(CONTINUE)) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   158
                lineNumber = env.toplevel.lineMap.getLineNumber(tree.pos);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   159
            }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   160
            return result;
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   161
        }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   162
    }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   163
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   164
    static class ReusableJavaCompiler extends JavaCompiler {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   165
        ReusableJavaCompiler(Context context) {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   166
            super(context);
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   167
        }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   168
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   169
        @Override
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   170
        protected void checkReusable() {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   171
            // do nothing
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   172
        }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   173
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   174
        @Override
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   175
        public void close() {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   176
            //do nothing
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   177
        }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   178
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   179
        void clear() {
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   180
            newRound();
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   181
            Modules.instance(context).newRound();
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   182
        }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   183
    }
b85080f2f0cc 8180141: Missing entry in LineNumberTable for break statement that jumps out of try-finally
vromero
parents:
diff changeset
   184
}