From 6f9cfe194316af119f5983b94cae6a9a06aa2d90 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 13 Jan 2023 09:41:46 +0100 Subject: [PATCH] [AA] don't treat broken code as function type parameter inspired by KTIJ-23940 --- ...sSourceModuleSymbolByPsiTestGenerated.java | 6 ++ ...sSourceModuleSymbolByPsiTestGenerated.java | 6 ++ .../cases/symbols/AbstractSymbolByPsiTest.kt | 1 + ...sSourceModuleSymbolByPsiTestGenerated.java | 6 ++ ...erNotFunctionalType.descriptors.pretty.txt | 3 + ...parameterNotFunctionalType.descriptors.txt | 65 +++++++++++++++++++ .../parameterNotFunctionalType.kt | 3 + .../parameterNotFunctionalType.pretty.txt | 3 + .../parameterNotFunctionalType.txt | 65 +++++++++++++++++++ .../org/jetbrains/kotlin/psi/KtParameter.java | 3 +- 10 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.descriptors.pretty.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.descriptors.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.kt create mode 100644 analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.pretty.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.txt diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java index 04d0714fc59..1da670fe087 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java @@ -358,5 +358,11 @@ public class Fe10IdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated extends A public void testParameterInlining() throws Exception { runTest("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterInlining.kt"); } + + @Test + @TestMetadata("parameterNotFunctionalType.kt") + public void testParameterNotFunctionalType() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.kt"); + } } } diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java index cfb4938f891..324fe2aa623 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java @@ -358,5 +358,11 @@ public class FirIdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated extends Ab public void testParameterInlining() throws Exception { runTest("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterInlining.kt"); } + + @Test + @TestMetadata("parameterNotFunctionalType.kt") + public void testParameterNotFunctionalType() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.kt"); + } } } diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/AbstractSymbolByPsiTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/AbstractSymbolByPsiTest.kt index 6ae1df46f0e..93098ec07eb 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/AbstractSymbolByPsiTest.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/AbstractSymbolByPsiTest.kt @@ -30,6 +30,7 @@ abstract class AbstractSymbolByPsiTest : AbstractSymbolTest() { is KtDestructuringDeclaration -> false is KtPropertyAccessor -> false is KtParameter -> !this.isFunctionTypeParameter && this.parent !is KtParameterList + is KtNamedFunction -> this.name != null else -> true } } diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java index b1783e18cbd..149d91a51cb 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java @@ -358,5 +358,11 @@ public class FirStandaloneNormalAnalysisSourceModuleSymbolByPsiTestGenerated ext public void testParameterInlining() throws Exception { runTest("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterInlining.kt"); } + + @Test + @TestMetadata("parameterNotFunctionalType.kt") + public void testParameterNotFunctionalType() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.kt"); + } } } diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.descriptors.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.descriptors.pretty.txt new file mode 100644 index 00000000000..e9ba3930f73 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.descriptors.pretty.txt @@ -0,0 +1,3 @@ +fun f(p: (kotlin.Int, ERROR_TYPE(Unresolved type for p2)) -> ERROR(No type specified for unknown element), ``: ERROR(Missed a type for a value parameter )) + +fun ``() \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.descriptors.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.descriptors.txt new file mode 100644 index 00000000000..e64e49cb805 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.descriptors.txt @@ -0,0 +1,65 @@ +KtFunctionSymbol: + annotationsList: [] + callableIdIfNonLocal: /f + contextReceivers: [] + contractEffects: [] + hasStableParameterNames: true + isBuiltinFunctionInvoke: false + isExtension: false + isExternal: false + isInfix: false + isInline: false + isOperator: false + isOverride: false + isStatic: false + isSuspend: false + modality: FINAL + name: f + origin: SOURCE + receiverParameter: null + returnType: kotlin/Unit + symbolKind: TOP_LEVEL + typeParameters: [] + valueParameters: [ + KtValueParameterSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + generatedPrimaryConstructorProperty: null + hasDefaultValue: false + isCrossinline: false + isExtension: false + isImplicitLambdaParameter: false + isNoinline: false + isVararg: false + name: p + origin: SOURCE + receiverParameter: null + returnType: kotlin/Function2 + symbolKind: LOCAL + typeParameters: [] + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + KtValueParameterSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + generatedPrimaryConstructorProperty: null + hasDefaultValue: false + isCrossinline: false + isExtension: false + isImplicitLambdaParameter: false + isNoinline: false + isVararg: false + name: + origin: SOURCE + receiverParameter: null + returnType: ERROR_TYPE + symbolKind: LOCAL + typeParameters: [] + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + ] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.kt b/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.kt new file mode 100644 index 00000000000..178448edfac --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.kt @@ -0,0 +1,3 @@ +// DO_NOT_CHECK_NON_PSI_SYMBOL_RESTORE_K1 +fun f(p: (Int, p2(1,2)) -> Int) { +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.pretty.txt new file mode 100644 index 00000000000..1e294319b8f --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.pretty.txt @@ -0,0 +1,3 @@ +fun f(p: (kotlin.Int, ERROR_TYPE(Symbol not found for p2)) -> ERROR(Unwrapped type is null), ``: ERROR(No type for parameter)) + +fun ``() diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.txt new file mode 100644 index 00000000000..6e983492b9c --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByPsi/valueParameters/parameterNotFunctionalType.txt @@ -0,0 +1,65 @@ +KtFunctionSymbol: + annotationsList: [] + callableIdIfNonLocal: /f + contextReceivers: [] + contractEffects: [] + hasStableParameterNames: true + isBuiltinFunctionInvoke: false + isExtension: false + isExternal: false + isInfix: false + isInline: false + isOperator: false + isOverride: false + isStatic: false + isSuspend: false + modality: FINAL + name: f + origin: SOURCE + receiverParameter: null + returnType: kotlin/Unit + symbolKind: TOP_LEVEL + typeParameters: [] + valueParameters: [ + KtValueParameterSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + generatedPrimaryConstructorProperty: null + hasDefaultValue: false + isCrossinline: false + isExtension: false + isImplicitLambdaParameter: false + isNoinline: false + isVararg: false + name: p + origin: SOURCE + receiverParameter: null + returnType: kotlin/Function2 + symbolKind: LOCAL + typeParameters: [] + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + KtValueParameterSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + generatedPrimaryConstructorProperty: null + hasDefaultValue: false + isCrossinline: false + isExtension: false + isImplicitLambdaParameter: false + isNoinline: false + isVararg: false + name: + origin: SOURCE + receiverParameter: null + returnType: ERROR CLASS: No type for parameter + symbolKind: LOCAL + typeParameters: [] + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + ] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null \ No newline at end of file diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/KtParameter.java b/compiler/psi/src/org/jetbrains/kotlin/psi/KtParameter.java index 5dabef86713..d4f0e236693 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/KtParameter.java +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/KtParameter.java @@ -20,6 +20,7 @@ import com.intellij.lang.ASTNode; import com.intellij.navigation.ItemPresentation; import com.intellij.navigation.ItemPresentationProviders; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiErrorElement; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.SearchScope; import com.intellij.psi.tree.TokenSet; @@ -144,7 +145,7 @@ public class KtParameter extends KtNamedDeclarationStub imp private boolean checkParentOfParentType(Class klass) { // `parent` is supposed to be [KtParameterList] PsiElement parent = getParent(); - if (parent == null) { + if (parent == null || parent.getNextSibling() instanceof PsiErrorElement) { return false; } return klass.isInstance(parent.getParent());