Test for resolving static members of java enum
Add clarifying note
This commit is contained in:
+11
-6
@@ -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>
|
||||
}
|
||||
}
|
||||
+11
-3
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user