diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt index 2326de137cf..6e406362b46 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt @@ -13,7 +13,6 @@ import com.intellij.psi.impl.light.LightMethodBuilder import com.intellij.psi.util.CachedValue import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager -import org.jetbrains.kotlin.asJava.UltraLightClassModifierExtension import org.jetbrains.kotlin.asJava.builder.LightClassData import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightMethod @@ -226,7 +225,7 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor } } - if (isNamedObject()) { + if (isNamedObject() && !this.classOrObject.isLocal) { result.add( KtUltraLightFieldForSourceDeclaration( this.classOrObject, diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt index ec2e2260d40..9040725f20e 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt @@ -18,10 +18,8 @@ import org.jetbrains.kotlin.asJava.elements.convertToLightAnnotationMemberValue import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotated -import org.jetbrains.kotlin.extensions.DeclarationAttributeAltererExtension import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.lexer.KtTokens.EXTERNAL_KEYWORD -import org.jetbrains.kotlin.lexer.KtTokens.REIFIED_KEYWORD +import org.jetbrains.kotlin.lexer.KtTokens.* import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.kotlin.TypeMappingMode import org.jetbrains.kotlin.name.FqName @@ -29,7 +27,7 @@ import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier import org.jetbrains.kotlin.psi.psiUtil.hasSuspendModifier -import org.jetbrains.kotlin.psi.psiUtil.isObjectLiteral +import org.jetbrains.kotlin.psi.psiUtil.isPrivate import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.isPublishedApi @@ -120,6 +118,11 @@ internal class UltraLightMembersCreator( ktFunction.hasExpectModifier() ) return emptyList() + + if (ktFunction.modifierList?.hasSuspendModifier() == true && ktFunction.isPrivate()) { + return emptyList() + } + val basicMethod = asJavaMethod(ktFunction, forceStatic, forcePrivate) val result = mutableListOf(basicMethod) @@ -465,9 +468,21 @@ internal class UltraLightMembersCreator( val setterParameter = ktSetter?.parameter setterPrototype.addParameter( if (setterParameter != null) - KtUltraLightParameterForSource(propertyName, setterParameter, support, setterWrapper, declaration) + KtUltraLightParameterForSource( + name = setterParameter.name ?: propertyName, + kotlinOrigin = setterParameter, + support = support, + method = setterWrapper, + containingDeclaration = declaration + ) else - KtUltraLightParameterForSetterParameter(propertyName, declaration, support, setterWrapper, declaration) + KtUltraLightParameterForSetterParameter( + name = propertyName, + property = declaration, + support = support, + method = setterWrapper, + containingDeclaration = declaration + ) ) result.add(setterWrapper) } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt index ea2f28f82f8..cef26fac21d 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt @@ -13,11 +13,17 @@ import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.asJava.elements.* import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.isSuspendFunctionType +import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME -import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.load.kotlin.TypeMappingMode -import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.KtCallableDeclaration +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtFunction +import org.jetbrains.kotlin.psi.KtParameter +import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.codegen.AsmUtil.LABELED_THIS_PARAMETER +import org.jetbrains.kotlin.codegen.AsmUtil.RECEIVER_PARAMETER_NAME internal class KtUltraLightSuspendContinuationParameter( private val ktFunction: KtFunction, @@ -182,6 +188,13 @@ internal class KtUltraLightParameterForSetterParameter( override fun tryGetKotlinType(): KotlinType? = property.getKotlinType() + override val givenAnnotations: List? + get() = (property.resolve() as? PropertyDescriptor) + ?.setter + ?.valueParameters + ?.firstOrNull() + ?.obtainLightAnnotations(support, this) + override fun isVarArgs(): Boolean = false } @@ -189,7 +202,14 @@ internal class KtUltraLightReceiverParameter( containingDeclaration: KtCallableDeclaration, support: KtUltraLightSupport, method: KtUltraLightMethod -) : KtAbstractUltraLightParameterForDeclaration("\$self", null, support, method, containingDeclaration) { +) : KtAbstractUltraLightParameterForDeclaration( + /** @see org.jetbrains.kotlin.codegen.AsmUtil.getNameForReceiverParameter */ + name = AsmUtil.getLabeledThisName(method.name, LABELED_THIS_PARAMETER, RECEIVER_PARAMETER_NAME), + kotlinOrigin = null, + support = support, + method = method, + containingDeclaration = containingDeclaration +) { override fun isVarArgs(): Boolean = false diff --git a/compiler/testData/asJava/ultraLightClasses/annotationWithSetParamPropertyModifier.java b/compiler/testData/asJava/ultraLightClasses/annotationWithSetParamPropertyModifier.java new file mode 100644 index 00000000000..11f5a760939 --- /dev/null +++ b/compiler/testData/asJava/ultraLightClasses/annotationWithSetParamPropertyModifier.java @@ -0,0 +1,15 @@ +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +public abstract @interface Anno /* Anno*/ { +} + +public final class TestClass /* TestClass*/ { + private int hello; + + @null() + public TestClass(int); + + public final int getHello(); + + public final void setHello(@Anno() int); + +} \ No newline at end of file diff --git a/compiler/testData/asJava/ultraLightClasses/annotationWithSetParamPropertyModifier.kt b/compiler/testData/asJava/ultraLightClasses/annotationWithSetParamPropertyModifier.kt new file mode 100644 index 00000000000..a25e58554ad --- /dev/null +++ b/compiler/testData/asJava/ultraLightClasses/annotationWithSetParamPropertyModifier.kt @@ -0,0 +1,3 @@ +annotation class Anno + +class TestClass(@setparam:Anno var hello: Int) \ No newline at end of file diff --git a/compiler/testData/asJava/ultraLightClasses/coroutines.kt b/compiler/testData/asJava/ultraLightClasses/coroutines.kt index afec85c8808..b3da0b5e423 100644 --- a/compiler/testData/asJava/ultraLightClasses/coroutines.kt +++ b/compiler/testData/asJava/ultraLightClasses/coroutines.kt @@ -3,6 +3,10 @@ class Foo { suspend fun doSomething(foo: Foo): Bar {} } +class Boo { + private suspend fun doSomething(foo: Foo): Bar {} +} + class Bar { fun async(block: suspend () -> T) } diff --git a/compiler/testData/asJava/ultraLightClasses/inferringAnonymousObjectTypes.java b/compiler/testData/asJava/ultraLightClasses/inferringAnonymousObjectTypes.java index 003b00a5162..b06fb250723 100644 --- a/compiler/testData/asJava/ultraLightClasses/inferringAnonymousObjectTypes.java +++ b/compiler/testData/asJava/ultraLightClasses/inferringAnonymousObjectTypes.java @@ -7,9 +7,6 @@ public final class Prop /* Prop*/ { } final class null /* null*/ { - @null() - public static final java.lang.Object INSTANCE; - private (); } @@ -23,9 +20,6 @@ public final class Fun /* Fun*/ { } final class null /* null*/ { - @null() - public static final java.lang.Object INSTANCE; - private (); } @@ -42,9 +36,6 @@ public final class ArrayOfAnonymous /* ArrayOfAnonymous*/ { } final class null /* null*/ { - @null() - public static final java.lang.Object INSTANCE; - private static final java.lang.String fy = "text" /* initializer type: java.lang.String */ /* constant value text */; @org.jetbrains.annotations.NotNull() @@ -70,9 +61,6 @@ final class C /* C*/ { } final class null /* null*/ { - @null() - public static final java.lang.Object INSTANCE; - @org.jetbrains.annotations.NotNull() public java.lang.String toString(); @@ -101,9 +89,6 @@ public final class Sub /* Sub*/ extends Super { } final class null /* null*/ { - @null() - public static final java.lang.Object INSTANCE; - private static final java.lang.String fy = "text" /* initializer type: java.lang.String */ /* constant value text */; @org.jetbrains.annotations.NotNull() @@ -128,9 +113,6 @@ public final class ValidPublicSupertype /* ValidPublicSupertype*/ { } final class null /* null*/ implements java.lang.Runnable { - @null() - public static final java.lang.Runnable INSTANCE; - private (); public void run(); @@ -138,9 +120,6 @@ final class null /* null*/ implements java.lang.Runnable { } final class null /* null*/ implements java.lang.Runnable { - @null() - public static final java.lang.Runnable INSTANCE; - private (); public void run(); @@ -165,9 +144,6 @@ public final class InvalidPublicSupertype /* InvalidPublicSupertype*/ { } final class null /* null*/ implements I, java.lang.Runnable { - @null() - public static final java.lang.Runnable INSTANCE; - private (); public void run(); @@ -175,9 +151,6 @@ final class null /* null*/ implements I, java.lang.Runnable { } final class null /* null*/ implements I, java.lang.Runnable { - @null() - public static final java.lang.Runnable INSTANCE; - private (); public void run(); diff --git a/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java index 8a15f862192..f7c32b56313 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java @@ -28,6 +28,11 @@ public class UltraLightClassLoadingTestGenerated extends AbstractUltraLightClass KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/ultraLightClasses"), Pattern.compile("^(.+)\\.(kt|kts)$"), true); } + @TestMetadata("annotationWithSetParamPropertyModifier.kt") + public void testAnnotationWithSetParamPropertyModifier() throws Exception { + runTest("compiler/testData/asJava/ultraLightClasses/annotationWithSetParamPropertyModifier.kt"); + } + @TestMetadata("annotations.kt") public void testAnnotations() throws Exception { runTest("compiler/testData/asJava/ultraLightClasses/annotations.kt");