Fix minor bugs for UL methods and parameters representation

Remove INSTANCE field for local object declarations
Remove private suspend functions create from UL
Add correct extension function parameter name
Add support for setparam annotation modifier
This commit is contained in:
Igor Yakovlev
2019-12-09 20:45:38 +03:00
parent 094de9fb5e
commit 6792d22c31
8 changed files with 72 additions and 38 deletions
@@ -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,
@@ -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)
}
@@ -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<KtLightAbstractAnnotation>?
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
@@ -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);
}
@@ -0,0 +1,3 @@
annotation class Anno
class TestClass(@setparam:Anno var hello: Int)
@@ -3,6 +3,10 @@ class Foo {
suspend fun doSomething(foo: Foo): Bar {}
}
class Boo {
private suspend fun doSomething(foo: Foo): Bar {}
}
class Bar {
fun <T> async(block: suspend () -> T)
}
@@ -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();
@@ -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");