提交 04017b00 编写于 作者: I Igor Yakovlev

[FIR IDE] Fix TypeRef resolve to error type caused by invalid number of arguments

上级 f9e5584a
......@@ -429,6 +429,11 @@ public class FirReferenceResolveTestGenerated extends AbstractFirReferenceResolv
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")
public void testWrongNumberOfTypeArgumentsInSupertype() throws Exception {
runTest("idea/testData/resolve/references/WrongNumberOfTypeArgumentsInSupertype.kt");
......
......@@ -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.ConeInapplicableCandidateError
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.toSymbol
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
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.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.getOrBuildFirSafe
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
......@@ -42,8 +45,15 @@ import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
internal object FirReferenceResolveHelper {
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)
}
......
package foo
class CC<T>
class DD<T, T2>
val v1 = D<caret>D<C<caret>C>
// REF1: (foo).DD
// REF2: (foo).CC
......@@ -429,6 +429,11 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest
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")
public void testWrongNumberOfTypeArgumentsInSupertype() throws Exception {
runTest("idea/testData/resolve/references/WrongNumberOfTypeArgumentsInSupertype.kt");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册