diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java index a1bd95e26dc..395d44a1735 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java @@ -232,6 +232,12 @@ public class Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated exte runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/stringLiteral.kt"); } + @Test + @TestMetadata("underscoreTypeArgument.kt") + public void testUnderscoreTypeArgument() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/underscoreTypeArgument.kt"); + } + @Test @TestMetadata("unresolvedSuper_multipleSuperTypes.kt") public void testUnresolvedSuper_multipleSuperTypes() throws Exception { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt index 25d3ada387c..576151905b7 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt @@ -83,6 +83,9 @@ internal class KtFirExpressionTypeProvider( // `false` does not have a corresponding elements on the FIR side and hence the containing `FirWhenBranch` is returned. In this // case, we simply report null since FIR does not know about it. is FirWhenBranch -> null + + // `listOf<_>(1)` where `expression` is `_` + is FirPlaceholderProjection -> null else -> error("Unexpected ${fir?.let { it::class }} for ${expression::class} with text `${expression.text}`") } } diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated.java index c5d03993b08..923d3614721 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated.java @@ -232,6 +232,12 @@ public class FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated ex runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/stringLiteral.kt"); } + @Test + @TestMetadata("underscoreTypeArgument.kt") + public void testUnderscoreTypeArgument() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/underscoreTypeArgument.kt"); + } + @Test @TestMetadata("unresolvedSuper_multipleSuperTypes.kt") public void testUnresolvedSuper_multipleSuperTypes() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java index 9517a26781f..e68ed219441 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java @@ -232,6 +232,12 @@ public class FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated exten runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/stringLiteral.kt"); } + @Test + @TestMetadata("underscoreTypeArgument.kt") + public void testUnderscoreTypeArgument() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/underscoreTypeArgument.kt"); + } + @Test @TestMetadata("unresolvedSuper_multipleSuperTypes.kt") public void testUnresolvedSuper_multipleSuperTypes() throws Exception { diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/expressionTypeProvider/AbstractHLExpressionTypeTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/expressionTypeProvider/AbstractHLExpressionTypeTest.kt index afcb9f9a015..5f7c539e81e 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/expressionTypeProvider/AbstractHLExpressionTypeTest.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/expressionTypeProvider/AbstractHLExpressionTypeTest.kt @@ -20,7 +20,7 @@ import org.jetbrains.kotlin.types.Variance abstract class AbstractHLExpressionTypeTest : AbstractAnalysisApiSingleFileTest() { override fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) { - val selected = testServices.expressionMarkerProvider.getSelectedElement(ktFile).let { + val selected = testServices.expressionMarkerProvider.getSelectedElementOfTypeByDirective(ktFile, module).let { if (it is KtBlockExpression && it.statements.size == 1 && it.textRange == it.statements.single().textRange) { it.statements.single() } else { @@ -31,7 +31,7 @@ abstract class AbstractHLExpressionTypeTest : AbstractAnalysisApiSingleFileTest( is KtExpression -> selected is KtValueArgument -> selected.getArgumentExpression() else -> null - } ?: error("expect an expression but got ${selected.text}") + } ?: error("expect an expression but got ${selected.text}, ${selected::class.java}") val type = executeOnPooledThreadInReadAction { analyseForTest(expression) { expression.getKtType()?.render(renderer, position = Variance.INVARIANT) } } diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java index 3b34e72a29a..50212443fa3 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java @@ -232,6 +232,12 @@ public class FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerate runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/stringLiteral.kt"); } + @Test + @TestMetadata("underscoreTypeArgument.kt") + public void testUnderscoreTypeArgument() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/underscoreTypeArgument.kt"); + } + @Test @TestMetadata("unresolvedSuper_multipleSuperTypes.kt") public void testUnresolvedSuper_multipleSuperTypes() throws Exception { diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/underscoreTypeArgument.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/underscoreTypeArgument.kt new file mode 100644 index 00000000000..08dc4e4422e --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/underscoreTypeArgument.kt @@ -0,0 +1,5 @@ +// LOOK_UP_FOR_ELEMENT_OF_TYPE: KtNameReferenceExpression + +fun main() { + listOf<_>(1) +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/underscoreTypeArgument.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/underscoreTypeArgument.txt new file mode 100644 index 00000000000..24b887b2b5d --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/underscoreTypeArgument.txt @@ -0,0 +1,2 @@ +expression: _ +type: null