Wed, 14 Apr 2010 12:23:29 +0100
6939618: Revert 'simple' diamond implementation
Summary: backout changeset for 6840638
Reviewed-by: jjg
1 /*
2 * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
24 /*
25 * @test
26 * @bug 6380016
27 * @summary Test that the constraints guaranteed by the Filer and maintained
28 * @author Joseph D. Darcy
29 * @build TestNames
30 * @compile -processor TestNames -proc:only TestNames.java
31 */
33 import java.util.Set;
34 import javax.annotation.processing.*;
35 import javax.lang.model.SourceVersion;
36 import static javax.lang.model.SourceVersion.*;
37 import javax.lang.model.element.*;
38 import javax.lang.model.util.*;
39 import static javax.lang.model.util.ElementFilter.*;
40 import static javax.tools.Diagnostic.Kind.*;
41 import static javax.tools.StandardLocation.*;
43 import java.io.*;
45 /**
46 * Basic tests of semantics of javax.lang.model.element.Name
47 */
48 @SupportedAnnotationTypes("*")
49 public class TestNames extends AbstractProcessor {
50 private int round = 0;
51 private Filer filer;
52 private Elements eltUtils;
54 String stringStringName = "java.lang.String";
55 Name stringName = null;
57 public boolean process(Set<? extends TypeElement> annotations,
58 RoundEnvironment roundEnv) {
59 round++;
60 if (!roundEnv.processingOver()) {
61 boolean failed = false;
63 switch(round) {
64 case 1:
66 TypeElement stringMirror = eltUtils.getTypeElement(stringStringName);
67 stringName = stringMirror.getQualifiedName();
68 Name stringPseudoName = Pseudonym.getName(stringName.toString());
71 if (stringName.equals(stringPseudoName))
72 failed = true;
73 if (!stringName.contentEquals(stringStringName))
74 failed = true;
75 if (!stringName.contentEquals(stringPseudoName))
76 failed = true;
79 try {
80 // Force another round with a new context
81 PrintWriter pw = new PrintWriter(filer.createSourceFile("Foo").openWriter());
82 pw.println("public class Foo {}");
83 pw.close();
84 } catch (IOException ioe) {
85 throw new RuntimeException();
86 }
87 break;
89 case 2:
90 Name stringStringAsName = eltUtils.getName(stringStringName);
91 TypeElement stringMirror2 = eltUtils.getTypeElement(stringStringName);
92 Name stringName2 = stringMirror2.getQualifiedName();
94 if (stringStringAsName != stringName ||
95 stringName != stringName2)
96 failed = true;
97 break;
99 default:
100 throw new RuntimeException("Unexpected round " + round);
101 }
103 if (failed)
104 throw new RuntimeException("Invalid name equality checks.");
105 }
106 return true;
107 }
109 public SourceVersion getSupportedSourceVersion() {
110 return SourceVersion.latest();
111 }
113 public void init(ProcessingEnvironment processingEnv) {
114 super.init(processingEnv);
115 filer = processingEnv.getFiler();
116 eltUtils = processingEnv.getElementUtils();
117 }
119 private static class Pseudonym implements Name {
120 private String name;
122 private Pseudonym(String name) {
123 this.name = name;
124 }
126 public static Pseudonym getName(String name) {
127 return new Pseudonym(name);
128 }
130 public boolean contentEquals(CharSequence cs) {
131 return name.contentEquals(cs);
132 }
134 public char charAt(int index) {
135 return name.charAt(index);
136 }
138 public int length() {
139 return name.length();
140 }
142 public CharSequence subSequence(int start, int end) {
143 return name.subSequence(start, end);
144 }
146 public String toString() {
147 return name;
148 }
149 }
150 }