diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt index ae9c1d3201b..2c30b8fb8d6 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt @@ -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 = if (tooComplex) super.getOwnMethods() else _ownMethods private fun asJavaMethods(ktFunction: KtFunction, forceStatic: Boolean): Collection { + 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) { diff --git a/compiler/testData/asJava/ultraLightClasses/jvmSynthetic.kt b/compiler/testData/asJava/ultraLightClasses/jvmSynthetic.kt new file mode 100644 index 00000000000..1daee751ed7 --- /dev/null +++ b/compiler/testData/asJava/ultraLightClasses/jvmSynthetic.kt @@ -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 +} diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt index f4bad05bd8d..492155bd69a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt @@ -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 } diff --git a/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java index 824d6bb308a..cbc5f733fe5 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java @@ -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");