langtools/test/tools/javac/api/TestGetElement.java
author akulyakh
Thu, 21 May 2015 11:41:04 -0700
changeset 30730 d3ce7619db2c
parent 6590 f745e683da2c
permissions -rw-r--r--
8076543: Add @modules as needed to the langtools tests Reviewed-by: jjg, shurailine
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6590
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
     1
/*
30730
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 6590
diff changeset
     2
 * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
6590
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
     4
 *
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
     7
 * published by the Free Software Foundation.
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
     8
 *
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    13
 * accompanied this code).
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    14
 *
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    18
 *
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    21
 * questions.
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    22
 */
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    23
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    24
/*
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    25
 * @test
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    26
 * @bug 6930507
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    27
 * @summary Symbols for anonymous and local classes made too late for use by java tree API
30730
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 6590
diff changeset
    28
 * @modules jdk.compiler
6590
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    29
 */
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    30
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    31
import java.io.*;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    32
import java.util.*;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    33
import javax.annotation.processing.*;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    34
import javax.lang.model.SourceVersion;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    35
import javax.lang.model.element.*;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    36
import javax.tools.Diagnostic;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    37
import static javax.lang.model.util.ElementFilter.*;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    38
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    39
import com.sun.source.tree.*;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    40
import com.sun.source.util.*;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    41
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    42
@SupportedOptions({"test", "last"})
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    43
@SupportedAnnotationTypes("*")
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    44
public class TestGetElement extends AbstractProcessor {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    45
    public static void main(String... args) throws Exception {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    46
        new TestGetElement().run();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    47
    }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    48
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    49
    public TestGetElement() { }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    50
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    51
    public void run() throws Exception {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    52
        final String testSrc = System.getProperty("test.src");
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    53
        final String testClasses = System.getProperty("test.classes");
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    54
        final String myClassName = getClass().getName();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    55
        final String mySrc = new File(testSrc, myClassName + ".java").getPath();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    56
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    57
        final int NUM_TESTS = 90; // #decls in this source file
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    58
        for (int i = 1; i <= NUM_TESTS; i++) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    59
            System.err.println("test " + i);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    60
            File testDir = new File("test" + i);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    61
            File classesDir = new File(testDir, "classes");
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    62
            classesDir.mkdirs();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    63
            String[] args = {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    64
                "-d", classesDir.getPath(),
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    65
                "-processorpath", testClasses,
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    66
                "-processor", myClassName,
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    67
                "-proc:only",
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    68
                "-Atest=" + i,
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    69
                "-Alast=" + (i == NUM_TESTS),
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    70
                mySrc
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    71
            };
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    72
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    73
//            System.err.println("compile: " + Arrays.asList(args));
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    74
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    75
            StringWriter sw = new StringWriter();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    76
            PrintWriter pw = new PrintWriter(sw);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    77
            int rc = com.sun.tools.javac.Main.compile(args, pw);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    78
            pw.close();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    79
            String out = sw.toString();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    80
            if (out != null)
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    81
                System.err.println(out);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    82
            if (rc != 0) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    83
                System.err.println("compilation failed: rc=" + rc);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    84
                errors++;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    85
            }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    86
        }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    87
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    88
        if (errors > 0)
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    89
            throw new Exception(errors + " errors occurred");
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    90
    }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    91
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    92
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    93
    int errors;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    94
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    95
    public boolean process(Set<? extends TypeElement> annotations,
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    96
                           RoundEnvironment roundEnvironment)
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    97
    {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    98
        if (roundEnvironment.processingOver())
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
    99
            return true;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   100
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   101
        Map<String,String> options = processingEnv.getOptions();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   102
        int test = Integer.parseInt(options.get("test"));
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   103
        boolean _last = Boolean.parseBoolean(options.get("last"));
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   104
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   105
        Trees trees = Trees.instance(processingEnv);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   106
        Scanner scanner = new Scanner(trees, _last);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   107
        int nelems = 0;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   108
        for (TypeElement e : typesIn(roundEnvironment.getRootElements())) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   109
            nelems += scanner.scan(trees.getPath(e), test);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   110
        }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   111
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   112
        Messager m = processingEnv.getMessager();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   113
        int EXPECT = 1;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   114
        if (nelems != EXPECT) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   115
            m.printMessage(Diagnostic.Kind.ERROR,
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   116
                    "Unexpected number of elements found: " + nelems + " expected: " + EXPECT);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   117
        }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   118
        return true;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   119
    }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   120
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   121
    @Override
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   122
    public SourceVersion getSupportedSourceVersion() {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   123
        return SourceVersion.latest();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   124
    }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   125
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   126
    class Scanner extends TreePathScanner<Integer,Integer> {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   127
        final Trees trees;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   128
        final boolean last;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   129
        int count;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   130
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   131
        Scanner(Trees trees, boolean last) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   132
            this.trees = trees;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   133
            this.last = last;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   134
        }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   135
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   136
        @Override
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   137
        public Integer visitClass(ClassTree tree, Integer test) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   138
            return reduce(check(test), super.visitClass(tree, test));
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   139
        }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   140
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   141
        @Override
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   142
        public Integer visitMethod(MethodTree tree, Integer test) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   143
            return reduce(check(test), super.visitMethod(tree, test));
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   144
        }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   145
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   146
        @Override
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   147
        public Integer visitVariable(VariableTree tree, Integer test) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   148
            return reduce(check(test), super.visitVariable(tree, test));
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   149
        }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   150
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   151
        @Override
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   152
        public Integer reduce(Integer i1, Integer i2) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   153
            if (i1 == null || i1.intValue() == 0)
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   154
                return i2;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   155
            if (i2 == null || i2.intValue() == 0)
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   156
                return i1;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   157
            return (i1 + i2);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   158
        }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   159
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   160
        int check(int test) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   161
            count++;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   162
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   163
            if (count != test)
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   164
                return 0;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   165
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   166
            TreePath p = getCurrentPath();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   167
            Element e = trees.getElement(p);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   168
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   169
            String text = p.getLeaf().toString().replaceAll("\\s+", " ").trim();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   170
            int MAXLEN = 40;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   171
            if (text.length() > MAXLEN)
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   172
                text = text.substring(0, MAXLEN - 3) + "...";
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   173
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   174
            System.err.println(String.format("%3d: %-" + MAXLEN + "s -- %s",
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   175
                    count, text,
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   176
                    (e == null ? "null" : e.getKind() + " " + e)));
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   177
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   178
            Messager m = processingEnv.getMessager();
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   179
            if (e == null) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   180
                m.printMessage(Diagnostic.Kind.ERROR, "Null element found for " + text);
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   181
                return 0;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   182
            }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   183
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   184
            if (last && !e.getSimpleName().contentEquals("last")) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   185
                m.printMessage(Diagnostic.Kind.ERROR, "Unexpected name in last test: "
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   186
                        + e.getSimpleName() + ", expected: last");
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   187
            }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   188
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   189
            return 1;
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   190
        }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   191
    }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   192
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   193
    // following are all fodder for the test
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   194
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   195
    class MemberClass {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   196
        class NestedMemberClass { }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   197
    }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   198
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   199
    {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   200
        class InnerClassInInit { }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   201
        Object o = new Object() { };
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   202
    }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   203
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   204
    TestGetElement(TestGetElement unused) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   205
        class InnerClassInConstr { }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   206
        Object o = new Object() { };
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   207
    }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   208
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   209
    void m() {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   210
        class InnerClassInMethod { }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   211
        Object o = new Object() { };
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   212
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   213
        class C {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   214
            class MemberClass {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   215
                class NestedMemberClass { }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   216
            }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   217
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   218
            {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   219
                class InnerClassInInit { }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   220
                Object o = new Object() { };
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   221
            }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   222
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   223
            C(Object unused) {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   224
                class InnerClassInConstr { }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   225
                Object o = new Object() { };
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   226
            }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   227
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   228
            void m() {
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   229
                class InnerClassInMethod { }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   230
                Object o = new Object() { };
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   231
            }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   232
        }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   233
    }
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   234
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   235
    int last; // this name is verified by the test to make sure that all decls are checked
f745e683da2c 6930507: Symbols for anonymous and local classes made too late for use by java tree API
jjg
parents:
diff changeset
   236
}