Support JvmWildcard/JvmSuppressWildcard in ultra-light classes
The idea is reusing logic from KotlinTypeMapper for that
This commit is contained in:
+13
-1
@@ -37,6 +37,8 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||
import org.jetbrains.kotlin.asJava.classes.shouldNotBeVisibleAsLightClass
|
||||
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
||||
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
|
||||
import org.jetbrains.kotlin.codegen.state.JVM_SUPPRESS_WILDCARDS_ANNOTATION_FQ_NAME
|
||||
import org.jetbrains.kotlin.codegen.state.JVM_WILDCARD_ANNOTATION_FQ_NAME
|
||||
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
@@ -52,6 +54,7 @@ import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier
|
||||
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperClassifiers
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
@@ -107,9 +110,18 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
|
||||
}
|
||||
|
||||
private fun findTooComplexDeclaration(declaration: KtDeclaration): PsiElement? {
|
||||
fun isNameOfUnsupportedJvmAnnotation(name: Name): Boolean {
|
||||
if (!name.asString().startsWith("Jvm")) return false
|
||||
if (name == JVM_STATIC_ANNOTATION_FQ_NAME.shortName()) return false
|
||||
if (name == JVM_SUPPRESS_WILDCARDS_ANNOTATION_FQ_NAME.shortName()) return false
|
||||
if (name == JVM_WILDCARD_ANNOTATION_FQ_NAME.shortName()) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
fun KtAnnotationEntry.seemsNonTrivial(): Boolean {
|
||||
val name = shortName
|
||||
return name == null || hasAlias(declaration, name) || name.asString().startsWith("Jvm") && name.asString() != "JvmStatic"
|
||||
return name == null || hasAlias(declaration, name) || isNameOfUnsupportedJvmAnnotation(name)
|
||||
}
|
||||
|
||||
if (declaration.hasExpectModifier() ||
|
||||
|
||||
+10
@@ -109,6 +109,11 @@ public class UltraLightClassLoadingTestGenerated extends AbstractUltraLightClass
|
||||
runTest("compiler/testData/asJava/ultraLightClasses/jvmOverloads.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("jvmWildcardAnnotations.kt")
|
||||
public void testJvmWildcardAnnotations() throws Exception {
|
||||
runTest("compiler/testData/asJava/ultraLightClasses/jvmWildcardAnnotations.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("lateinitProperty.kt")
|
||||
public void testLateinitProperty() throws Exception {
|
||||
runTest("compiler/testData/asJava/ultraLightClasses/lateinitProperty.kt");
|
||||
@@ -138,4 +143,9 @@ public class UltraLightClassLoadingTestGenerated extends AbstractUltraLightClass
|
||||
public void testTypeAliases() throws Exception {
|
||||
runTest("compiler/testData/asJava/ultraLightClasses/typeAliases.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("wildcardOptimization.kt")
|
||||
public void testWildcardOptimization() throws Exception {
|
||||
runTest("compiler/testData/asJava/ultraLightClasses/wildcardOptimization.kt");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user