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:
+12
@@ -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")
|
||||
|
||||
+14
-2
@@ -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
|
||||
|
||||
+12
@@ -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")
|
||||
|
||||
+12
@@ -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")
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
dependency.Bar
|
||||
Vendored
+11
@@ -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
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
// FILE: main.kt
|
||||
package test
|
||||
|
||||
import dependency.Bar
|
||||
|
||||
fun usage(vararg p: Bar) {}
|
||||
|
||||
// FILE: dependency.kt
|
||||
package dependency
|
||||
|
||||
class Bar
|
||||
Reference in New Issue
Block a user