[FIR] Complete types of array literals in annotations
This commit is contained in:
+4
@@ -0,0 +1,4 @@
|
|||||||
|
annotation class Ann(vararg val strings: String)
|
||||||
|
|
||||||
|
@Ann(strings = ["hello"])
|
||||||
|
class A
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
FILE: namedArrayInAnnotation.kt
|
||||||
|
public final annotation class Ann : R|kotlin/Annotation| {
|
||||||
|
public constructor(vararg strings: R|kotlin/Array<out kotlin/String>|): R|Ann| {
|
||||||
|
super<R|kotlin/Any|>()
|
||||||
|
}
|
||||||
|
|
||||||
|
public final val strings: R|kotlin/Array<out kotlin/String>| = R|<local>/strings|
|
||||||
|
public get(): R|kotlin/Array<out kotlin/String>|
|
||||||
|
|
||||||
|
}
|
||||||
|
@R|Ann|(vararg(strings = <implicitArrayOf>(String(hello)))) public final class A : R|kotlin/Any| {
|
||||||
|
public constructor(): R|A| {
|
||||||
|
super<R|kotlin/Any|>()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Generated
+5
@@ -530,6 +530,11 @@ public class FirDiagnosticsTestGenerated extends AbstractFirDiagnosticsTest {
|
|||||||
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/lambdaInUnresolvedCall.kt");
|
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/lambdaInUnresolvedCall.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("namedArrayInAnnotation.kt")
|
||||||
|
public void testNamedArrayInAnnotation() throws Exception {
|
||||||
|
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/namedArrayInAnnotation.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("operatorsOverLiterals.kt")
|
@TestMetadata("operatorsOverLiterals.kt")
|
||||||
public void testOperatorsOverLiterals() throws Exception {
|
public void testOperatorsOverLiterals() throws Exception {
|
||||||
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/operatorsOverLiterals.kt");
|
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/operatorsOverLiterals.kt");
|
||||||
|
|||||||
+5
@@ -530,6 +530,11 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos
|
|||||||
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/lambdaInUnresolvedCall.kt");
|
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/lambdaInUnresolvedCall.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("namedArrayInAnnotation.kt")
|
||||||
|
public void testNamedArrayInAnnotation() throws Exception {
|
||||||
|
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/namedArrayInAnnotation.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("operatorsOverLiterals.kt")
|
@TestMetadata("operatorsOverLiterals.kt")
|
||||||
public void testOperatorsOverLiterals() throws Exception {
|
public void testOperatorsOverLiterals() throws Exception {
|
||||||
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/operatorsOverLiterals.kt");
|
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/operatorsOverLiterals.kt");
|
||||||
|
|||||||
+13
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.FirErrorReferenceWithCandidate
|
|||||||
import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate
|
import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.varargElementType
|
import org.jetbrains.kotlin.fir.resolve.calls.varargElementType
|
||||||
import org.jetbrains.kotlin.fir.resolve.constructFunctionalTypeRef
|
import org.jetbrains.kotlin.fir.resolve.constructFunctionalTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.inference.inferenceComponents
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
|
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
|
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.returnType
|
import org.jetbrains.kotlin.fir.resolve.inference.returnType
|
||||||
@@ -34,6 +35,7 @@ import org.jetbrains.kotlin.fir.types.builder.buildStarProjection
|
|||||||
import org.jetbrains.kotlin.fir.types.builder.buildTypeProjectionWithVariance
|
import org.jetbrains.kotlin.fir.types.builder.buildTypeProjectionWithVariance
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.NewCommonSuperTypeCalculator
|
||||||
import org.jetbrains.kotlin.types.AbstractTypeApproximator
|
import org.jetbrains.kotlin.types.AbstractTypeApproximator
|
||||||
import org.jetbrains.kotlin.types.TypeApproximatorConfiguration
|
import org.jetbrains.kotlin.types.TypeApproximatorConfiguration
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
@@ -537,6 +539,17 @@ class FirCallCompletionResultsWriterTransformer(
|
|||||||
return constExpression.transform(integerApproximator, expectedType)
|
return constExpression.transform(integerApproximator, expectedType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun transformArrayOfCall(arrayOfCall: FirArrayOfCall, data: ExpectedArgumentType?): CompositeTransformResult<FirStatement> {
|
||||||
|
if (arrayOfCall.typeRef !is FirImplicitTypeRef) return arrayOfCall.compose()
|
||||||
|
val expectedArrayType = data?.getExpectedType(arrayOfCall)
|
||||||
|
val expectedArrayElementType = expectedArrayType?.arrayElementType()
|
||||||
|
arrayOfCall.transformChildren(this, expectedArrayElementType?.toExpectedType())
|
||||||
|
val arrayElementType = session.inferenceComponents.ctx.commonSuperTypeOrNull(arrayOfCall.arguments.map { it.typeRef.coneType })
|
||||||
|
?: session.builtinTypes.nullableAnyType.type
|
||||||
|
arrayOfCall.resultType = arrayOfCall.typeRef.resolvedTypeFromPrototype(arrayElementType.createArrayOf())
|
||||||
|
return arrayOfCall.compose()
|
||||||
|
}
|
||||||
|
|
||||||
private fun FirNamedReferenceWithCandidate.toResolvedReference() = if (this is FirErrorReferenceWithCandidate) {
|
private fun FirNamedReferenceWithCandidate.toResolvedReference() = if (this is FirErrorReferenceWithCandidate) {
|
||||||
buildErrorNamedReference {
|
buildErrorNamedReference {
|
||||||
source = this@toResolvedReference.source
|
source = this@toResolvedReference.source
|
||||||
|
|||||||
Reference in New Issue
Block a user