test/tools/javac/tree/TreePosTest.java

changeset 1521
71f35e4b93a5
parent 1280
5c0b3faeb0b0
child 2525
2eb010b6cb22
     1.1 --- a/test/tools/javac/tree/TreePosTest.java	Wed Jan 23 20:57:40 2013 +0000
     1.2 +++ b/test/tools/javac/tree/TreePosTest.java	Wed Jan 23 13:27:24 2013 -0800
     1.3 @@ -1,5 +1,5 @@
     1.4  /*
     1.5 - * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
     1.6 + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
     1.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8   *
     1.9   * This code is free software; you can redistribute it and/or modify it
    1.10 @@ -75,6 +75,7 @@
    1.11  import com.sun.tools.javac.code.Flags;
    1.12  import com.sun.tools.javac.tree.EndPosTable;
    1.13  import com.sun.tools.javac.tree.JCTree;
    1.14 +import com.sun.tools.javac.tree.JCTree.JCAnnotatedType;
    1.15  import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
    1.16  import com.sun.tools.javac.tree.JCTree.JCNewClass;
    1.17  import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
    1.18 @@ -100,7 +101,8 @@
    1.19   * @test
    1.20   * @bug 6919889
    1.21   * @summary assorted position errors in compiler syntax trees
    1.22 - * @run main TreePosTest -q -r -ef ./tools/javac/typeAnnotations -ef ./tools/javap/typeAnnotations -et ANNOTATED_TYPE .
    1.23 + * OLD: -q -r -ef ./tools/javac/typeAnnotations -ef ./tools/javap/typeAnnotations -et ANNOTATED_TYPE .
    1.24 + * @run main TreePosTest -q -r .
    1.25   */
    1.26  public class TreePosTest {
    1.27      /**
    1.28 @@ -367,15 +369,24 @@
    1.29                      //    e.g.    int[][] a = new int[2][];
    1.30                      check("encl.start <= start", encl, self, encl.start <= self.start);
    1.31                      check("start <= pos", encl, self, self.start <= self.pos);
    1.32 -                    if (!(self.tag == TYPEARRAY
    1.33 +                    if (!( (self.tag == TYPEARRAY ||
    1.34 +                            isAnnotatedArray(self.tree))
    1.35                              && (encl.tag == VARDEF ||
    1.36                                  encl.tag == METHODDEF ||
    1.37 -                                encl.tag == TYPEARRAY))) {
    1.38 +                                encl.tag == TYPEARRAY ||
    1.39 +                                isAnnotatedArray(encl.tree))
    1.40 +                           ||
    1.41 +                            encl.tag == ANNOTATED_TYPE && self.tag == SELECT
    1.42 +                         )) {
    1.43                          check("encl.pos <= start || end <= encl.pos",
    1.44                                  encl, self, encl.pos <= self.start || self.end <= encl.pos);
    1.45                      }
    1.46                      check("pos <= end", encl, self, self.pos <= self.end);
    1.47 -                    if (!(self.tag == TYPEARRAY && encl.tag == TYPEARRAY)) {
    1.48 +                    if (!( (self.tag == TYPEARRAY || isAnnotatedArray(self.tree)) &&
    1.49 +                            (encl.tag == TYPEARRAY || isAnnotatedArray(encl.tree))
    1.50 +                           ||
    1.51 +                            encl.tag == MODIFIERS && self.tag == ANNOTATION
    1.52 +                         ) ) {
    1.53                          check("end <= encl.end", encl, self, self.end <= encl.end);
    1.54                      }
    1.55                  }
    1.56 @@ -387,6 +398,11 @@
    1.57              encl = prevEncl;
    1.58          }
    1.59  
    1.60 +        private boolean isAnnotatedArray(JCTree tree) {
    1.61 +            return tree.hasTag(ANNOTATED_TYPE) &&
    1.62 +                            ((JCAnnotatedType)tree).underlyingType.hasTag(TYPEARRAY);
    1.63 +        }
    1.64 +
    1.65          @Override
    1.66          public void visitVarDef(JCVariableDecl tree) {
    1.67              // enum member declarations are desugared in the parser and have
    1.68 @@ -427,7 +443,8 @@
    1.69                      viewer.addEntry(sourcefile, label, encl, self);
    1.70                  }
    1.71  
    1.72 -                String s = self.tree.toString();
    1.73 +                String s = "encl: " + encl.tree.toString() +
    1.74 +                        "  this: " + self.tree.toString();
    1.75                  String msg = sourcefile.getName() + ": " + label + ": " +
    1.76                          "encl:" + encl + " this:" + self + "\n" +
    1.77                          s.substring(0, Math.min(80, s.length())).replaceAll("[\r\n]+", " ");

mercurial