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? {
|
private fun propertyField(property: KtProperty, generateUniqueName: (String) -> String, forceStatic: Boolean): KtLightField? {
|
||||||
if (!hasBackingField(property)) return null
|
if (!hasBackingField(property)) return null
|
||||||
|
if (property.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME)) return null
|
||||||
|
|
||||||
val hasDelegate = property.hasDelegate()
|
val hasDelegate = property.hasDelegate()
|
||||||
val fieldName = generateUniqueName((property.name ?: "") + (if (hasDelegate) "\$delegate" else ""))
|
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
|
override fun getOwnMethods(): List<KtLightMethod> = if (tooComplex) super.getOwnMethods() else _ownMethods
|
||||||
|
|
||||||
private fun asJavaMethods(ktFunction: KtFunction, forceStatic: Boolean): Collection<KtLightMethod> {
|
private fun asJavaMethods(ktFunction: KtFunction, forceStatic: Boolean): Collection<KtLightMethod> {
|
||||||
|
if (ktFunction.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME)) return emptyList()
|
||||||
|
|
||||||
val basicMethod = asJavaMethod(ktFunction, forceStatic)
|
val basicMethod = asJavaMethod(ktFunction, forceStatic)
|
||||||
|
|
||||||
if (!ktFunction.hasAnnotation(JVM_OVERLOADS_FQ_NAME)) return listOf(basicMethod)
|
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()) {
|
if (declaration is KtProperty && declaration.hasDelegate()) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (accessor?.hasModifier(PRIVATE_KEYWORD) == true) {
|
if (accessor?.hasModifier(PRIVATE_KEYWORD) == true || accessor?.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME) == true) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if (!isPrivate || accessor?.hasBody() == true) {
|
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.fqNameSafe
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperClassifiers
|
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_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.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException
|
import org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException
|
||||||
import java.util.concurrent.ConcurrentMap
|
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 == JVM_WILDCARD_ANNOTATION_FQ_NAME.shortName()) return false
|
||||||
if (name == JvmAbi.JVM_FIELD_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_OVERLOADS_FQ_NAME.shortName()) return false
|
||||||
|
if (name == JVM_SYNTHETIC_ANNOTATION_FQ_NAME.shortName()) return false
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -114,6 +114,11 @@ public class UltraLightClassLoadingTestGenerated extends AbstractUltraLightClass
|
|||||||
runTest("compiler/testData/asJava/ultraLightClasses/jvmOverloads.kt");
|
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")
|
@TestMetadata("jvmWildcardAnnotations.kt")
|
||||||
public void testJvmWildcardAnnotations() throws Exception {
|
public void testJvmWildcardAnnotations() throws Exception {
|
||||||
runTest("compiler/testData/asJava/ultraLightClasses/jvmWildcardAnnotations.kt");
|
runTest("compiler/testData/asJava/ultraLightClasses/jvmWildcardAnnotations.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user