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]+", " ");