Test for resolving static members of java enum

Add clarifying note
This commit is contained in:
Pavel V. Talanov
2012-11-11 17:28:52 +04:00
parent b5b6f58b6b
commit 3ae89dbb1d
4 changed files with 60 additions and 9 deletions
@@ -160,13 +160,18 @@ public final class JavaNamespaceResolver {
}
PsiClass psiClass = psiClassFinder.findPsiClass(fqName, PsiClassFinder.RuntimeClassesHandleMode.IGNORE);
if (psiClass != null && !psiClass.isEnum()) {
trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, namespaceDescriptor, JavaNamespaceKind.CLASS_STATICS);
return new JavaClassStaticMembersScope(namespaceDescriptor,
createDeclarationProviderForClassStaticMembers(psiClass),
fqName, javaSemanticServices);
if (psiClass == null) {
return null;
}
return null;
if (psiClass.isEnum()) {
// NOTE: we don't want to create namespace for enum classes because we put
// static members of enum class into class object descriptor
return null;
}
trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, namespaceDescriptor, JavaNamespaceKind.CLASS_STATICS);
return new JavaClassStaticMembersScope(namespaceDescriptor,
createDeclarationProviderForClassStaticMembers(psiClass),
fqName, javaSemanticServices);
}
private void cache(@NotNull FqName fqName, @Nullable JavaBaseScope packageScope) {
@@ -0,0 +1,15 @@
package test;
public enum Enum {
A,
B,
C;
public static class Nested {
void foo() {}
}
public class Inner {
void bar() {}
}
}
@@ -0,0 +1,23 @@
namespace test
public final enum class test.Enum : jet.Enum<test.Enum> {
private final /*constructor*/ fun <init>(): test.Enum
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public open class test.Enum.Inner : java.lang.Object {
public final /*constructor*/ fun <init>(): test.Enum.Inner
package open fun bar(): jet.Tuple0
}
public final class object test.Enum.<class-object-for-Enum> {
private final /*constructor*/ fun <init>(): test.Enum.<class-object-for-Enum>
public final val A: test.Enum
public final val B: test.Enum
public final val C: test.Enum
public open class test.Enum.Nested : java.lang.Object {
public final /*constructor*/ fun <init>(): test.Enum.Nested
package open fun foo(): jet.Tuple0
}
public final fun valueOf(/*0*/ value: jet.String): test.Enum
public final fun values(): jet.Array<test.Enum>
}
}
@@ -50,6 +50,10 @@ public final class StaticMembersJavaDescriptorResolverTest extends AbstractJavaR
doTest();
}
public void testEnum() throws Exception {
doTest();
}
private void doTest() throws IOException {
String name = getTestName(false);
compileJavaFile(name + ".java");
@@ -58,8 +62,12 @@ public final class StaticMembersJavaDescriptorResolverTest extends AbstractJavaR
compareNamespaces(namespaceWithClass, namespaceWithClass, DONT_INCLUDE_METHODS_OF_OBJECT, new File(PATH + name + "_non_static.txt"));
NamespaceDescriptor namespaceWithStaticMembers = javaDescriptorResolver.resolveNamespace(new FqName(DEFAULT_PACKAGE + "." + name));
Assert.assertNotNull(namespaceWithStaticMembers);
compareNamespaces(namespaceWithStaticMembers, namespaceWithStaticMembers, DONT_INCLUDE_METHODS_OF_OBJECT,
new File(PATH + name + "_static.txt"));
File fileWithStaticMembers = new File(PATH + name + "_static.txt");
if (namespaceWithStaticMembers == null) {
Assert.assertTrue(!fileWithStaticMembers.exists());
} else {
compareNamespaces(namespaceWithStaticMembers, namespaceWithStaticMembers, DONT_INCLUDE_METHODS_OF_OBJECT,
fileWithStaticMembers);
}
}
}