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:
+3
-1
@@ -81,10 +81,12 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class
|
|||||||
.changeLockLevel(WritableScope.LockLevel.BOTH);
|
.changeLockLevel(WritableScope.LockLevel.BOTH);
|
||||||
this.scopeForMemberResolution = new WritableScopeImpl(scopeForSupertypeResolution, this, redeclarationHandler, "MemberResolution")
|
this.scopeForMemberResolution = new WritableScopeImpl(scopeForSupertypeResolution, this, redeclarationHandler, "MemberResolution")
|
||||||
.changeLockLevel(WritableScope.LockLevel.BOTH);
|
.changeLockLevel(WritableScope.LockLevel.BOTH);
|
||||||
if (getKind() == ClassKind.TRAIT) {
|
|
||||||
|
if (kind == ClassKind.TRAIT) {
|
||||||
setUpScopeForInitializers(this);
|
setUpScopeForInitializers(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scopeForMemberResolution.importScope(staticScope);
|
||||||
scopeForMemberResolution.addLabeledDeclaration(this);
|
scopeForMemberResolution.addLabeledDeclaration(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -255,7 +255,9 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
|||||||
thisScope,
|
thisScope,
|
||||||
getScopeForMemberLookup(),
|
getScopeForMemberLookup(),
|
||||||
getScopeForClassHeaderResolution(),
|
getScopeForClassHeaderResolution(),
|
||||||
classObjectAdapterScope);
|
classObjectAdapterScope,
|
||||||
|
getStaticScope()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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);
|
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")
|
@TestMetadata("compiler/testData/diagnostics/tests/enum/inner")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class)
|
@RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
@@ -3,7 +3,14 @@ enum class E {
|
|||||||
|
|
||||||
class object {
|
class object {
|
||||||
fun foo(): E = ENTRY
|
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 foo() = E.ENTRY
|
||||||
|
|||||||
Reference in New Issue
Block a user