KTIJ-26501 [Analysis API] Do not ignore vararg type references in KtFirImportOptimizer

Turns out they have fake sources, so ignoring all
type qualifiers with fake sources in e1ebbc10d9
was incorrect.

^KTIJ-26501 Fixed
This commit is contained in:
Roman Golyshev
2023-08-03 12:08:38 +02:00
committed by teamcity
parent 7f795f212f
commit 73bfc88613
8 changed files with 73 additions and 2 deletions
@@ -124,6 +124,12 @@ public class Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGene
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedStaticFunctionImportFromJavaChildClass.kt");
}
@Test
@TestMetadata("unusedTypeAsVarargType.kt")
public void testUnusedTypeAsVarargType() throws Exception {
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedTypeAsVarargType.kt");
}
@Test
@TestMetadata("usedAliasedAndRegularImportsFromSamePackage.kt")
public void testUsedAliasedAndRegularImportsFromSamePackage() throws Exception {
@@ -220,6 +226,12 @@ public class Fe10IdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGene
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt");
}
@Test
@TestMetadata("usedTypeAsVarargType.kt")
public void testUsedTypeAsVarargType() throws Exception {
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsVarargType.kt");
}
@Nested
@TestMetadata("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors")
@TestDataPath("$PROJECT_ROOT")
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.fir.components
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.KtRealSourceElementKind
import org.jetbrains.kotlin.analysis.api.components.KtImportOptimizer
import org.jetbrains.kotlin.analysis.api.components.KtImportOptimizerResult
@@ -490,8 +491,11 @@ private sealed interface TypeQualifier {
}
companion object {
val FirResolvedQualifier.isPresentInSource: Boolean
get() = source?.kind is KtRealSourceElementKind
fun createFor(qualifier: FirResolvedQualifier): TypeQualifier? {
if (qualifier.source?.kind !is KtRealSourceElementKind) return null
if (!qualifier.isPresentInSource) return null
val wholeClassId = qualifier.classId ?: return null
val psi = qualifier.psi as? KtExpression ?: return null
@@ -505,8 +509,16 @@ private sealed interface TypeQualifier {
return KtDotExpressionTypeQualifier(wholeClassId, wholeQualifier)
}
private val FirResolvedTypeRef.isPresentInSource: Boolean
get() = when (source?.kind) {
is KtRealSourceElementKind -> true
is KtFakeSourceElementKind.ArrayTypeFromVarargParameter -> true
else -> false
}
fun createFor(typeRef: FirResolvedTypeRef): TypeQualifier? {
if (typeRef.source?.kind !is KtRealSourceElementKind) return null
if (!typeRef.isPresentInSource) return null
val wholeClassId = typeRef.resolvedClassId ?: return null
val psi = typeRef.psi as? KtTypeReference ?: return null
@@ -124,6 +124,12 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGener
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedStaticFunctionImportFromJavaChildClass.kt");
}
@Test
@TestMetadata("unusedTypeAsVarargType.kt")
public void testUnusedTypeAsVarargType() throws Exception {
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedTypeAsVarargType.kt");
}
@Test
@TestMetadata("usedAliasedAndRegularImportsFromSamePackage.kt")
public void testUsedAliasedAndRegularImportsFromSamePackage() throws Exception {
@@ -220,6 +226,12 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiImportOptimizerTestGener
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt");
}
@Test
@TestMetadata("usedTypeAsVarargType.kt")
public void testUsedTypeAsVarargType() throws Exception {
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsVarargType.kt");
}
@Nested
@TestMetadata("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors")
@TestDataPath("$PROJECT_ROOT")
@@ -124,6 +124,12 @@ public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTe
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedStaticFunctionImportFromJavaChildClass.kt");
}
@Test
@TestMetadata("unusedTypeAsVarargType.kt")
public void testUnusedTypeAsVarargType() throws Exception {
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/unusedTypeAsVarargType.kt");
}
@Test
@TestMetadata("usedAliasedAndRegularImportsFromSamePackage.kt")
public void testUsedAliasedAndRegularImportsFromSamePackage() throws Exception {
@@ -220,6 +226,12 @@ public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiImportOptimizerTe
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsTypeParameter.kt");
}
@Test
@TestMetadata("usedTypeAsVarargType.kt")
public void testUsedTypeAsVarargType() throws Exception {
runTest("analysis/analysis-api/testData/components/importOptimizer/analyseImports/usedTypeAsVarargType.kt");
}
@Nested
@TestMetadata("analysis/analysis-api/testData/components/importOptimizer/analyseImports/referencesWithErrors")
@TestDataPath("$PROJECT_ROOT")
@@ -0,0 +1,11 @@
// FILE: main.kt
package test
import dependency.Bar
fun usage(vararg p: dependency.Bar) {}
// FILE: dependency.kt
package dependency
class Bar
@@ -0,0 +1,11 @@
// FILE: main.kt
package test
import dependency.Bar
fun usage(vararg p: Bar) {}
// FILE: dependency.kt
package dependency
class Bar