[Analysis API] Shorten qualifier of unresolved reference

^KTIJ-25115
This commit is contained in:
aleksandrina-streltsova
2023-04-27 18:55:00 +03:00
committed by teamcity
parent 2d945b7226
commit ed7a3299f0
11 changed files with 121 additions and 6 deletions
@@ -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?
@@ -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 {