From 050920691a722700279f3e51327cec4cd690ad04 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Tue, 3 Dec 2024 14:36:49 +0100 Subject: [PATCH] [java-analysis] javaSimplePropertyGist: remove the getter/setter name restriction Now, index can map getter/setter -> field for any name, not only with get/set/is prefix. This is already done for bytecode index, now for source index as well Follow-up for IDEA-364131 GitOrigin-RevId: c8c0e09d94a12bfedf575f5aa3f2d79dabe34834 --- .../psi/impl/JavaSimplePropertyGist.kt | 29 ++++--------------- ...rVsDirectAccessRecordOverriddenGetter.java | 15 ++++++++++ .../DataFlowInspection21Test.java | 1 + 3 files changed, 22 insertions(+), 23 deletions(-) create mode 100644 java/java-tests/testData/inspection/dataFlow/fixture/GetterVsDirectAccessRecordOverriddenGetter.java diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/JavaSimplePropertyGist.kt b/java/java-indexing-impl/src/com/intellij/psi/impl/JavaSimplePropertyGist.kt index 748677154869..ad2f802a85f6 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/JavaSimplePropertyGist.kt +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/JavaSimplePropertyGist.kt @@ -8,7 +8,6 @@ import com.intellij.psi.JavaPsiFacade import com.intellij.psi.JavaTokenType import com.intellij.psi.PsiField import com.intellij.psi.PsiMethod -import com.intellij.psi.impl.cache.RecordUtil import com.intellij.psi.impl.source.JavaLightStubBuilder import com.intellij.psi.impl.source.JavaLightTreeUtil import com.intellij.psi.impl.source.tree.ElementType @@ -51,7 +50,7 @@ private fun resolveFieldFromIndexValue(method: PsiMethod, isGetter: Boolean): Ps } @VisibleForTesting -val javaSimplePropertyGist: PsiFileGist> = GistManager.getInstance().newPsiFileGist("java.simple.property", 2, SimplePropertiesExternalizer()) { file -> +val javaSimplePropertyGist: PsiFileGist> = GistManager.getInstance().newPsiFileGist("java.simple.property", 3, SimplePropertiesExternalizer()) { file -> findSimplePropertyCandidates(file.node.lighterAST) } @@ -82,7 +81,6 @@ private fun findSimplePropertyCandidates(tree: LighterAST): Int2ObjectMap { - if (isGetter) { - if (LightTreeUtil.firstChildOfType(tree, child, JavaElementType.PARAMETER) != null) return null - } - else { + if (LightTreeUtil.firstChildOfType(tree, child, JavaElementType.PARAMETER) == null) { + isGetter = true + if (isVoidReturnType) return null + } else { val parameters = LightTreeUtil.getChildrenOfType(tree, child, JavaElementType.PARAMETER) if (parameters.size != 1) return null + isGetter = false setterParameterName = JavaLightTreeUtil.getNameIdentifierText(tree, parameters[0]) if (setterParameterName == null) return null } @@ -115,21 +113,6 @@ private fun findSimplePropertyCandidates(tree: LighterAST): Int2ObjectMap { if (isConstructor) return null - val name = RecordUtil.intern(tree.charTable, child) - when (PropertyUtilBase.getMethodNameGetterFlavour(name)) { - PropertyUtilBase.GetterFlavour.NOT_A_GETTER -> { - if (PropertyUtilBase.isSetterName(name)) { - isGetter = false - } - else { - return null - } - } - PropertyUtilBase.GetterFlavour.BOOLEAN -> if (!isBooleanReturnType) return null - else -> { - } - } - if (isVoidReturnType && isGetter) return null } } } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/GetterVsDirectAccessRecordOverriddenGetter.java b/java/java-tests/testData/inspection/dataFlow/fixture/GetterVsDirectAccessRecordOverriddenGetter.java new file mode 100644 index 000000000000..c04ce594b47f --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/GetterVsDirectAccessRecordOverriddenGetter.java @@ -0,0 +1,15 @@ + +record Test2(int x, int y) { + static void test(Test2 test2) { + if (test2.x() == test2.y()) { + if (test2.x == test2.y) { + + } + } + + } + + public int x() { + return x; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection21Test.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection21Test.java index 5cd18feb7f29..3050f595062a 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection21Test.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection21Test.java @@ -147,6 +147,7 @@ public class DataFlowInspection21Test extends DataFlowInspectionTestCase { doTest(); } public void testGetterVsDirectAccess() { doTest(); } + public void testGetterVsDirectAccessRecordOverriddenGetter() { doTest(); } public void testGetterVsDirectAccessNonFinal() { doTest(); } public void testSetterAndGetter() { doTest(); } } \ No newline at end of file