SLC: fix non-last vararg parameter type
^KT-57547 Fixed
This commit is contained in:
-7
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsPr
|
||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.toOptionalFilter
|
||||
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
|
||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
||||
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
|
||||
|
||||
internal class SymbolLightParameter(
|
||||
@@ -43,10 +42,4 @@ internal class SymbolLightParameter(
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private val isVararg: Boolean by lazyPub {
|
||||
parameterSymbolPointer.withSymbol(ktModule) { it.isVararg }
|
||||
}
|
||||
|
||||
override fun isVarArgs() = isVararg
|
||||
}
|
||||
+16
-3
@@ -48,8 +48,15 @@ internal abstract class SymbolLightParameterCommon(
|
||||
|
||||
abstract override fun getModifierList(): PsiModifierList
|
||||
|
||||
protected open fun isDeclaredAsVararg(): Boolean =
|
||||
parameterSymbolPointer.withSymbol(ktModule) { it.isVararg }
|
||||
|
||||
override fun isVarArgs() =
|
||||
// true only if this is "last" `vararg`
|
||||
containingMethod.parameterList.parameters.lastOrNull() == this && isDeclaredAsVararg()
|
||||
|
||||
protected open fun nullabilityType(): NullabilityType {
|
||||
if (isVarArgs) return NullabilityType.NotNull
|
||||
if (isDeclaredAsVararg()) return NullabilityType.NotNull
|
||||
|
||||
val nullabilityApplicable = !containingMethod.hasModifierProperty(PsiModifier.PRIVATE) &&
|
||||
!containingMethod.containingClass.let { it.isAnnotationType || it.isEnum }
|
||||
@@ -83,8 +90,14 @@ internal abstract class SymbolLightParameterCommon(
|
||||
}
|
||||
} ?: nonExistentType()
|
||||
|
||||
if (parameterSymbol.isVararg) {
|
||||
PsiEllipsisType(convertedType, convertedType.annotationProvider)
|
||||
if (isDeclaredAsVararg()) {
|
||||
if (isVarArgs) {
|
||||
// last vararg
|
||||
PsiEllipsisType(convertedType, convertedType.annotationProvider)
|
||||
} else {
|
||||
// non-last vararg
|
||||
PsiArrayType(convertedType, convertedType.annotationProvider)
|
||||
}
|
||||
} else {
|
||||
convertedType
|
||||
}
|
||||
|
||||
+1
@@ -64,6 +64,7 @@ internal class SymbolLightSetterParameter(
|
||||
override fun nullabilityType(): NullabilityType =
|
||||
if (containingPropertySymbolPointer.withSymbol(ktModule) { it.isLateInit }) NullabilityType.NotNull else super.nullabilityType()
|
||||
|
||||
override fun isDeclaredAsVararg(): Boolean = false
|
||||
|
||||
override fun isVarArgs() = false
|
||||
}
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ public abstract class A /* A*/ {
|
||||
}
|
||||
|
||||
public final class AAA /* AAA*/ {
|
||||
public /* vararg */ AAA(@org.jetbrains.annotations.NotNull() int..., @org.jetbrains.annotations.NotNull() kotlin.jvm.functions.Function0<kotlin.Unit>);// .ctor(int[], kotlin.jvm.functions.Function0<kotlin.Unit>)
|
||||
public /* vararg */ AAA(@org.jetbrains.annotations.NotNull() int[], @org.jetbrains.annotations.NotNull() kotlin.jvm.functions.Function0<kotlin.Unit>);// .ctor(int[], kotlin.jvm.functions.Function0<kotlin.Unit>)
|
||||
}
|
||||
|
||||
public final class B /* B*/ {
|
||||
|
||||
Reference in New Issue
Block a user