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.annotations.toOptionalFilter
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
|
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.modifierLists.SymbolLightClassModifierList
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
|
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
|
||||||
|
|
||||||
internal class SymbolLightParameter(
|
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
|
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 {
|
protected open fun nullabilityType(): NullabilityType {
|
||||||
if (isVarArgs) return NullabilityType.NotNull
|
if (isDeclaredAsVararg()) return NullabilityType.NotNull
|
||||||
|
|
||||||
val nullabilityApplicable = !containingMethod.hasModifierProperty(PsiModifier.PRIVATE) &&
|
val nullabilityApplicable = !containingMethod.hasModifierProperty(PsiModifier.PRIVATE) &&
|
||||||
!containingMethod.containingClass.let { it.isAnnotationType || it.isEnum }
|
!containingMethod.containingClass.let { it.isAnnotationType || it.isEnum }
|
||||||
@@ -83,8 +90,14 @@ internal abstract class SymbolLightParameterCommon(
|
|||||||
}
|
}
|
||||||
} ?: nonExistentType()
|
} ?: nonExistentType()
|
||||||
|
|
||||||
if (parameterSymbol.isVararg) {
|
if (isDeclaredAsVararg()) {
|
||||||
PsiEllipsisType(convertedType, convertedType.annotationProvider)
|
if (isVarArgs) {
|
||||||
|
// last vararg
|
||||||
|
PsiEllipsisType(convertedType, convertedType.annotationProvider)
|
||||||
|
} else {
|
||||||
|
// non-last vararg
|
||||||
|
PsiArrayType(convertedType, convertedType.annotationProvider)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
convertedType
|
convertedType
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -64,6 +64,7 @@ internal class SymbolLightSetterParameter(
|
|||||||
override fun nullabilityType(): NullabilityType =
|
override fun nullabilityType(): NullabilityType =
|
||||||
if (containingPropertySymbolPointer.withSymbol(ktModule) { it.isLateInit }) NullabilityType.NotNull else super.nullabilityType()
|
if (containingPropertySymbolPointer.withSymbol(ktModule) { it.isLateInit }) NullabilityType.NotNull else super.nullabilityType()
|
||||||
|
|
||||||
|
override fun isDeclaredAsVararg(): Boolean = false
|
||||||
|
|
||||||
override fun isVarArgs() = false
|
override fun isVarArgs() = false
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ public abstract class A /* A*/ {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final class AAA /* AAA*/ {
|
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*/ {
|
public final class B /* B*/ {
|
||||||
|
|||||||
Reference in New Issue
Block a user