[FIR IDE] Fix TypeRef resolve to error type caused by invalid number of arguments
This commit is contained in:
Generated
+5
@@ -429,6 +429,11 @@ public class FirReferenceResolveTestGenerated extends AbstractFirReferenceResolv
|
|||||||
runTest("idea/testData/resolve/references/WrongNumberOfTypeArguments2.kt");
|
runTest("idea/testData/resolve/references/WrongNumberOfTypeArguments2.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("WrongNumberOfTypeArguments3.kt")
|
||||||
|
public void testWrongNumberOfTypeArguments3() throws Exception {
|
||||||
|
runTest("idea/testData/resolve/references/WrongNumberOfTypeArguments3.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("WrongNumberOfTypeArgumentsInSupertype.kt")
|
@TestMetadata("WrongNumberOfTypeArgumentsInSupertype.kt")
|
||||||
public void testWrongNumberOfTypeArgumentsInSupertype() throws Exception {
|
public void testWrongNumberOfTypeArgumentsInSupertype() throws Exception {
|
||||||
runTest("idea/testData/resolve/references/WrongNumberOfTypeArgumentsInSupertype.kt");
|
runTest("idea/testData/resolve/references/WrongNumberOfTypeArgumentsInSupertype.kt");
|
||||||
|
|||||||
+13
-3
@@ -16,14 +16,17 @@ import org.jetbrains.kotlin.fir.resolve.calls.SyntheticPropertySymbol
|
|||||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError
|
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError
|
||||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
|
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
|
||||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeOperatorAmbiguityError
|
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeOperatorAmbiguityError
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeWrongNumberOfTypeArgumentsError
|
||||||
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
||||||
import org.jetbrains.kotlin.fir.types.ConeLookupTagBasedType
|
import org.jetbrains.kotlin.fir.types.ConeLookupTagBasedType
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.classId
|
import org.jetbrains.kotlin.fir.types.classId
|
||||||
import org.jetbrains.kotlin.idea.fir.*
|
import org.jetbrains.kotlin.idea.fir.getCandidateSymbols
|
||||||
|
import org.jetbrains.kotlin.idea.fir.isImplicitFunctionCall
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFir
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFir
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFirSafe
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFirSafe
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
|
||||||
@@ -42,8 +45,15 @@ import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
|
|||||||
|
|
||||||
internal object FirReferenceResolveHelper {
|
internal object FirReferenceResolveHelper {
|
||||||
fun FirResolvedTypeRef.toTargetSymbol(session: FirSession, symbolBuilder: KtSymbolByFirBuilder): KtSymbol? {
|
fun FirResolvedTypeRef.toTargetSymbol(session: FirSession, symbolBuilder: KtSymbolByFirBuilder): KtSymbol? {
|
||||||
val type = type as? ConeLookupTagBasedType ?: return null
|
|
||||||
val symbol = type.lookupTag.toSymbol(session) as? AbstractFirBasedSymbol<*>
|
val type = type as? ConeLookupTagBasedType
|
||||||
|
val resolvedSymbol = type?.lookupTag?.toSymbol(session) as? AbstractFirBasedSymbol<*>
|
||||||
|
|
||||||
|
val symbol = resolvedSymbol ?: run {
|
||||||
|
val diagnostic = (this as? FirErrorTypeRef)?.diagnostic
|
||||||
|
(diagnostic as? ConeWrongNumberOfTypeArgumentsError)?.type
|
||||||
|
}
|
||||||
|
|
||||||
return symbol?.fir?.buildSymbol(symbolBuilder)
|
return symbol?.fir?.buildSymbol(symbolBuilder)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package foo
|
||||||
|
|
||||||
|
class CC<T>
|
||||||
|
class DD<T, T2>
|
||||||
|
|
||||||
|
val v1 = D<caret>D<C<caret>C>
|
||||||
|
|
||||||
|
// REF1: (foo).DD
|
||||||
|
// REF2: (foo).CC
|
||||||
+5
@@ -429,6 +429,11 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest
|
|||||||
runTest("idea/testData/resolve/references/WrongNumberOfTypeArguments2.kt");
|
runTest("idea/testData/resolve/references/WrongNumberOfTypeArguments2.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("WrongNumberOfTypeArguments3.kt")
|
||||||
|
public void testWrongNumberOfTypeArguments3() throws Exception {
|
||||||
|
runTest("idea/testData/resolve/references/WrongNumberOfTypeArguments3.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("WrongNumberOfTypeArgumentsInSupertype.kt")
|
@TestMetadata("WrongNumberOfTypeArgumentsInSupertype.kt")
|
||||||
public void testWrongNumberOfTypeArgumentsInSupertype() throws Exception {
|
public void testWrongNumberOfTypeArgumentsInSupertype() throws Exception {
|
||||||
runTest("idea/testData/resolve/references/WrongNumberOfTypeArgumentsInSupertype.kt");
|
runTest("idea/testData/resolve/references/WrongNumberOfTypeArgumentsInSupertype.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user