Resolve "values" and "valueOf" in enum class object

Import enum class's static scope into its class object's member scope
This commit is contained in:
Alexander Udalov
2014-09-09 14:11:07 +04:00
parent 2f12875515
commit 5b1993f62a
5 changed files with 36 additions and 2 deletions
@@ -81,10 +81,12 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class
.changeLockLevel(WritableScope.LockLevel.BOTH);
this.scopeForMemberResolution = new WritableScopeImpl(scopeForSupertypeResolution, this, redeclarationHandler, "MemberResolution")
.changeLockLevel(WritableScope.LockLevel.BOTH);
if (getKind() == ClassKind.TRAIT) {
if (kind == ClassKind.TRAIT) {
setUpScopeForInitializers(this);
}
scopeForMemberResolution.importScope(staticScope);
scopeForMemberResolution.addLabeledDeclaration(this);
}
@@ -255,7 +255,9 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
thisScope,
getScopeForMemberLookup(),
getScopeForClassHeaderResolution(),
classObjectAdapterScope);
classObjectAdapterScope,
getStaticScope()
);
}
@Override
@@ -0,0 +1,18 @@
enum class E {
ENTRY
class object {
fun foo(): E = ENTRY
fun bar(): Array<E> = values()
fun baz(): E = valueOf("ENTRY")
val valuez = values()
}
fun oof(): E = ENTRY
fun rab(): Array<E> = values()
fun zab(): E = valueOf("ENTRY")
}
fun foo() = E.ENTRY
fun bar() = E.values()
fun baz() = E.valueOf("ENTRY")
@@ -3826,6 +3826,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("valuesValueOfAndEntriesAccessibility.kt")
public void testValuesValueOfAndEntriesAccessibility() throws Exception {
doTest("compiler/testData/diagnostics/tests/enum/valuesValueOfAndEntriesAccessibility.kt");
}
@TestMetadata("compiler/testData/diagnostics/tests/enum/inner")
@TestDataPath("$PROJECT_ROOT")
@RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class)
@@ -3,7 +3,14 @@ enum class E {
class object {
fun foo(): E = ENTRY
fun bar(): Array<E> = values()
fun baz(): E = valueOf("ENTRY")
val valuez = values()
}
fun oof(): E = ENTRY
fun rab(): Array<E> = values()
fun zab(): E = valueOf("ENTRY")
}
fun foo() = E.ENTRY