Lines 1-7
Link Here
|
1 |
/* |
1 |
/* |
2 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
2 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
3 |
* |
3 |
* |
4 |
* Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved. |
4 |
* Copyright 1997-2013 Oracle and/or its affiliates. All rights reserved. |
5 |
* |
5 |
* |
6 |
* Oracle and Java are registered trademarks of Oracle and/or its affiliates. |
6 |
* Oracle and Java are registered trademarks of Oracle and/or its affiliates. |
7 |
* Other names may be trademarks of their respective owners. |
7 |
* Other names may be trademarks of their respective owners. |
Lines 26-48
Link Here
|
26 |
* |
26 |
* |
27 |
* Contributor(s): |
27 |
* Contributor(s): |
28 |
* |
28 |
* |
29 |
* Portions Copyrighted 2007 Sun Microsystems, Inc. |
29 |
* Portions Copyrighted 2007-2013 Sun Microsystems, Inc. |
30 |
*/ |
30 |
*/ |
31 |
|
31 |
|
32 |
package org.netbeans.api.java.source; |
32 |
package org.netbeans.api.java.source; |
33 |
import com.sun.source.tree.AnnotationTree; |
|
|
34 |
import com.sun.source.tree.MethodTree; |
35 |
import com.sun.source.util.TreePath; |
36 |
import java.io.File; |
33 |
import java.io.File; |
37 |
import java.io.IOException; |
34 |
import java.io.IOException; |
38 |
import java.nio.charset.Charset; |
|
|
39 |
import java.util.List; |
40 |
import javax.lang.model.element.Element; |
35 |
import javax.lang.model.element.Element; |
41 |
import javax.lang.model.element.TypeElement; |
36 |
import javax.lang.model.element.ElementKind; |
42 |
import javax.lang.model.type.DeclaredType; |
37 |
import javax.lang.model.element.ExecutableElement; |
43 |
import javax.lang.model.type.TypeMirror; |
38 |
import javax.lang.model.type.TypeKind; |
44 |
import org.netbeans.junit.NbTestCase; |
39 |
import org.netbeans.junit.NbTestCase; |
45 |
import org.netbeans.spi.queries.FileEncodingQueryImplementation; |
|
|
46 |
import org.openide.filesystems.FileObject; |
40 |
import org.openide.filesystems.FileObject; |
47 |
import org.openide.filesystems.FileUtil; |
41 |
import org.openide.filesystems.FileUtil; |
48 |
|
42 |
|
Lines 50-72
Link Here
|
50 |
* |
44 |
* |
51 |
* @author Jan Lahoda |
45 |
* @author Jan Lahoda |
52 |
*/ |
46 |
*/ |
53 |
public class ElementsTest extends NbTestCase { |
47 |
public class ElementUtilitiesTest extends NbTestCase { |
54 |
|
48 |
|
55 |
public ElementsTest(String name) { |
49 |
public ElementUtilitiesTest(String name) { |
56 |
super(name); |
50 |
super(name); |
57 |
} |
51 |
} |
58 |
|
52 |
|
59 |
protected void setUp() throws Exception { |
53 |
protected void setUp() throws Exception { |
60 |
clearWorkDir(); |
54 |
clearWorkDir(); |
61 |
SourceUtilsTestUtil.prepareTest(new String[0], new Object[] {new FileEncodingQueryImplementation() { |
55 |
SourceUtilsTestUtil.prepareTest(new String[0], new Object[0]); |
62 |
@Override |
|
|
63 |
public Charset getEncoding(FileObject file) { |
64 |
if (file.equals(testFO)) |
65 |
return Charset.forName("UTF-8"); |
66 |
else |
67 |
return null; |
68 |
} |
69 |
}}); |
70 |
} |
56 |
} |
71 |
|
57 |
|
72 |
private FileObject sourceRoot; |
58 |
private FileObject sourceRoot; |
Lines 91-153
Link Here
|
91 |
prepareTest(); |
77 |
prepareTest(); |
92 |
|
78 |
|
93 |
TestUtilities.copyStringToFile(FileUtil.toFile(testFO), |
79 |
TestUtilities.copyStringToFile(FileUtil.toFile(testFO), |
94 |
"public class Vecernicek {" + |
80 |
"public class Test {" + |
95 |
"}"); |
81 |
"}"); |
96 |
JavaSource javaSource = JavaSource.forFileObject(testFO); |
82 |
JavaSource javaSource = JavaSource.forFileObject(testFO); |
97 |
javaSource.runUserActionTask(new Task<CompilationController>() { |
83 |
javaSource.runUserActionTask(new Task<CompilationController>() { |
98 |
public void run(CompilationController controller) throws IOException { |
84 |
public void run(CompilationController controller) throws IOException { |
99 |
controller.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED); |
85 |
controller.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED); |
100 |
TypeElement typeElement = controller.getElements().getTypeElement("Vecernicek"); |
86 |
|
101 |
assertNotNull(typeElement); |
87 |
{ |
102 |
} |
88 |
Element wait = controller.getElementUtilities().findElement("java.lang.Object.wait(long)"); |
103 |
}, true); |
89 |
assertNotNull(wait); |
104 |
|
90 |
assertEquals(ElementKind.METHOD, wait.getKind()); |
105 |
TestUtilities.copyStringToFile(FileUtil.toFile(testFO), |
91 |
ExecutableElement waitMethod = (ExecutableElement) wait; |
106 |
"public class Večerníček {" + |
92 |
assertEquals("wait", waitMethod.getSimpleName().toString()); |
107 |
"}"); |
93 |
assertEquals(1, waitMethod.getParameters().size()); |
108 |
testFO.refresh(); |
94 |
assertEquals(TypeKind.LONG, waitMethod.getParameters().get(0).asType().getKind()); |
109 |
javaSource = JavaSource.forFileObject(testFO); |
95 |
assertEquals(controller.getElements().getTypeElement("java.lang.Object"), waitMethod.getEnclosingElement()); |
110 |
javaSource.runUserActionTask(new Task<CompilationController>() { |
96 |
} |
111 |
public void run(CompilationController controller) throws IOException { |
97 |
|
112 |
controller.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED); |
98 |
{ |
113 |
TypeElement typeElement = controller.getElements().getTypeElement("Večerníček"); |
99 |
Element arrayListInit = controller.getElementUtilities().findElement("java.util.ArrayList.ArrayList(java.util.Collection)"); |
114 |
assertNotNull(typeElement); |
100 |
assertNotNull(arrayListInit); |
|
|
101 |
assertEquals(ElementKind.CONSTRUCTOR, arrayListInit.getKind()); |
102 |
ExecutableElement arrayListInitMethod = (ExecutableElement) arrayListInit; |
103 |
assertEquals("<init>", arrayListInitMethod.getSimpleName().toString()); |
104 |
assertEquals(1, arrayListInitMethod.getParameters().size()); |
105 |
assertEquals("java.util.Collection", controller.getTypes().erasure(arrayListInitMethod.getParameters().get(0).asType()).toString()); |
106 |
assertEquals(controller.getElements().getTypeElement("java.util.ArrayList"), arrayListInitMethod.getEnclosingElement()); |
107 |
} |
108 |
|
109 |
{ |
110 |
Element arrayListAdd = controller.getElementUtilities().findElement("java.util.ArrayList.add(int, Object)"); |
111 |
assertNotNull(arrayListAdd); |
112 |
assertEquals(ElementKind.METHOD, arrayListAdd.getKind()); |
113 |
ExecutableElement arrayListAddMethod = (ExecutableElement) arrayListAdd; |
114 |
assertEquals("add", arrayListAddMethod.getSimpleName().toString()); |
115 |
assertEquals(2, arrayListAddMethod.getParameters().size()); |
116 |
assertEquals(TypeKind.INT, arrayListAddMethod.getParameters().get(0).asType().getKind()); |
117 |
assertEquals("java.lang.Object", controller.getTypes().erasure(arrayListAddMethod.getParameters().get(1).asType()).toString()); |
118 |
assertEquals(controller.getElements().getTypeElement("java.util.ArrayList"), arrayListAddMethod.getEnclosingElement()); |
119 |
} |
120 |
|
121 |
{ |
122 |
Element arraysAsList = controller.getElementUtilities().findElement("java.util.Arrays.asList(Object...)"); |
123 |
assertNotNull(arraysAsList); |
124 |
assertEquals(ElementKind.METHOD, arraysAsList.getKind()); |
125 |
ExecutableElement arraysAsListMethod = (ExecutableElement) arraysAsList; |
126 |
assertEquals("asList", arraysAsListMethod.getSimpleName().toString()); |
127 |
assertEquals(1, arraysAsListMethod.getParameters().size()); |
128 |
assertEquals(TypeKind.ARRAY, arraysAsListMethod.getParameters().get(0).asType().getKind()); |
129 |
assertEquals(controller.getElements().getTypeElement("java.util.Arrays"), arraysAsListMethod.getEnclosingElement()); |
130 |
} |
131 |
|
132 |
{ |
133 |
Element hashCode = controller.getElementUtilities().findElement("java.lang.Object.hashCode()"); |
134 |
assertNotNull(hashCode); |
135 |
assertEquals(ElementKind.METHOD, hashCode.getKind()); |
136 |
ExecutableElement hashCodeMethod = (ExecutableElement) hashCode; |
137 |
assertEquals("hashCode", hashCodeMethod.getSimpleName().toString()); |
138 |
assertEquals(0, hashCodeMethod.getParameters().size()); |
139 |
assertEquals(controller.getElements().getTypeElement("java.lang.Object"), hashCodeMethod.getEnclosingElement()); |
140 |
} |
141 |
|
142 |
{ |
143 |
Element bigIntegerOne = controller.getElementUtilities().findElement("java.math.BigInteger.ONE"); |
144 |
assertNotNull(bigIntegerOne); |
145 |
assertEquals(ElementKind.FIELD, bigIntegerOne.getKind()); |
146 |
assertEquals("ONE", bigIntegerOne.getSimpleName().toString()); |
147 |
assertEquals(controller.getElements().getTypeElement("java.math.BigInteger"), bigIntegerOne.getEnclosingElement()); |
148 |
} |
149 |
|
150 |
{ |
151 |
Element bigInteger = controller.getElementUtilities().findElement("java.math.BigInteger"); |
152 |
assertEquals(controller.getElements().getTypeElement("java.math.BigInteger"), bigInteger); |
153 |
} |
115 |
} |
154 |
} |
116 |
}, true); |
155 |
}, true); |
117 |
} |
156 |
} |
118 |
|
157 |
|
119 |
public void test175535() throws Exception { |
|
|
120 |
prepareTest(); |
121 |
FileObject otherFO = FileUtil.createData(sourceRoot, "test/A.java"); |
122 |
TestUtilities.copyStringToFile(FileUtil.toFile(otherFO), |
123 |
"package test;" + |
124 |
"public class A implements Runnable {" + |
125 |
" @Override" + |
126 |
" public void run() {}" + |
127 |
"}"); |
128 |
TestUtilities.copyStringToFile(FileUtil.toFile(testFO), |
129 |
"public class Test {" + |
130 |
"}"); |
131 |
SourceUtilsTestUtil.compileRecursively(sourceRoot); |
132 |
JavaSource javaSource = JavaSource.forFileObject(testFO); |
133 |
javaSource.runUserActionTask(new Task<CompilationController>() { |
134 |
public void run(CompilationController controller) throws IOException { |
135 |
controller.toPhase(JavaSource.Phase.RESOLVED); |
136 |
TypeElement typeElement = controller.getElements().getTypeElement("test.A"); |
137 |
assertNotNull(typeElement); |
138 |
Element el = typeElement.getEnclosedElements().get(1); |
139 |
assertNotNull(el); |
140 |
assertEquals("run", el.getSimpleName().toString()); |
141 |
TreePath mpath = controller.getTrees().getPath(el); |
142 |
MethodTree mtree = (MethodTree) mpath.getLeaf(); |
143 |
assertNotNull(mtree); |
144 |
List<? extends AnnotationTree> annotations = mtree.getModifiers().getAnnotations(); |
145 |
TypeMirror annotation = controller.getTrees().getTypeMirror(new TreePath(mpath, annotations.get(0))); |
146 |
assertNotNull(annotation); |
147 |
Element e = controller.getTrees().getElement(new TreePath(mpath, annotations.get(0))); |
148 |
assertNotNull(e); |
149 |
assertEquals(((DeclaredType)annotation).asElement(), e); |
150 |
} |
151 |
}, true); |
152 |
} |
153 |
} |
158 |
} |