[Analysis API] Shorten qualifier of unresolved reference
^KTIJ-25115
This commit is contained in:
committed by
teamcity
parent
2d945b7226
commit
ed7a3299f0
+13
-6
@@ -365,15 +365,22 @@ private class ElementsToShortenCollector(
|
||||
}
|
||||
|
||||
private fun processTypeRef(resolvedTypeRef: FirResolvedTypeRef) {
|
||||
val wholeTypeReference = resolvedTypeRef.realPsi as? KtTypeReference ?: return
|
||||
if (!wholeTypeReference.textRange.intersects(selection)) return
|
||||
val nonErrorResolvedTypeRef = if (resolvedTypeRef is FirErrorTypeRef) {
|
||||
resolvedTypeRef.partiallyResolvedTypeRef as? FirResolvedTypeRef ?: resolvedTypeRef
|
||||
} else resolvedTypeRef
|
||||
|
||||
val wholeClassifierId = resolvedTypeRef.type.lowerBoundIfFlexible().candidateClassId ?: return
|
||||
val wholeTypeElement = wholeTypeReference.typeElement?.unwrapNullability() as? KtUserType ?: return
|
||||
val typeElement = when (val realPsi = nonErrorResolvedTypeRef.realPsi) {
|
||||
is KtTypeReference -> realPsi.typeElement
|
||||
is KtNameReferenceExpression -> realPsi.parent as? KtTypeElement
|
||||
else -> null
|
||||
}?.unwrapNullability() as? KtUserType ?: return
|
||||
|
||||
if (wholeTypeElement.qualifier == null) return
|
||||
if (!typeElement.textRange.intersects(selection)) return
|
||||
if (typeElement.qualifier == null) return
|
||||
|
||||
findTypeToShorten(wholeClassifierId, wholeTypeElement)?.let(::addElementToShorten)
|
||||
val classifierId = nonErrorResolvedTypeRef.type.lowerBoundIfFlexible().candidateClassId ?: return
|
||||
|
||||
findTypeToShorten(classifierId, typeElement)?.let(::addElementToShorten)
|
||||
}
|
||||
|
||||
val ConeKotlinType.candidateClassId: ClassId?
|
||||
|
||||
+24
@@ -46,6 +46,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/referenceShortener/referenceShortener"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaiton.kt")
|
||||
public void testAnnotaiton() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/annotaiton.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classScopes.kt")
|
||||
public void testClassScopes() throws Exception {
|
||||
@@ -76,6 +82,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
|
||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/classType2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classWithWrongNumberOfTypeArguments.kt")
|
||||
public void testClassWithWrongNumberOfTypeArguments() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/classWithWrongNumberOfTypeArguments.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classesWithSameName.kt")
|
||||
public void testClassesWithSameName() throws Exception {
|
||||
@@ -250,6 +262,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
|
||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/parameterTypeTopLevelTypeLoses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("qualifierOfUnresolvedReference.kt")
|
||||
public void testQualifierOfUnresolvedReference() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/qualifierOfUnresolvedReference.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiver.kt")
|
||||
public void testReceiver() throws Exception {
|
||||
@@ -352,6 +370,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
|
||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/superClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("superEntry.kt")
|
||||
public void testSuperEntry() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/superEntry.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("typeParams.kt")
|
||||
public void testTypeParams() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user