Support @JvmSynthetic in ultra-light classes
This commit is contained in:
@@ -194,6 +194,7 @@ class KtUltraLightClass(classOrObject: KtClassOrObject, private val support: Ult
|
||||
|
||||
private fun propertyField(property: KtProperty, generateUniqueName: (String) -> String, forceStatic: Boolean): KtLightField? {
|
||||
if (!hasBackingField(property)) return null
|
||||
if (property.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME)) return null
|
||||
|
||||
val hasDelegate = property.hasDelegate()
|
||||
val fieldName = generateUniqueName((property.name ?: "") + (if (hasDelegate) "\$delegate" else ""))
|
||||
@@ -312,6 +313,8 @@ class KtUltraLightClass(classOrObject: KtClassOrObject, private val support: Ult
|
||||
override fun getOwnMethods(): List<KtLightMethod> = if (tooComplex) super.getOwnMethods() else _ownMethods
|
||||
|
||||
private fun asJavaMethods(ktFunction: KtFunction, forceStatic: Boolean): Collection<KtLightMethod> {
|
||||
if (ktFunction.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME)) return emptyList()
|
||||
|
||||
val basicMethod = asJavaMethod(ktFunction, forceStatic)
|
||||
|
||||
if (!ktFunction.hasAnnotation(JVM_OVERLOADS_FQ_NAME)) return listOf(basicMethod)
|
||||
@@ -475,7 +478,7 @@ class KtUltraLightClass(classOrObject: KtClassOrObject, private val support: Ult
|
||||
if (declaration is KtProperty && declaration.hasDelegate()) {
|
||||
return true
|
||||
}
|
||||
if (accessor?.hasModifier(PRIVATE_KEYWORD) == true) {
|
||||
if (accessor?.hasModifier(PRIVATE_KEYWORD) == true || accessor?.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME) == true) {
|
||||
return false
|
||||
}
|
||||
if (!isPrivate || accessor?.hasBody() == true) {
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
class A {
|
||||
@JvmSynthetic
|
||||
fun foo() {}
|
||||
|
||||
@JvmSynthetic
|
||||
var x = 1
|
||||
|
||||
@JvmField
|
||||
@JvmSynthetic
|
||||
var y = 1
|
||||
|
||||
var z = 1
|
||||
@JvmSynthetic get
|
||||
@JvmSynthetic set
|
||||
}
|
||||
+2
@@ -57,6 +57,7 @@ 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.jvm.annotations.JVM_OVERLOADS_FQ_NAME
|
||||
import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_SYNTHETIC_ANNOTATION_FQ_NAME
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException
|
||||
import java.util.concurrent.ConcurrentMap
|
||||
@@ -117,6 +118,7 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
|
||||
if (name == JVM_WILDCARD_ANNOTATION_FQ_NAME.shortName()) return false
|
||||
if (name == JvmAbi.JVM_FIELD_ANNOTATION_FQ_NAME.shortName()) return false
|
||||
if (name == JVM_OVERLOADS_FQ_NAME.shortName()) return false
|
||||
if (name == JVM_SYNTHETIC_ANNOTATION_FQ_NAME.shortName()) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
+5
@@ -114,6 +114,11 @@ public class UltraLightClassLoadingTestGenerated extends AbstractUltraLightClass
|
||||
runTest("compiler/testData/asJava/ultraLightClasses/jvmOverloads.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("jvmSynthetic.kt")
|
||||
public void testJvmSynthetic() throws Exception {
|
||||
runTest("compiler/testData/asJava/ultraLightClasses/jvmSynthetic.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("jvmWildcardAnnotations.kt")
|
||||
public void testJvmWildcardAnnotations() throws Exception {
|
||||
runTest("compiler/testData/asJava/ultraLightClasses/jvmWildcardAnnotations.kt");
|
||||
|
||||
Reference in New Issue
Block a user