diff --git a/java/java-tests/testData/psi/cls/1/TestClass.class b/java/java-tests/testData/psi/cls/repo/1_TestClass.class similarity index 100% rename from java/java-tests/testData/psi/cls/1/TestClass.class rename to java/java-tests/testData/psi/cls/repo/1_TestClass.class diff --git a/java/java-tests/testData/psi/cls/2/TestClass.class b/java/java-tests/testData/psi/cls/repo/2_TestClass.class similarity index 100% rename from java/java-tests/testData/psi/cls/2/TestClass.class rename to java/java-tests/testData/psi/cls/repo/2_TestClass.class diff --git a/java/java-tests/testData/psi/cls/tree/KeywordAnnotatedClass.class b/java/java-tests/testData/psi/cls/repo/KeywordAnnotatedClass.class similarity index 100% rename from java/java-tests/testData/psi/cls/tree/KeywordAnnotatedClass.class rename to java/java-tests/testData/psi/cls/repo/KeywordAnnotatedClass.class diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/Annotated.class b/java/java-tests/testData/psi/cls/repo/pack/Annotated.class similarity index 100% rename from java/java-tests/testData/psi/repositoryUse/cls/pack/Annotated.class rename to java/java-tests/testData/psi/cls/repo/pack/Annotated.class diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/Annotation.class b/java/java-tests/testData/psi/cls/repo/pack/Annotation.class similarity index 100% rename from java/java-tests/testData/psi/repositoryUse/cls/pack/Annotation.class rename to java/java-tests/testData/psi/cls/repo/pack/Annotation.class diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/Annotation2.class b/java/java-tests/testData/psi/cls/repo/pack/Annotation2.class similarity index 100% rename from java/java-tests/testData/psi/repositoryUse/cls/pack/Annotation2.class rename to java/java-tests/testData/psi/cls/repo/pack/Annotation2.class diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/Modifiers.class b/java/java-tests/testData/psi/cls/repo/pack/Modifiers.class similarity index 100% rename from java/java-tests/testData/psi/repositoryUse/cls/pack/Modifiers.class rename to java/java-tests/testData/psi/cls/repo/pack/Modifiers.class diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/MyClass$Inner.class b/java/java-tests/testData/psi/cls/repo/pack/MyClass$Inner.class similarity index 100% rename from java/java-tests/testData/psi/repositoryUse/cls/pack/MyClass$Inner.class rename to java/java-tests/testData/psi/cls/repo/pack/MyClass$Inner.class diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/MyClass.class b/java/java-tests/testData/psi/cls/repo/pack/MyClass.class similarity index 100% rename from java/java-tests/testData/psi/repositoryUse/cls/pack/MyClass.class rename to java/java-tests/testData/psi/cls/repo/pack/MyClass.class diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/MyEnum.class b/java/java-tests/testData/psi/cls/repo/pack/MyEnum.class similarity index 100% rename from java/java-tests/testData/psi/repositoryUse/cls/pack/MyEnum.class rename to java/java-tests/testData/psi/cls/repo/pack/MyEnum.class diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Boolean.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Boolean.class deleted file mode 100644 index 05d27b08b8c3..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Boolean.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Byte.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Byte.class deleted file mode 100644 index 2a30d250bbbc..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Byte.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character$Subset.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character$Subset.class deleted file mode 100644 index b4c03105cf6f..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character$Subset.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character$UnicodeBlock.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character$UnicodeBlock.class deleted file mode 100644 index 7de10cebeed5..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character$UnicodeBlock.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character.class deleted file mode 100644 index 155067c1deec..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Character.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Class.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Class.class deleted file mode 100644 index b5d94add03bf..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Class.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ClassLoader.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ClassLoader.class deleted file mode 100644 index a063243893e6..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ClassLoader.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Comparable.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Comparable.class deleted file mode 100644 index 18539eceb4c0..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Comparable.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Double.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Double.class deleted file mode 100644 index 9e1ecbed60bb..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Double.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Enum.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Enum.class deleted file mode 100644 index cc85236ba2a7..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Enum.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Float.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Float.class deleted file mode 100644 index 3819020cd91c..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Float.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Integer.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Integer.class deleted file mode 100644 index 081442cbd07c..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Integer.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Iterable.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Iterable.class deleted file mode 100644 index 5fa7be44d173..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Iterable.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Long.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Long.class deleted file mode 100644 index e3cfd9992204..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Long.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Object.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Object.class deleted file mode 100644 index ef0091628dfc..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Object.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Short.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Short.class deleted file mode 100644 index afb2d9db8daf..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Short.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/SimpleIterator.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/SimpleIterator.class deleted file mode 100644 index ca7ad3d7d7f3..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/SimpleIterator.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/String.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/String.class deleted file mode 100644 index 08bd0d3bc20b..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/String.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ThreadLocal.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ThreadLocal.class deleted file mode 100644 index 9ec8fc425035..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ThreadLocal.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Void.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Void.class deleted file mode 100644 index 389a83e75c12..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/Void.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/PhantomReference.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/PhantomReference.class deleted file mode 100644 index 33abd12896e1..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/PhantomReference.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/Reference.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/Reference.class deleted file mode 100644 index 97ff09797f5f..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/Reference.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/ReferenceQueue.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/ReferenceQueue.class deleted file mode 100644 index 03e42b9f312e..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/ReferenceQueue.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/SoftReference.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/SoftReference.class deleted file mode 100644 index 087ec244449d..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/SoftReference.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/WeakReference.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/WeakReference.class deleted file mode 100644 index dab0fe9804a0..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/ref/WeakReference.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/AccessibleObject.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/AccessibleObject.class deleted file mode 100644 index 47de3236c80e..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/AccessibleObject.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Array.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Array.class deleted file mode 100644 index d24ca714342a..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Array.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Constructor.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Constructor.class deleted file mode 100644 index 0e661eb28721..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Constructor.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Field.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Field.class deleted file mode 100644 index 34e96ce81242..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Field.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/InvocationHandler.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/InvocationHandler.class deleted file mode 100644 index 4627691def0f..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/InvocationHandler.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/InvocationTargetException.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/InvocationTargetException.class deleted file mode 100644 index a0cd1bd34c97..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/InvocationTargetException.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Member.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Member.class deleted file mode 100644 index b249a392fa0d..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Member.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Method.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Method.class deleted file mode 100644 index 23f464d74876..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Method.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Modifier.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Modifier.class deleted file mode 100644 index 44e0fa086959..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Modifier.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Proxy.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Proxy.class deleted file mode 100644 index 171a6696401a..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/Proxy.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/ReflectPermission.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/ReflectPermission.class deleted file mode 100644 index 478d0fe19eab..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/ReflectPermission.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/UndeclaredThrowableException.class b/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/UndeclaredThrowableException.class deleted file mode 100644 index 6b394d304695..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/lang/reflect/UndeclaredThrowableException.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/text/MessageFormat$Field.class b/java/java-tests/testData/psi/repositoryUse/cls/java/text/MessageFormat$Field.class deleted file mode 100644 index fa8c4f209a4c..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/text/MessageFormat$Field.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/text/MessageFormat.class b/java/java-tests/testData/psi/repositoryUse/cls/java/text/MessageFormat.class deleted file mode 100644 index c331e6dc74cb..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/text/MessageFormat.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractCollection.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractCollection.class deleted file mode 100644 index 65329f148762..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractCollection.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractList.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractList.class deleted file mode 100644 index efe5b3855477..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractList.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractMap.class deleted file mode 100644 index ac508abfbeca..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractMap.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractSequentialList.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractSequentialList.class deleted file mode 100644 index aae94b142302..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractSequentialList.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractSet.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractSet.class deleted file mode 100644 index 734959c8301a..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/AbstractSet.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/ArrayList.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/ArrayList.class deleted file mode 100644 index 16fd89d1efa9..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/ArrayList.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Arrays.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Arrays.class deleted file mode 100644 index c89a7a36f146..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Arrays.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Collection.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Collection.class deleted file mode 100644 index 476562415a31..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Collection.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Collections.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Collections.class deleted file mode 100644 index 462b3547feff..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Collections.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Comparator.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Comparator.class deleted file mode 100644 index 9f03b7b8febd..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Comparator.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Dictionary.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Dictionary.class deleted file mode 100644 index 2defd43ecff7..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Dictionary.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Enumeration.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Enumeration.class deleted file mode 100644 index c85438bf7d81..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Enumeration.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/HashMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/HashMap.class deleted file mode 100644 index aed7f3592774..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/HashMap.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/HashSet.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/HashSet.class deleted file mode 100644 index 679c44b565a2..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/HashSet.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Hashtable.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Hashtable.class deleted file mode 100644 index b3ac022dfc68..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Hashtable.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/IdentityHashMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/IdentityHashMap.class deleted file mode 100644 index cc3e4d073944..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/IdentityHashMap.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Iterator.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Iterator.class deleted file mode 100644 index fae0b967366a..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Iterator.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedHashMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedHashMap.class deleted file mode 100644 index 27d17d80c8c3..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedHashMap.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedHashSet.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedHashSet.class deleted file mode 100644 index 6aaaaf1fb676..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedHashSet.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedList.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedList.class deleted file mode 100644 index 39f1235c5f7d..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/LinkedList.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/List.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/List.class deleted file mode 100644 index ca92bf570f65..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/List.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/ListIterator.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/ListIterator.class deleted file mode 100644 index e916842c1c8a..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/ListIterator.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Map$Entry.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Map$Entry.class deleted file mode 100644 index d91b3104a064..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Map$Entry.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Map.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Map.class deleted file mode 100644 index 49c2bfc064ac..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Map.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Set.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Set.class deleted file mode 100644 index f7bbb046a204..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Set.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/SortedMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/SortedMap.class deleted file mode 100644 index e673c68a3b65..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/SortedMap.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/SortedSet.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/SortedSet.class deleted file mode 100644 index bdde4bc497cc..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/SortedSet.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Stack.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Stack.class deleted file mode 100644 index 16c1fbe6a689..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Stack.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/TreeMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/TreeMap.class deleted file mode 100644 index 826beb3d78e6..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/TreeMap.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/TreeSet.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/TreeSet.class deleted file mode 100644 index f64d855bb9ec..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/TreeSet.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Vector.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/Vector.class deleted file mode 100644 index d41286f2bb71..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/Vector.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/WeakHashMap.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/WeakHashMap.class deleted file mode 100644 index 85846f8f9397..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/WeakHashMap.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/jar/JarFile.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/jar/JarFile.class deleted file mode 100644 index 0309fce1946b..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/jar/JarFile.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/java/util/logging/LogManager.class b/java/java-tests/testData/psi/repositoryUse/cls/java/util/logging/LogManager.class deleted file mode 100644 index 749bc62bb772..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/java/util/logging/LogManager.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/Parametrized.class b/java/java-tests/testData/psi/repositoryUse/cls/pack/Parametrized.class deleted file mode 100644 index 4dfded0f991c..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/pack/Parametrized.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/pack/Variance.class b/java/java-tests/testData/psi/repositoryUse/cls/pack/Variance.class deleted file mode 100644 index 5d3693594f6c..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/pack/Variance.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Annotation2.java b/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Annotation2.java deleted file mode 100644 index fca1dcb367e4..000000000000 --- a/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Annotation2.java +++ /dev/null @@ -1,11 +0,0 @@ -package pack; - -public @interface Annotation2 { - float f1() default Float.NEGATIVE_INFINITY; - float f2() default Float.NaN; - float f3() default Float.POSITIVE_INFINITY; - - double d1() default Double.NEGATIVE_INFINITY; - double d2() default Double.NaN; - double d3() default Double.POSITIVE_INFINITY; -} diff --git a/java/java-tests/testData/psi/repositoryUse/cls/src/pack/MyClass.java b/java/java-tests/testData/psi/repositoryUse/cls/src/pack/MyClass.java deleted file mode 100644 index d116704bb548..000000000000 --- a/java/java-tests/testData/psi/repositoryUse/cls/src/pack/MyClass.java +++ /dev/null @@ -1,23 +0,0 @@ -package pack; - -import java.util.ArrayList; - -public class MyClass extends ArrayList implements Cloneable{ - /** - * @deprecated - */ - static final int field1 = 123; - - Object[] field2; - - void method1(int[] p1, Object p2) throws Exception, java.io.IOException{ - } - - Integer method2()[]{ - return null; - } - - MyClass(){} - - static class Inner{} -} diff --git a/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Parametrized.java b/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Parametrized.java deleted file mode 100644 index 0ac009e09851..000000000000 --- a/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Parametrized.java +++ /dev/null @@ -1,7 +0,0 @@ -package pack; - -/** - * @author dsl - */ -public class Parametrized { -} diff --git a/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Variance.java b/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Variance.java deleted file mode 100644 index 76eaae73273e..000000000000 --- a/java/java-tests/testData/psi/repositoryUse/cls/src/pack/Variance.java +++ /dev/null @@ -1,12 +0,0 @@ -package pack; - -import java.util.List; - -/** - * @author dsl - */ -public class Variance { - public Parametrized method() { return null; } - public ParametrizedmethodWithTypeParameter() { return null; }; - public void removeAll(Variance parameter) {} ; -} diff --git a/java/java-tests/testData/psi/repositoryUse/cls/sun/reflect/LangReflectAccess.class b/java/java-tests/testData/psi/repositoryUse/cls/sun/reflect/LangReflectAccess.class deleted file mode 100644 index f72ea5c4b06b..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/sun/reflect/LangReflectAccess.class and /dev/null differ diff --git a/java/java-tests/testData/psi/repositoryUse/cls/sun/security/util/SecurityConstants.class b/java/java-tests/testData/psi/repositoryUse/cls/sun/security/util/SecurityConstants.class deleted file mode 100644 index 3ded87f8db75..000000000000 Binary files a/java/java-tests/testData/psi/repositoryUse/cls/sun/security/util/SecurityConstants.class and /dev/null differ diff --git a/java/java-tests/testSrc/com/intellij/openapi/roots/impl/ProjectLibrariesTest.java b/java/java-tests/testSrc/com/intellij/openapi/roots/impl/ProjectLibrariesTest.java index bd41a9ccc06d..da25a5af0f0e 100644 --- a/java/java-tests/testSrc/com/intellij/openapi/roots/impl/ProjectLibrariesTest.java +++ b/java/java-tests/testSrc/com/intellij/openapi/roots/impl/ProjectLibrariesTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,93 +24,80 @@ import com.intellij.openapi.roots.ModuleRootModificationUtil; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable; import com.intellij.openapi.roots.libraries.Library; -import com.intellij.openapi.roots.libraries.LibraryTable; import com.intellij.openapi.util.Computable; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.JavaPsiFacade; -import com.intellij.psi.PsiClass; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.testFramework.IdeaTestCase; -import java.io.File; import java.util.Arrays; /** * @author dsl */ public class ProjectLibrariesTest extends IdeaTestCase { - public void test() { - final LibraryTable libraryTable = ProjectLibraryTable.getInstance(myProject); - Library lib = WriteCommandAction.runWriteCommandAction(null, new Computable() { + private VirtualFile myRoot; + private Library myLib; + + @Override + protected void setUp() throws Exception { + super.setUp(); + + myRoot = LocalFileSystem.getInstance().findFileByPath(PathManagerEx.getTestDataPath() + "/psi/cls/repo"); + assertNotNull(myRoot); + + myLib = WriteCommandAction.runWriteCommandAction(null, new Computable() { @Override public Library compute() { - return libraryTable.createLibrary("LIB"); + return ProjectLibraryTable.getInstance(myProject).createLibrary("LIB"); } }); - ModuleRootModificationUtil.addDependency(myModule, lib); - final JavaPsiFacade manager = getJavaFacade(); - assertNull(manager.findClass("pack.MyClass", GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(myModule))); - final File file = new File(PathManagerEx.getTestDataPath() + "/psi/repositoryUse/cls"); - final VirtualFile root = WriteCommandAction.runWriteCommandAction(null, new Computable() { - @Override - public VirtualFile compute() { - return LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file); - } - }); - assertNotNull(root); - final Library.ModifiableModel modifyableModel = lib.getModifiableModel(); - ApplicationManager.getApplication().runWriteAction(new Runnable() { - @Override - public void run() { - modifyableModel.addRoot(root, OrderRootType.CLASSES); - modifyableModel.commit(); - } - }); - final PsiClass aClass = manager.findClass("pack.MyClass", GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(myModule)); - assertNotNull(aClass); + ModuleRootModificationUtil.addDependency(myModule, myLib); } - public void test1() { - final LibraryTable libraryTable = ProjectLibraryTable.getInstance(myProject); - Library lib = WriteCommandAction.runWriteCommandAction(null, new Computable() { - @Override - public Library compute() { - return libraryTable.createLibrary("LIB"); - } - }); - ModuleRootModificationUtil.addDependency(myModule, lib); - final JavaPsiFacade manager = getJavaFacade(); - assertNull(manager.findClass("pack.MyClass", GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(myModule))); + public void test() { + assertNull(getJavaFacade().findClass("pack.MyClass", GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(myModule))); - final ModifiableRootModel rootModel2 = ModuleRootManager.getInstance(myModule).getModifiableModel(); - assertNotNull(rootModel2.findLibraryOrderEntry(lib)); - final File file = new File(PathManagerEx.getTestDataPath() + "/psi/repositoryUse/cls"); - final VirtualFile root = WriteCommandAction.runWriteCommandAction(null, new Computable() { - @Override - public VirtualFile compute() { - return LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file); - } - }); - assertNotNull(root); - final Library.ModifiableModel modifyableModel = lib.getModifiableModel(); + final Library.ModifiableModel model = myLib.getModifiableModel(); ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - modifyableModel.addRoot(root, OrderRootType.CLASSES); - modifyableModel.commit(); + model.addRoot(myRoot, OrderRootType.CLASSES); + model.commit(); } }); - final PsiClass aClass = manager.findClass("pack.MyClass", GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(myModule)); - assertNotNull(aClass); - assertTrue(Arrays.asList(rootModel2.orderEntries().librariesOnly().classes().getRoots()).contains(root)); - ApplicationManager.getApplication().runWriteAction(new Runnable() { - @Override - public void run() { - rootModel2.commit(); - } - }); - final PsiClass aClass1 = manager.findClass("pack.MyClass", GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(myModule)); - assertNotNull(aClass1); + + assertNotNull(getJavaFacade().findClass("pack.MyClass", GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(myModule))); + } + + public void testNestedModelUpdate() { + assertNull(getJavaFacade().findClass("pack.MyClass", GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(myModule))); + + final ModifiableRootModel moduleModel = ModuleRootManager.getInstance(myModule).getModifiableModel(); + try { + assertNotNull(moduleModel.findLibraryOrderEntry(myLib)); + + final Library.ModifiableModel libModel = myLib.getModifiableModel(); + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + libModel.addRoot(myRoot, OrderRootType.CLASSES); + libModel.commit(); + } + }); + + assertNotNull(getJavaFacade().findClass("pack.MyClass", GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(myModule))); + assertTrue(Arrays.asList(moduleModel.orderEntries().librariesOnly().classes().getRoots()).contains(myRoot)); + } + finally { + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + moduleModel.commit(); + } + }); + } + + assertNotNull(getJavaFacade().findClass("pack.MyClass", GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(myModule))); } } diff --git a/java/java-tests/testSrc/com/intellij/psi/ClsBuilderTest.java b/java/java-tests/testSrc/com/intellij/psi/ClsBuilderTest.java index 8cfaeb0646ae..9d152d5be989 100644 --- a/java/java-tests/testSrc/com/intellij/psi/ClsBuilderTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/ClsBuilderTest.java @@ -47,7 +47,7 @@ public class ClsBuilderTest extends LightIdeaTestCase { public void testAnnotatedEnumConstructor() { doTest(); } public void testModifiers() { - String clsFilePath = JavaTestUtil.getJavaTestDataPath() + "/psi/repositoryUse/cls/pack/" + getTestName(false) + ".class"; + String clsFilePath = JavaTestUtil.getJavaTestDataPath() + "/psi/cls/repo/pack/" + getTestName(false) + ".class"; VirtualFile clsFile = LocalFileSystem.getInstance().findFileByPath(clsFilePath); assertNotNull(clsFile); doTest(clsFile, getTestName(false) + ".txt"); diff --git a/java/java-tests/testSrc/com/intellij/psi/ClsPsiTest.java b/java/java-tests/testSrc/com/intellij/psi/ClsPsiTest.java index 2cd4c2c4bd61..be1299c5ca1f 100644 --- a/java/java-tests/testSrc/com/intellij/psi/ClsPsiTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/ClsPsiTest.java @@ -16,24 +16,361 @@ package com.intellij.psi; import com.intellij.openapi.application.ex.PathManagerEx; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.io.IoTestUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.impl.compiled.ClsFileImpl; +import com.intellij.psi.impl.compiled.ClsParameterImpl; +import com.intellij.psi.impl.java.stubs.PsiMethodStub; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.util.PsiUtil; import com.intellij.testFramework.LightIdeaTestCase; +import com.intellij.util.indexing.FileBasedIndex; + +import java.io.File; +import java.io.IOException; public class ClsPsiTest extends LightIdeaTestCase { + private static final String TEST_DATA_PATH = "/psi/cls/repo"; + + private PsiClass myObjectClass; + private GlobalSearchScope myScope; + + @Override + protected void setUp() throws Exception { + super.setUp(); + + myScope = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(getModule()); + myObjectClass = getJavaFacade().findClass(CommonClassNames.JAVA_LANG_OBJECT, myScope); + assertNotNull(myObjectClass); + } + + public void testClassFileUpdate() throws IOException { + File testFile = IoTestUtil.createTestFile("TestClass.class"); + File file1 = new File(PathManagerEx.getTestDataPath() + TEST_DATA_PATH + "/1_TestClass.class"); + FileUtil.copy(file1, testFile); + VirtualFile vFile = LocalFileSystem.getInstance().findFileByIoFile(testFile); + assertNotNull(testFile.getPath(), vFile); + FileBasedIndex.getInstance().requestReindex(vFile); + PsiFile file = PsiManager.getInstance(getProject()).findFile(vFile); + assertNotNull(file); + + PsiClass aClass = ((PsiJavaFile)file).getClasses()[0]; + assertTrue(aClass.isValid()); + assertEquals(2, aClass.getFields().length); + assertEquals("field11", aClass.getFields()[0].getName()); + assertEquals("field12", aClass.getFields()[1].getName()); + assertEquals(2, aClass.getMethods().length); + assertEquals("TestClass", aClass.getMethods()[0].getName()); + assertEquals("method1", aClass.getMethods()[1].getName()); + + File file2 = new File(PathManagerEx.getTestDataPath() + TEST_DATA_PATH + "/2_TestClass.class"); + FileUtil.copy(file2, testFile); + assertTrue(testFile.setLastModified(System.currentTimeMillis() + 5000)); + vFile.refresh(false, false); + + aClass = ((PsiJavaFile)file).getClasses()[0]; + assertTrue(aClass.isValid()); + assertTrue(aClass.isValid()); + assertEquals(1, aClass.getFields().length); + assertEquals("field2", aClass.getFields()[0].getName()); + assertEquals(2, aClass.getMethods().length); + assertEquals("TestClass", aClass.getMethods()[0].getName()); + assertEquals("method2", aClass.getMethods()[1].getName()); + } + + public void testFile() { + PsiJavaFile file = getFile("MyClass"); + assertTrue(file.isValid()); + assertEquals("pack", file.getPackageName()); + assertEquals(1, file.getClasses().length); + } + + public void testClassBasics() { + PsiJavaFile file = getFile("MyClass"); + PsiClass aClass = file.getClasses()[0]; + assertTrue(aClass.isValid()); + + assertEquals(file, aClass.getParent()); + assertEquals(file, aClass.getContainingFile()); + assertEquals("MyClass", aClass.getName()); + assertEquals("pack.MyClass", aClass.getQualifiedName()); + assertFalse(aClass.isInterface()); + assertFalse(aClass.isDeprecated()); + } + + public void testClassMembers() { + PsiClass aClass = getFile("MyClass").getClasses()[0]; + + PsiClass[] inners = aClass.getInnerClasses(); + assertEquals(1, inners.length); + assertEquals(aClass, inners[0].getParent()); + + PsiField[] fields = aClass.getFields(); + assertEquals(2, fields.length); + assertEquals(aClass, fields[0].getParent()); + + PsiMethod[] methods = aClass.getMethods(); + assertEquals(3, methods.length); + assertEquals(aClass, methods[0].getParent()); + + assertNotNull(aClass.findFieldByName("field1", false)); + } + + public void testModifierList() { + PsiClass aClass = getFile("MyClass").getClasses()[0]; + + PsiModifierList modifierList = aClass.getModifierList(); + assertNotNull(modifierList); + assertTrue(modifierList.hasModifierProperty(PsiModifier.PUBLIC)); + assertFalse(modifierList.hasModifierProperty(PsiModifier.STATIC)); + assertEquals(modifierList.getParent(), aClass); + + PsiField field = aClass.getFields()[0]; + modifierList = field.getModifierList(); + assertNotNull(modifierList); + assertTrue(modifierList.hasModifierProperty(PsiModifier.PACKAGE_LOCAL)); + assertEquals(modifierList.getParent(), field); + + PsiMethod method = aClass.getMethods()[0]; + modifierList = method.getModifierList(); + assertNotNull(modifierList); + assertTrue(modifierList.hasModifierProperty(PsiModifier.PACKAGE_LOCAL)); + assertEquals(modifierList.getParent(), method); + } + + public void testField() { + PsiClass aClass = getFile("MyClass").getClasses()[0]; + PsiField field1 = aClass.getFields()[0], field2 = aClass.getFields()[1]; + + assertEquals("field1", field1.getName()); + + PsiType type1 = field1.getType(); + assertEquals(PsiType.INT, type1); + assertEquals("int", type1.getPresentableText()); + assertTrue(type1 instanceof PsiPrimitiveType); + + PsiType type2 = field2.getType(); + assertTrue(type2.equalsToText("java.lang.Object[]")); + assertEquals("Object[]", type2.getPresentableText()); + assertFalse(type2 instanceof PsiPrimitiveType); + assertTrue(type2 instanceof PsiArrayType); + + PsiType componentType = ((PsiArrayType)type2).getComponentType(); + assertTrue(componentType.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)); + assertEquals(CommonClassNames.JAVA_LANG_OBJECT_SHORT, componentType.getPresentableText()); + assertFalse(componentType instanceof PsiPrimitiveType); + assertFalse(componentType instanceof PsiArrayType); + + PsiLiteralExpression initializer = (PsiLiteralExpression)field1.getInitializer(); + assertNotNull(initializer); + assertEquals("123", initializer.getText()); + assertEquals(123, initializer.getValue()); + assertEquals(PsiType.INT, initializer.getType()); + + assertFalse(field2.hasInitializer()); + assertNull(field2.getInitializer()); + } + + public void testMethod() { + PsiClass aClass = getFile("MyClass").getClasses()[0]; + + assertEquals("method1", aClass.getMethods()[0].getName()); + + PsiMethod method1 = aClass.getMethods()[0]; + PsiTypeElement type1 = method1.getReturnTypeElement(); + assertNotNull(type1); + assertEquals(method1, type1.getParent()); + assertEquals("void", type1.getText()); + assertTrue(type1.getType() instanceof PsiPrimitiveType); + assertFalse(method1.isConstructor()); + + PsiMethod method3 = aClass.getMethods()[2]; + assertNull(method3.getReturnType()); + assertTrue(method3.isConstructor()); + } + + public void testTypeReference() { + PsiClass aClass = getFile("MyClass").getClasses()[0]; + + PsiType type1 = aClass.getFields()[0].getType(); + assertNull(PsiUtil.resolveClassInType(type1)); + + PsiType type2 = aClass.getFields()[1].getType(); + PsiType componentType = ((PsiArrayType)type2).getComponentType(); + assertTrue(componentType instanceof PsiClassType); + assertTrue(componentType.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)); + assertEquals(CommonClassNames.JAVA_LANG_OBJECT_SHORT, componentType.getPresentableText()); + + PsiElement target = PsiUtil.resolveClassInType(type2); + assertEquals(myObjectClass, target); + } + + public void testReferenceLists() { + PsiClass aClass = getFile("MyClass").getClasses()[0]; + + PsiReferenceList extList = aClass.getExtendsList(); + assertNotNull(extList); + PsiClassType[] refs = extList.getReferencedTypes(); + assertEquals(1, refs.length); + assertEquals("ArrayList", refs[0].getPresentableText()); + assertEquals("java.util.ArrayList", refs[0].getCanonicalText()); + + PsiReferenceList implList = aClass.getImplementsList(); + assertNotNull(implList); + PsiClassType[] implRefs = implList.getReferencedTypes(); + assertEquals(1, implRefs.length); + assertEquals("Cloneable", implRefs[0].getPresentableText()); + assertEquals("java.lang.Cloneable", implRefs[0].getCanonicalText()); + + PsiReferenceList throwsList = aClass.getMethods()[0].getThrowsList(); + PsiClassType[] throwsRefs = throwsList.getReferencedTypes(); + assertEquals(2, throwsRefs.length); + assertEquals("Exception", throwsRefs[0].getPresentableText()); + assertEquals("java.lang.Exception", throwsRefs[0].getCanonicalText()); + assertEquals("IOException", throwsRefs[1].getPresentableText()); + assertEquals("java.io.IOException", throwsRefs[1].getCanonicalText()); + } + + public void testParameters() { + PsiClass aClass = getFile("MyClass").getClasses()[0]; + + PsiParameter[] parameters = aClass.getMethods()[0].getParameterList().getParameters(); + assertEquals(2, parameters.length); + + PsiType type1 = parameters[0].getType(); + assertEquals("int[]", type1.getPresentableText()); + assertTrue(type1.equalsToText("int[]")); + assertTrue(type1 instanceof PsiArrayType); + assertNull(PsiUtil.resolveClassInType(type1)); + + PsiType type2 = parameters[1].getType(); + assertEquals("Object", type2.getPresentableText()); + assertTrue(type2.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)); + assertFalse(type2 instanceof PsiArrayType); + assertFalse(type2 instanceof PsiPrimitiveType); + PsiClass target2 = PsiUtil.resolveClassInType(type2); + assertEquals(myObjectClass, target2); + + assertNotNull(parameters[0].getModifierList()); + assertNotNull(parameters[1].getModifierList()); + + assertTrue(((ClsParameterImpl)parameters[0]).isAutoGeneratedName()); + assertTrue(((ClsParameterImpl)parameters[1]).isAutoGeneratedName()); + assertEquals("ints", parameters[0].getName()); + assertEquals("o", parameters[1].getName()); + } + + @SuppressWarnings("ConstantConditions") + public void testModifiers() { + PsiClass aClass = getFile().getClasses()[0]; + assertEquals("private transient", aClass.getFields()[0].getModifierList().getText()); + assertEquals("private volatile", aClass.getFields()[1].getModifierList().getText()); + assertEquals("public", aClass.getMethods()[0].getModifierList().getText()); + assertEquals("private", aClass.getMethods()[1].getModifierList().getText()); + assertEquals("private synchronized", aClass.getMethods()[2].getModifierList().getText()); + } + + public void testEnum() { + PsiClass aClass = getFile("MyEnum").getClasses()[0]; + assertTrue(aClass.isEnum()); + PsiField[] fields = aClass.getFields(); + PsiClassType type = getJavaFacade().getElementFactory().createType(aClass); + assertEnumConstant(fields[0], "RED", type); + assertEnumConstant(fields[1], "GREEN", type); + assertEnumConstant(fields[2], "BLUE", type); + } + + private static void assertEnumConstant(PsiField field, String name, PsiClassType type) { + assertEquals(name, field.getName()); + assertTrue(field instanceof PsiEnumConstant); + assertEquals(type, field.getType()); + } + + public void testAnnotations() { + PsiClass aClass = getFile("Annotated").getClasses()[0]; + + PsiModifierList modifierList = aClass.getModifierList(); + assertNotNull(modifierList); + PsiAnnotation[] annotations = modifierList.getAnnotations(); + assertEquals(1, annotations.length); + assertTrue(annotations[0].getText().equals("@pack.Annotation")); + + PsiMethod method = aClass.getMethods()[1]; + annotations = method.getModifierList().getAnnotations(); + assertEquals(1, annotations.length); + assertTrue(annotations[0].getText().equals("@pack.Annotation")); + + PsiParameter[] params = method.getParameterList().getParameters(); + assertEquals(1, params.length); + modifierList = params[0].getModifierList(); + assertNotNull(modifierList); + annotations = modifierList.getAnnotations(); + assertEquals(1, annotations.length); + assertTrue(annotations[0].getText().equals("@pack.Annotation")); + + modifierList = aClass.getFields()[0].getModifierList(); + assertNotNull(modifierList); + annotations = modifierList.getAnnotations(); + assertEquals(1, annotations.length); + assertTrue(annotations[0].getText().equals("@pack.Annotation")); + } + + public void testAnnotationMethods() { + PsiMethod[] methods = getFile("Annotation").getClasses()[0].getMethods(); + assertNotNull(((PsiAnnotationMethod)methods[0]).getDefaultValue()); + + methods = getFile("Annotation2").getClasses()[0].getMethods(); + for (PsiMethod method : methods) { + assertTrue(String.valueOf(method), method instanceof PsiAnnotationMethod); + try { + PsiAnnotationMemberValue defaultValue = ((PsiAnnotationMethod)method).getDefaultValue(); + assertTrue(String.valueOf(defaultValue), defaultValue instanceof PsiBinaryExpression); + PsiPrimitiveType type = method.getName().startsWith("f") ? PsiType.FLOAT : PsiType.DOUBLE; + assertEquals(type, ((PsiBinaryExpression)defaultValue).getType()); + } + catch (Exception e) { + String valueText = ((PsiMethodStub)((StubBasedPsiElement)method).getStub()).getDefaultValueText(); + fail("Unable to compute default value of method " + method + " from text '" + valueText + "': " + e.getMessage()); + } + } + } + public void testKeywordAnnotatedClass() { - PsiModifierList modList = getFile().getClasses()[0].getModifierList(); + PsiModifierList modList = getFile("../KeywordAnnotatedClass").getClasses()[0].getModifierList(); assertNotNull(modList); assertEquals("@pkg.native", modList.getAnnotations()[0].getText()); } + public void testGenerics() { + PsiClass aClass = getJavaFacade().findClass(CommonClassNames.JAVA_UTIL_HASH_MAP, myScope); + assertNotNull(aClass); + + PsiTypeParameter[] parameters = aClass.getTypeParameters(); + assertEquals(2, parameters.length); + assertEquals("K", parameters[0].getName()); + assertEquals("V", parameters[1].getName()); + + PsiClassType extType = aClass.getExtendsListTypes()[0]; + assertEquals("java.util.AbstractMap", extType.getCanonicalText()); + + PsiType returnType = aClass.findMethodsByName("entrySet", false)[0].getReturnType(); + assertNotNull(returnType); + assertEquals("java.util.Set>", returnType.getCanonicalText()); + + PsiType paramType = aClass.findMethodsByName("putAll", false)[0].getParameterList().getParameters()[0].getType(); + assertNotNull(paramType); + assertEquals("java.util.Map", paramType.getCanonicalText()); + assertNotNull(((PsiClassType)paramType).resolveGenerics().getElement()); + } + private PsiJavaFile getFile() { return getFile(getTestName(false)); } private static PsiJavaFile getFile(String name) { - String path = PathManagerEx.getTestDataPath() + "/psi/cls/tree/" + name + ".class"; + String path = PathManagerEx.getTestDataPath() + TEST_DATA_PATH + "/pack/" + name + ".class"; VirtualFile file = LocalFileSystem.getInstance().findFileByPath(path); assertNotNull(path, file); PsiFile clsFile = PsiManager.getInstance(getProject()).findFile(file); diff --git a/java/java-tests/testSrc/com/intellij/psi/ClsRepositoryUseTest.java b/java/java-tests/testSrc/com/intellij/psi/ClsRepositoryUseTest.java deleted file mode 100644 index e2cf0b9e7693..000000000000 --- a/java/java-tests/testSrc/com/intellij/psi/ClsRepositoryUseTest.java +++ /dev/null @@ -1,759 +0,0 @@ -/* - * Copyright 2000-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.psi; - -import com.intellij.ide.highlighter.JavaFileType; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ex.PathManagerEx; -import com.intellij.openapi.roots.ModuleRootModificationUtil; -import com.intellij.openapi.roots.OrderRootType; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.VirtualFileFilter; -import com.intellij.psi.impl.compiled.ClsParameterImpl; -import com.intellij.psi.impl.java.stubs.PsiMethodStub; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.util.PsiUtil; -import com.intellij.testFramework.IdeaTestUtil; -import com.intellij.testFramework.PlatformTestCase; -import com.intellij.testFramework.PsiTestCase; -import com.intellij.testFramework.PsiTestUtil; - -import java.io.File; -import java.io.IOException; - -@PlatformTestCase.WrapInCommand -public class ClsRepositoryUseTest extends PsiTestCase { - private static final String TEST_ROOT = PathManagerEx.getTestDataPath() + "/psi/repositoryUse/cls"; - - private GlobalSearchScope RESOLVE_SCOPE; - - @Override - protected void setUp() throws Exception { - super.setUp(); - - ApplicationManager.getApplication().runWriteAction( - new Runnable() { - @Override - public void run() { - VirtualFile vDir = getRootFile(); - PsiTestUtil.removeAllRoots(myModule, IdeaTestUtil.getMockJdk17()); - addLibraryToRoots(vDir, OrderRootType.CLASSES); - } - } - ); - - RESOLVE_SCOPE = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(myModule); - } - - @Override - protected void tearDown() throws Exception { - RESOLVE_SCOPE = null; - super.tearDown(); - } - - public void testClassFileUpdate() throws IOException { - final File classes = createTempDir("classes", false); - - final File com = new File(classes, "com"); - FileUtil.ensureExists(com); - - File dataPath = new File(PathManagerEx.getTestDataPath() + "/psi/cls"); - - final File target = new File(com, "TestClass.class"); - FileUtil.copy(new File(dataPath, "1/TestClass.class"), target); - assertTrue(target.setLastModified(System.currentTimeMillis())); - - ApplicationManager.getApplication().runWriteAction( - new Runnable() { - @Override - public void run() { - VirtualFile vDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(classes); - assertNotNull(vDir); - addLibraryToRoots(vDir, OrderRootType.CLASSES); - } - } - ); - - PsiClass psiClass = myJavaFacade.findClass("com.TestClass", GlobalSearchScope.allScope(myProject)); - assert psiClass != null; - PsiJavaFile psiFile = (PsiJavaFile)psiClass.getContainingFile(); - final VirtualFile vFile = psiFile.getVirtualFile(); - - assertNotNull(psiClass); - assertTrue(psiClass.isValid()); - assertTrue(psiFile.isValid()); - - assertEquals(1, psiFile.getClasses().length); - assertSame(psiClass, psiFile.getClasses()[0]); - - assertEquals(2, psiClass.getFields().length); - assertEquals("field11", psiClass.getFields()[0].getName()); - assertEquals("field12", psiClass.getFields()[1].getName()); - - assertEquals(2, psiClass.getMethods().length); - assertEquals("TestClass", psiClass.getMethods()[0].getName()); - assertEquals("method1", psiClass.getMethods()[1].getName()); - - FileUtil.copy(new File(dataPath, "2/TestClass.class"), target); - assertTrue(target.setLastModified(System.currentTimeMillis() + 5000)); - - assert vFile != null; - ApplicationManager.getApplication().runWriteAction( - new Runnable() { - @Override - public void run() { - vFile.refresh(false, false); - } - } - ); - - assertTrue(psiFile.isValid()); - PsiClass oldClass = psiClass; - psiClass = myJavaFacade.findClass("com.TestClass", GlobalSearchScope.allScope(myProject)); - assertNotSame(oldClass, psiClass); - assertFalse(oldClass.isValid()); - - assertNotNull(psiClass); - assertEquals(1, psiFile.getClasses().length); - assertSame(psiClass, psiFile.getClasses()[0]); - - assertTrue(psiClass.isValid()); - assertEquals(1, psiClass.getFields().length); - assertEquals("field2", psiClass.getFields()[0].getName()); - - assertEquals(2, psiClass.getMethods().length); - assertEquals("TestClass", psiClass.getMethods()[0].getName()); - assertEquals("method2", psiClass.getMethods()[1].getName()); - } - - private static VirtualFile getRootFile() { - final String path = TEST_ROOT.replace(File.separatorChar, '/'); - final VirtualFile vDir = LocalFileSystem.getInstance().findFileByPath(path); - assert vDir != null : path; - return vDir; - } - - public void testGetClasses() { - final VirtualFile rootFile = getRootFile(); - final VirtualFile pack = rootFile.findChild("pack"); - assert pack != null; - VirtualFile child = pack.findChild("MyClass.class"); - assertNotNull(child); - PsiJavaFile file = (PsiJavaFile)myPsiManager.findFile(child); - checkValid(file); - assert file != null; - PsiClass[] classes = file.getClasses(); - assertTrue(classes.length == 1); - PsiClass aClass = classes[0]; - checkValid(aClass); - assertEquals(file, aClass.getParent()); - } - - public void testGetClassName() { - final VirtualFile rootFile = getRootFile(); - final VirtualFile pack = rootFile.findChild("pack"); - assert pack != null; - VirtualFile child = pack.findChild("MyClass.class"); - assertNotNull(child); - PsiJavaFile file = (PsiJavaFile)myPsiManager.findFile(child); - assert file != null; - PsiClass[] classes = file.getClasses(); - assertTrue(classes.length == 1); - - PsiClass aClass = classes[0]; - checkValid(aClass); - assertEquals("MyClass", aClass.getName()); - } - - public void testGetClassQName() { - final VirtualFile rootFile = getRootFile(); - final VirtualFile pack = rootFile.findChild("pack"); - assert pack != null; - VirtualFile child = pack.findChild("MyClass.class"); - assertNotNull(child); - PsiJavaFile file = (PsiJavaFile)myPsiManager.findFile(child); - assert file != null; - PsiClass[] classes = file.getClasses(); - assertTrue(classes.length == 1); - - PsiClass aClass = classes[0]; - checkValid(aClass); - assertEquals("pack.MyClass", aClass.getQualifiedName()); - } - - public void testGetContainingFile() { - final VirtualFile rootFile = getRootFile(); - final VirtualFile pack = rootFile.findChild("pack"); - assert pack != null; - VirtualFile child = pack.findChild("MyClass.class"); - assertNotNull(child); - PsiJavaFile file = (PsiJavaFile)myPsiManager.findFile(child); - assert file != null; - PsiClass[] classes = file.getClasses(); - assertTrue(classes.length == 1); - - PsiClass aClass = classes[0]; - checkValid(aClass); - assertEquals(file, aClass.getContainingFile()); - } - - public void testFindClass() { - getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.ALL, myTestRootDisposable); - - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assertNotNull(aClass); - checkValid(aClass); - } - - public void testIsInterface() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - assertTrue(!aClass.isInterface()); - } - - private static void checkValid(final PsiElement elt) { - assertTrue(elt.isValid()); - } - - public void testPackageName() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - String packageName = ((PsiJavaFile)aClass.getContainingFile()).getPackageName(); - assertEquals("pack", packageName); - } - - public void testGetFields() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - PsiField[] fields = aClass.getFields(); - assertEquals(2, fields.length); - assertEquals(aClass, fields[0].getParent()); - } - - public void testGetMethods() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - PsiMethod[] methods = aClass.getMethods(); - assertEquals(3, methods.length); - assertEquals(aClass, methods[0].getParent()); - } - - public void testGetInnerClasses() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - PsiClass[] inners = aClass.getInnerClasses(); - assertEquals(1, inners.length); - assertEquals(aClass, inners[0].getParent()); - } - - public void testModifierList() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiModifierList modifierList = aClass.getModifierList(); - assert modifierList != null : aClass; - assertTrue(modifierList.hasModifierProperty(PsiModifier.PUBLIC)); - assertFalse(modifierList.hasModifierProperty(PsiModifier.STATIC)); - assertEquals(modifierList.getParent(), aClass); - - PsiField field = aClass.getFields()[0]; - modifierList = field.getModifierList(); - assert modifierList != null : field; - assertTrue(modifierList.hasModifierProperty(PsiModifier.PACKAGE_LOCAL)); - assertEquals(modifierList.getParent(), field); - - PsiMethod method = aClass.getMethods()[0]; - modifierList = method.getModifierList(); - assertTrue(modifierList.hasModifierProperty(PsiModifier.PACKAGE_LOCAL)); - assertEquals(modifierList.getParent(), method); - } - - public void testGetFieldName() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - assertEquals("field1", aClass.getFields()[0].getName()); - } - - public void testGetMethodName() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - assertEquals("method1", aClass.getMethods()[0].getName()); - } - - public void testFindFieldByName() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - PsiField field = aClass.findFieldByName("field1", false); - assertNotNull(field); - } - - public void testIsDeprecated() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - assertTrue(!aClass.isDeprecated()); - - PsiField field = aClass.findFieldByName("field1", false); - assert field != null : aClass; - assertTrue(field.isDeprecated()); - } - - public void testFieldType() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiField field1 = aClass.getFields()[0]; - PsiType type1 = field1.getType(); - - PsiField field2 = aClass.getFields()[1]; - PsiType type2 = field2.getType(); - - assertEquals(PsiType.INT, type1); - assertTrue(type2.equalsToText("java.lang.Object[]")); - - assertEquals("int", type1.getPresentableText()); - assertEquals("Object[]", type2.getPresentableText()); - - assertTrue(type1 instanceof PsiPrimitiveType); - assertTrue(!(type2 instanceof PsiPrimitiveType)); - assertTrue(type2 instanceof PsiArrayType); - } - - public void testMethodType() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiMethod method1 = aClass.getMethods()[0]; - PsiTypeElement type1 = method1.getReturnTypeElement(); - assert type1 != null : method1; - assertEquals(method1, type1.getParent()); - - assertEquals("void", type1.getText()); - assertTrue(type1.getType() instanceof PsiPrimitiveType); - - PsiMethod method3 = aClass.getMethods()[2]; - assertNull(method3.getReturnType()); - } - - public void testIsConstructor() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiMethod method1 = aClass.getMethods()[0]; - assertFalse(method1.isConstructor()); - - PsiMethod method3 = aClass.getMethods()[2]; - assertTrue(method3.isConstructor()); - } - - public void testComponentType() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiField field = aClass.getFields()[1]; - PsiType type = field.getType(); - assertTrue(type instanceof PsiArrayType); - PsiType componentType = ((PsiArrayType)type).getComponentType(); - - assertTrue(componentType.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)); - assertEquals("Object", componentType.getPresentableText()); - assertFalse(componentType instanceof PsiPrimitiveType); - assertFalse(componentType instanceof PsiArrayType); - } - - public void testTypeReference() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiField field1 = aClass.getFields()[0]; - PsiType type1 = field1.getType(); - assertNull(PsiUtil.resolveClassInType(type1)); - - PsiField field2 = aClass.getFields()[1]; - PsiType type2 = ((PsiArrayType)field2.getType()).getComponentType(); - assertTrue(type2 instanceof PsiClassType); - - assertTrue(type2.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)); - assertEquals("Object", type2.getPresentableText()); - } - - public void testResolveTypeReference() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiType type1 = aClass.getFields()[1].getType(); - PsiElement target1 = PsiUtil.resolveClassInType(type1); - assertNotNull(target1); - PsiClass objectClass = myJavaFacade.findClasses(CommonClassNames.JAVA_LANG_OBJECT, RESOLVE_SCOPE)[1]; - assertEquals(objectClass, target1); - } - - public void testInitializer() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiField field1 = aClass.getFields()[0]; - assertTrue(field1.hasInitializer()); - PsiLiteralExpression initializer = (PsiLiteralExpression)field1.getInitializer(); - assert initializer != null : field1; - assertEquals("123", initializer.getText()); - assertEquals(new Integer(123), initializer.getValue()); - assertEquals(PsiType.INT, initializer.getType()); - - PsiField field2 = aClass.getFields()[1]; - assertFalse(field2.hasInitializer()); - assertNull(field2.getInitializer()); - } - - public void testExtendsList() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiReferenceList list = aClass.getExtendsList(); - assert list != null : aClass; - PsiClassType[] refs = list.getReferencedTypes(); - assertEquals(1, refs.length); - assertEquals("ArrayList", refs[0].getPresentableText()); - assertEquals("java.util.ArrayList", refs[0].getCanonicalText()); - } - - public void testImplementsList() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiReferenceList list = aClass.getImplementsList(); - assert list != null : aClass; - PsiClassType[] refs = list.getReferencedTypes(); - assertEquals(1, refs.length); - assertEquals("Cloneable", refs[0].getPresentableText()); - assertEquals("java.lang.Cloneable", refs[0].getCanonicalText()); - } - - public void testThrowsList() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiReferenceList list = aClass.getMethods()[0].getThrowsList(); - - PsiClassType[] refs = list.getReferencedTypes(); - assertEquals(2, refs.length); - assertEquals("Exception", refs[0].getPresentableText()); - assertEquals("IOException", refs[1].getPresentableText()); - assertEquals("java.lang.Exception", refs[0].getCanonicalText()); - assertEquals("java.io.IOException", refs[1].getCanonicalText()); - } - - public void testParameters() { - PsiClass aClass = myJavaFacade.findClass("pack.MyClass", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiParameterList list = aClass.getMethods()[0].getParameterList(); - - PsiParameter[] parameters = list.getParameters(); - assertEquals(2, parameters.length); - - PsiType type1 = parameters[0].getType(); - assertEquals("int[]", type1.getPresentableText()); - assertTrue(type1.equalsToText("int[]")); - assertTrue(type1 instanceof PsiArrayType); - assertNull(PsiUtil.resolveClassInType(type1)); - - PsiType type2 = parameters[1].getType(); - assertEquals("Object", type2.getPresentableText()); - assertTrue(type2.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)); - assertFalse(type2 instanceof PsiArrayType); - assertFalse(type2 instanceof PsiPrimitiveType); - PsiClass target2 = PsiUtil.resolveClassInType(type2); - assertNotNull(target2); - PsiClass objectClass = myJavaFacade.findClasses(CommonClassNames.JAVA_LANG_OBJECT, RESOLVE_SCOPE)[1]; - assertEquals(objectClass, target2); - - assertNotNull(parameters[0].getModifierList()); - assertNotNull(parameters[1].getModifierList()); - - assertTrue(((ClsParameterImpl)parameters[0]).isAutoGeneratedName()); - assertTrue(((ClsParameterImpl)parameters[1]).isAutoGeneratedName()); - assertEquals("ints", parameters[0].getName()); - assertEquals("o", parameters[1].getName()); - } - - public void testGenericClass() { - disableJdk(); - - PsiClass map = myJavaFacade.findClass("java.util.HashMap", RESOLVE_SCOPE); - assert map != null; - PsiMethod entrySet = map.findMethodsByName("entrySet", false)[0]; - PsiClassType ret = (PsiClassType)entrySet.getReturnType(); - assert ret != null : entrySet; - final PsiClassType.ClassResolveResult setResolveResult = ret.resolveGenerics(); - final PsiClass setResolveResultElement = setResolveResult.getElement(); - assert setResolveResultElement != null : setResolveResult; - assertEquals(CommonClassNames.JAVA_UTIL_SET, setResolveResultElement.getQualifiedName()); - final PsiTypeParameter typeParameter = setResolveResultElement.getTypeParameters()[0]; - - final PsiType substitutedResult = setResolveResult.getSubstitutor().substitute(typeParameter); - assertTrue(substitutedResult instanceof PsiWildcardType); - assertTrue(((PsiWildcardType)substitutedResult).isExtends()); - PsiClassType setType = (PsiClassType)((PsiWildcardType)substitutedResult).getBound(); - assert setType != null; - final PsiClassType.ClassResolveResult setTypeResolveResult = setType.resolveGenerics(); - final PsiClass setTypeResolveResultElement = setTypeResolveResult.getElement(); - assert setTypeResolveResultElement != null : setTypeResolveResult; - assertEquals("java.util.Map.Entry", setTypeResolveResultElement.getQualifiedName()); - final PsiTypeParameter[] typeParameters = setTypeResolveResultElement.getTypeParameters(); - assertEquals(2, typeParameters.length); - PsiType[] mapParams = { - setTypeResolveResult.getSubstitutor().substitute(typeParameters[0]), - setTypeResolveResult.getSubstitutor().substitute(typeParameters[1]) - }; - assertEquals(2, mapParams.length); - assertEquals("K", mapParams[0].getCanonicalText()); - assertTrue(((PsiClassType)mapParams[0]).resolve() instanceof PsiTypeParameter); - assertEquals("V", mapParams[1].getCanonicalText()); - assertTrue(((PsiClassType)mapParams[1]).resolve() instanceof PsiTypeParameter); - } - - private void disableJdk() { - ModuleRootModificationUtil.setModuleSdk(myModule, null); - } - - public void testGenericReturnType() { - disableJdk(); - - final PsiClass map = myJavaFacade.findClass(CommonClassNames.JAVA_UTIL_MAP, RESOLVE_SCOPE); - assert map != null; - final PsiElementFactory factory = myJavaFacade.getElementFactory(); - final PsiClassType typeMapStringToInteger = - (PsiClassType)factory.createTypeFromText("java.util.Map ", null); - final PsiClassType.ClassResolveResult mapResolveResult = typeMapStringToInteger.resolveGenerics(); - final PsiClass mapResolveResultElement = mapResolveResult.getElement(); - assert mapResolveResultElement != null : typeMapStringToInteger; - assertTrue(mapResolveResultElement.equals(map)); - - final PsiMethod entrySetMethod = map.findMethodsByName("entrySet", false)[0]; - final PsiType entrySetReturnType = entrySetMethod.getReturnType(); - assert entrySetReturnType != null : entrySetMethod; - assertEquals("java.util.Set>", entrySetReturnType.getCanonicalText()); - final PsiSubstitutor substitutor = ((PsiClassType)entrySetReturnType).resolveGenerics().getSubstitutor(); - assertEquals("E of java.util.Set -> ? extends java.util.Map.Entry\n", substitutor.toString()); - final PsiType typeSetOfEntriesOfStringAndInteger = - factory.createTypeFromText("java.util.Set>", null); - final PsiType substitutedEntrySetReturnType = mapResolveResult.getSubstitutor().substitute(entrySetReturnType); - assertTrue(typeSetOfEntriesOfStringAndInteger.equals(substitutedEntrySetReturnType)); - assertTrue(typeSetOfEntriesOfStringAndInteger.isAssignableFrom(substitutedEntrySetReturnType)); - } - - public void testGenericInheritance() { - final String text = "import java.util.*;\n" + - "class Dummy {\n" + - " { Map list = new HashMap();}\n" + - "}"; - PsiJavaFile file = (PsiJavaFile)PsiFileFactory.getInstance(myProject).createFileFromText("Dummy.java", JavaFileType.INSTANCE, text); - - PsiDeclarationStatement decl = (PsiDeclarationStatement)file.getClasses()[0].getInitializers()[0].getBody().getStatements()[0]; - PsiVariable list = (PsiVariable)decl.getDeclaredElements()[0]; - final PsiExpression initializer = list.getInitializer(); - assert initializer != null : list; - final PsiType type = initializer.getType(); - assert type != null : initializer; - assertTrue(list.getType().isAssignableFrom(type)); - } - - public void testSimplerGenericInheritance() { - PsiElementFactory factory = myJavaFacade.getElementFactory(); - PsiClass map = myJavaFacade.findClass(CommonClassNames.JAVA_UTIL_MAP, RESOLVE_SCOPE); - PsiClass hashMap = myJavaFacade.findClass("java.util.HashMap", RESOLVE_SCOPE); - assert map != null && hashMap != null; - assertTrue(factory.createType(map).isAssignableFrom(factory.createType(hashMap))); - } - - public void testAnnotations() { - PsiClass aClass = myJavaFacade.findClass("pack.Annotated", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiModifierList modifierList = aClass.getModifierList(); - assert modifierList != null : aClass; - PsiAnnotation[] annotations = modifierList.getAnnotations(); - assertTrue(annotations.length == 1); - assertTrue(annotations[0].getText().equals("@pack.Annotation")); - - PsiMethod[] methods = aClass.findMethodsByName("foo", false); - assertTrue(methods.length == 1); - annotations = methods[0].getModifierList().getAnnotations(); - assertTrue(annotations.length == 1); - assertTrue(annotations[0].getText().equals("@pack.Annotation")); - - PsiParameter[] params = methods[0].getParameterList().getParameters(); - assertTrue(params.length == 1); - modifierList = params[0].getModifierList(); - assert modifierList != null : params[0]; - annotations = modifierList.getAnnotations(); - assertTrue(annotations.length == 1); - assertTrue(annotations[0].getText().equals("@pack.Annotation")); - - PsiField[] fields = aClass.getFields(); - assertTrue(fields.length == 1); - modifierList = fields[0].getModifierList(); - assert modifierList != null : fields[0]; - annotations = modifierList.getAnnotations(); - assertTrue(annotations.length == 1); - assertTrue(annotations[0].getText().equals("@pack.Annotation")); - } - - public void testAnnotationMethodDefault() { - PsiClass aClass = myJavaFacade.findClass("pack.Annotation", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - PsiMethod[] methods = aClass.findMethodsByName("value", false); - assertTrue(methods.length == 1 && methods[0] instanceof PsiAnnotationMethod); - PsiAnnotationMemberValue defaultValue = ((PsiAnnotationMethod)methods[0]).getDefaultValue(); - assertTrue(defaultValue != null); - } - - public void testIndeterminateInAnnotationMethodDefault() { - final PsiClass aClass = myJavaFacade.findClass("pack.Annotation2", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - for (PsiMethod method : aClass.getMethods()) { - assert method instanceof PsiAnnotationMethod : method; - try { - final PsiAnnotationMemberValue defaultValue = ((PsiAnnotationMethod)method).getDefaultValue(); - assert defaultValue instanceof PsiBinaryExpression : defaultValue; - final PsiPrimitiveType type = method.getName().startsWith("f") ? PsiType.FLOAT : PsiType.DOUBLE; - assertEquals(type, ((PsiBinaryExpression)defaultValue).getType()); - } - catch (Exception e) { - final String valueText = ((PsiMethodStub)((StubBasedPsiElement)method).getStub()).getDefaultValueText(); - fail("Unable to compute default value of method " + method + " from text '" + valueText + "': " + e.getMessage()); - } - } - } - - public void testEnum() { - PsiClass aClass = myJavaFacade.findClass("pack.MyEnum", GlobalSearchScope.allScope(myProject)); - assert aClass != null; - checkValid(aClass); - - assertTrue(aClass.isEnum()); - PsiField[] fields = aClass.getFields(); - PsiClassType type = myJavaFacade.getElementFactory().createType(aClass); - checkEnumConstant("RED", fields[0], type); - checkEnumConstant("GREEN", fields[1], type); - checkEnumConstant("BLUE", fields[2], type); - } - - public void testVariance() { - final PsiClass aClass = myJavaFacade.findClass("pack.Variance", RESOLVE_SCOPE); - assert aClass != null; - checkValid(aClass); - - final PsiMethod[] methodsByName = aClass.findMethodsByName("method", false); - assertEquals(1, methodsByName.length); - final PsiMethod methodsWithReturnType = methodsByName[0]; - final PsiType returnType = methodsWithReturnType.getReturnType(); - assert returnType != null : methodsWithReturnType; - assertEquals("pack.Parametrized", returnType.getCanonicalText()); - } - - private static void checkEnumConstant(String name, PsiField field, PsiClassType type) { - assertEquals(name, field.getName()); - assertTrue(field instanceof PsiEnumConstant); - assertEquals(type, field.getType()); - } - - public void testInvariantParsing() { - final PsiClass collection = myJavaFacade.findClass("pack.Variance", RESOLVE_SCOPE); - assertNotNull(collection); - final PsiMethod[] methods = collection.findMethodsByName("removeAll", false); - assertEquals(1, methods.length); - final PsiParameter[] parameters = methods[0].getParameterList().getParameters(); - assertEquals(1, parameters.length); - final PsiType parameterType = parameters[0].getType(); - assertTrue(parameterType instanceof PsiClassType); - final PsiClassType psiClassType = ((PsiClassType)parameterType); - final PsiClassType.ClassResolveResult resolveResult = psiClassType.resolveGenerics(); - final PsiClass resolveResultElement = resolveResult.getElement(); - assert resolveResultElement != null : psiClassType; - final PsiTypeParameter[] typeParameters = resolveResultElement.getTypeParameters(); - assertEquals(1, typeParameters.length); - final PsiType substitution = resolveResult.getSubstitutor().substitute(typeParameters[0]); - assertTrue(substitution instanceof PsiWildcardType); - assertEquals(PsiWildcardType.createUnbounded(myPsiManager), substitution); - } - - public void testInvariantParsing2() { - disableJdk(); - final PsiClass collection = myJavaFacade.findClass("java.util.Collection", RESOLVE_SCOPE); - assertNotNull(collection); - final PsiMethod[] methods = collection.findMethodsByName("removeAll", false); - assertEquals(1, methods.length); - final PsiParameter[] parameters = methods[0].getParameterList().getParameters(); - assertEquals(1, parameters.length); - final PsiType parameterType = parameters[0].getType(); - assertTrue(parameterType instanceof PsiClassType); - final PsiClassType psiClassType = ((PsiClassType)parameterType); - final PsiClassType.ClassResolveResult resolveResult = psiClassType.resolveGenerics(); - final PsiClass resolveResultElement = resolveResult.getElement(); - assert resolveResultElement != null : psiClassType; - final PsiTypeParameter[] typeParameters = resolveResultElement.getTypeParameters(); - assertEquals(1, typeParameters.length); - final PsiType substitution = resolveResult.getSubstitutor().substitute(typeParameters[0]); - assertTrue(substitution instanceof PsiWildcardType); - assertEquals(PsiWildcardType.createUnbounded(myPsiManager), substitution); - } - - @SuppressWarnings("ConstantConditions") - public void testModifiers() { - PsiClass psiClass = myJavaFacade.findClass("pack.Modifiers", RESOLVE_SCOPE); - assertNotNull(psiClass); - - PsiField f1 = psiClass.findFieldByName("f1", false); - assertEquals("private transient", f1.getModifierList().getText()); - PsiField f2 = psiClass.findFieldByName("f2", false); - assertEquals("private volatile", f2.getModifierList().getText()); - PsiMethod init = psiClass.findMethodsByName("Modifiers", false)[0]; - assertEquals("public", init.getModifierList().getText()); - PsiMethod m1 = psiClass.findMethodsByName("m1", false)[0]; - assertEquals("private", m1.getModifierList().getText()); - PsiMethod m2 = psiClass.findMethodsByName("m2", false)[0]; - assertEquals("private synchronized", m2.getModifierList().getText()); - } -} diff --git a/java/java-tests/testSrc/com/intellij/psi/impl/cache/impl/ClassFileUnderSourceRootTest.java b/java/java-tests/testSrc/com/intellij/psi/impl/cache/impl/ClassFileUnderSourceRootTest.java index d3364595536e..a197d480318b 100644 --- a/java/java-tests/testSrc/com/intellij/psi/impl/cache/impl/ClassFileUnderSourceRootTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/impl/cache/impl/ClassFileUnderSourceRootTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,59 +18,46 @@ package com.intellij.psi.impl.cache.impl; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ex.PathManagerEx; import com.intellij.openapi.roots.ModuleRootModificationUtil; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VfsUtil; -import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.testFramework.PsiTestCase; +import com.intellij.psi.PsiClass; +import com.intellij.testFramework.IdeaTestCase; import com.intellij.testFramework.PsiTestUtil; import java.io.File; -import java.io.IOException; /** * @author max */ -public class ClassFileUnderSourceRootTest extends PsiTestCase { - private static final String TEST_ROOT = PathManagerEx.getTestDataPath() + "/psi/repositoryUse/cls"; - private VirtualFile myDir; - +public class ClassFileUnderSourceRootTest extends IdeaTestCase { @Override protected void setUp() throws Exception { super.setUp(); - final File root = createTempDirectory(); + File dir = createTempDirectory(); + final VirtualFile root = LocalFileSystem.getInstance().findFileByIoFile(dir); + assertNotNull(root); + + FileUtil.writeToFile(new File(dir, "p/A.java"), "package p;\npublic class A { }"); + FileUtil.copy(new File(PathManagerEx.getTestDataPath() + "/psi/cls/repo/pack/MyClass.class"), new File(dir, "pack/MyClass.class")); + ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - try { - VirtualFile rootVFile = LocalFileSystem.getInstance().refreshAndFindFileByPath(root.getAbsolutePath().replace(File.separatorChar, '/')); - - myDir = rootVFile.createChildDirectory(null, "contentAndLibrary"); - - VirtualFile file1 = myDir.createChildData(null, "A.java"); - VfsUtil.saveText(file1, "package p; public class A{ public void foo(); }"); - PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); - VfsUtilCore.copyFile(null, getClassFile(), myDir); - - PsiTestUtil.addSourceRoot(myModule, myDir); - ModuleRootModificationUtil.addModuleLibrary(myModule, myDir.getUrl()); - } - catch (IOException e) { - LOG.error(e); - } + PsiTestUtil.addSourceRoot(myModule, root); + ModuleRootModificationUtil.addModuleLibrary(myModule, root.getUrl()); } }); } - private static VirtualFile getClassFile() { - VirtualFile vDir = LocalFileSystem.getInstance().findFileByPath(TEST_ROOT.replace(File.separatorChar, '/')); - return vDir.findFileByRelativePath("pack/MyClass.class"); - } + public void testFindClasses() { + PsiClass srcClass = myJavaFacade.findClass("p.A"); + assertNotNull(srcClass); + assertEquals("p.A", srcClass.getQualifiedName()); - public void testFindClass() throws Exception { - assertEquals("p.A", myJavaFacade.findClass("p.A").getQualifiedName()); - assertEquals("pack.MyClass", myJavaFacade.findClass("pack.MyClass").getQualifiedName()); + PsiClass pkgClass = myJavaFacade.findClass("pack.MyClass"); + assertNotNull(pkgClass); + assertEquals("pack.MyClass", pkgClass.getQualifiedName()); } }