Synthetic classes created for enum entries
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.CLASS)
|
||||||
|
@interface Foo {
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
import java.lang.annotation.*
|
||||||
|
|
||||||
|
Foo class Bar
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
Bar()
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
+5
@@ -68,6 +68,11 @@ public class BlackBoxWithJavaCodegenTestGenerated extends AbstractBlackBoxCodege
|
|||||||
doTestWithJava("compiler/testData/codegen/boxWithJava/annotations/javaPropertyWithIntInitializer.kt");
|
doTestWithJava("compiler/testData/codegen/boxWithJava/annotations/javaPropertyWithIntInitializer.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("RetentionInJava.kt")
|
||||||
|
public void testRetentionInJava() throws Exception {
|
||||||
|
doTestWithJava("compiler/testData/codegen/boxWithJava/annotations/RetentionInJava.kt");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/boxWithJava/callableReference")
|
@TestMetadata("compiler/testData/codegen/boxWithJava/callableReference")
|
||||||
|
|||||||
+17
-3
@@ -34,6 +34,8 @@ import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes
|
|||||||
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils
|
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils
|
||||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaMember
|
import org.jetbrains.jet.lang.resolve.java.structure.JavaMember
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
||||||
|
import org.jetbrains.jet.lang.descriptors.impl.EnumEntrySyntheticClassDescriptor
|
||||||
|
import org.jetbrains.jet.storage.get
|
||||||
|
|
||||||
public class LazyJavaClassMemberScope(
|
public class LazyJavaClassMemberScope(
|
||||||
c: LazyJavaResolverContextWithTypes,
|
c: LazyJavaResolverContextWithTypes,
|
||||||
@@ -146,11 +148,23 @@ public class LazyJavaClassMemberScope(
|
|||||||
jClass.getInnerClasses().valuesToMap { c -> c.getName() }
|
jClass.getInnerClasses().valuesToMap { c -> c.getName() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val enumEntryIndex = c.storageManager.createLazyValue {
|
||||||
|
jClass.getFields().filter { it.isEnumEntry() }.valuesToMap { f -> f.getName() }
|
||||||
|
}
|
||||||
|
|
||||||
private val nestedClasses = c.storageManager.createMemoizedFunctionWithNullableValues {
|
private val nestedClasses = c.storageManager.createMemoizedFunctionWithNullableValues {
|
||||||
(name: Name) ->
|
(name: Name) ->
|
||||||
val jNestedClass = nestedClassIndex()[name]
|
val jNestedClass = nestedClassIndex()[name]
|
||||||
if (jNestedClass == null)
|
if (jNestedClass == null) {
|
||||||
null
|
val field = enumEntryIndex()[name]
|
||||||
|
if (field != null) {
|
||||||
|
EnumEntrySyntheticClassDescriptor.create(c.storageManager, getContainingDeclaration(), name,
|
||||||
|
c.storageManager.createLazyValue {
|
||||||
|
memberIndex().getAllFieldNames() + memberIndex().getAllMetodNames()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else null
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
// TODO: this caching is a temporary workaround, should be replaced with properly caching the whole LazyJavaSubModule
|
// TODO: this caching is a temporary workaround, should be replaced with properly caching the whole LazyJavaSubModule
|
||||||
val alreadyResolved = c.javaResolverCache.getClass(jNestedClass)
|
val alreadyResolved = c.javaResolverCache.getClass(jNestedClass)
|
||||||
@@ -164,7 +178,7 @@ public class LazyJavaClassMemberScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassifier(name: Name): ClassifierDescriptor? = if (enumClassObject) null else nestedClasses(name)
|
override fun getClassifier(name: Name): ClassifierDescriptor? = if (enumClassObject) null else nestedClasses(name)
|
||||||
override fun getAllClassNames(): Collection<Name> = nestedClassIndex().keySet()
|
override fun getAllClassNames(): Collection<Name> = nestedClassIndex().keySet() + enumEntryIndex().keySet()
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> = listOf()
|
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> = listOf()
|
||||||
|
|||||||
+1
-1
@@ -59,7 +59,7 @@ public abstract class LazyJavaMemberScope(
|
|||||||
|
|
||||||
override fun getContainingDeclaration() = _containingDeclaration
|
override fun getContainingDeclaration() = _containingDeclaration
|
||||||
|
|
||||||
private val memberIndex = c.storageManager.createLazyValue {
|
protected val memberIndex: NotNullLazyValue<MemberIndex> = c.storageManager.createLazyValue {
|
||||||
computeMemberIndex()
|
computeMemberIndex()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user