test/tools/javac/T6406771.java

Wed, 27 Apr 2016 01:34:52 +0800

author
aoqi
date
Wed, 27 Apr 2016 01:34:52 +0800
changeset 0
959103a6100f
child 2525
2eb010b6cb22
permissions
-rw-r--r--

Initial load
http://hg.openjdk.java.net/jdk8u/jdk8u/langtools/
changeset: 2573:53ca196be1ae
tag: jdk8u25-b17

     1 /*
     2  * @test  /nodynamiccopyright/
     3  * @bug 6406771
     4  * @summary CompilationUnitTree needs access to a line map
     5  */
     7 // WARNING: White-space and layout is important in this file, especially tab characters.
     9 import java.io.*;
    10 import java.util.*;
    11 import javax.annotation.processing.*;
    12 import javax.lang.model.*;
    13 import javax.lang.model.element.*;
    14 import javax.tools.*;
    15 import com.sun.tools.javac.api.*;
    16 import com.sun.source.tree.*;
    17 import com.sun.source.util.*;
    18 import com.sun.tools.javac.tree.JCTree;
    21 @SupportedAnnotationTypes("*")
    22 public class T6406771 extends AbstractProcessor {
    23     String[] tests = {
    24         "line:24",
    25         "line:25",
    26         "line:26", "line:26",
    27 //       1         2         3         4         5         6
    28 //3456789012345678901234567890123456789012345678901234567890
    29       "col:7", "col:16", "col:26",                 // this line uses spaces
    30         "col:9",        "col:25",       "col:41",  // this line uses tabs
    31                    "col:20",              "col:43" // this line uses a mixture
    32     };
    34     // White-space after this point does not matter
    36     public static void main(String[] args) {
    37         String self = T6406771.class.getName();
    38         String testSrc = System.getProperty("test.src");
    39         String testClasses = System.getProperty("test.classes");
    41         JavacTool tool = JavacTool.create();
    42         StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null);
    43         JavaFileObject f = fm.getJavaFileObjectsFromFiles(Arrays.asList(new File(testSrc, self+".java"))).iterator().next();
    45         List<String> opts = Arrays.asList("-d", ".", "-processorpath", testClasses, "-processor", self, "-proc:only");
    47         JavacTask task = tool.getTask(null, fm, null, opts, null, Arrays.asList(f));
    49         if (!task.call())
    50             throw new AssertionError("failed");
    51     }
    53     public boolean process(Set<? extends TypeElement> elems, RoundEnvironment rEnv) {
    54         final String LINE = "line" + ':';   // avoid matching this string
    55         final String COLUMN  = "col" + ':';
    56         final Messager messager = processingEnv.getMessager();
    57         final Trees trees = Trees.instance(processingEnv);
    59         TreeScanner<Void,LineMap> s = new  TreeScanner<Void,LineMap>() {
    60             public Void visitLiteral(LiteralTree tree, LineMap lineMap) {
    61                 if (tree.getKind() == Tree.Kind.STRING_LITERAL) {
    62                     String s = (String) tree.getValue();
    63                     int pos = ((JCTree) tree).pos; // can't get through public api, bug 6412669 filed
    64                     String prefix;
    65                     long found;
    66                     if (s.startsWith(LINE)) {
    67                         prefix = LINE;
    68                         found = lineMap.getLineNumber(pos);
    69                     }
    70                     else if (s.startsWith(COLUMN)) {
    71                         prefix = COLUMN;
    72                         found = lineMap.getColumnNumber(pos);
    73                     }
    74                     else
    75                         return null;
    76                     int expect = Integer.parseInt(s.substring(prefix.length()));
    77                     if (expect != found) {
    78                         messager.printMessage(Diagnostic.Kind.ERROR,
    79                                               "Error: " + prefix + " pos=" + pos
    80                                               + " expect=" + expect + " found=" + found);
    81                     }
    82                 }
    83                 return null;
    84             }
    85         };
    87         for (Element e: rEnv.getRootElements()) {
    88             System.err.println(e);
    89             Tree t = trees.getTree(e);
    90             TreePath p = trees.getPath(e);
    91             s.scan(p.getLeaf(), p.getCompilationUnit().getLineMap());
    93         }
    95         return true;
    96     }
    98     @Override
    99     public SourceVersion getSupportedSourceVersion() {
   100         return SourceVersion.latest();
   101     }
   102 }

mercurial