diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java index 617707642019..8348f84afda9 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java @@ -17,15 +17,11 @@ import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.SuggestedNameInfo; import com.intellij.psi.codeStyle.VariableKind; -import com.intellij.psi.impl.light.LightRecordField; import com.intellij.psi.impl.source.javadoc.PsiDocParamRef; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.javadoc.PsiDocTag; import com.intellij.psi.javadoc.PsiDocTagValue; -import com.intellij.psi.util.PropertyUtilBase; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiUtil; -import com.intellij.psi.util.PsiUtilCore; +import com.intellij.psi.util.*; import com.intellij.refactoring.introduceField.InplaceIntroduceFieldPopup; import com.intellij.refactoring.introduceVariable.IntroduceVariableBase; import com.intellij.util.ArrayUtil; @@ -423,7 +419,8 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor { if (staticContext && (modifierList != null && !modifierList.hasModifierProperty(PsiModifier.STATIC))) continue; if (fieldType.equals(varType)) { - final String getterName = field instanceof LightRecordField ? field.getName() : PropertyUtilBase.suggestGetterName(field); + final String getterName = JavaPsiRecordUtil.getComponentForField(field) != null ? + field.getName() : PropertyUtilBase.suggestGetterName(field); if ((psiClass.findMethodsByName(getterName, true).length == 0 || psiClass.findMethodBySignature(GenerateMembersUtil.generateGetterPrototype(field), true) == null)) { propertyHandlers.add(getterName); diff --git a/java/java-psi-api/src/com/intellij/psi/util/JavaPsiRecordUtil.java b/java/java-psi-impl/src/com/intellij/psi/util/JavaPsiRecordUtil.java similarity index 89% rename from java/java-psi-api/src/com/intellij/psi/util/JavaPsiRecordUtil.java rename to java/java-psi-impl/src/com/intellij/psi/util/JavaPsiRecordUtil.java index d2634dd4046b..991db706dc6b 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/JavaPsiRecordUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/util/JavaPsiRecordUtil.java @@ -1,7 +1,8 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.psi.util; import com.intellij.psi.*; +import com.intellij.psi.impl.light.LightRecordField; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -45,6 +46,15 @@ public class JavaPsiRecordUtil { return null; } + /** + * @param field synthetic field that corresponds to the record component + * @return the corresponding record component; null if given field doesn't correspond to the record component. + */ + @Nullable + public static PsiRecordComponent getComponentForField(@NotNull PsiField field) { + return field instanceof LightRecordField ? ((LightRecordField)field).getRecordComponent() : null; + } + /** * @param method method to check * @return true if given method is a compact constructor (has no parameter list), diff --git a/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementFactory.java b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementFactory.java index b7916724005a..8a656d241c55 100644 --- a/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementFactory.java +++ b/plugins/generate-tostring/src/org/jetbrains/java/generate/element/ElementFactory.java @@ -17,7 +17,7 @@ package org.jetbrains.java.generate.element; import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.*; -import com.intellij.psi.impl.light.LightRecordField; +import com.intellij.psi.util.JavaPsiRecordUtil; import com.intellij.psi.util.PropertyUtilBase; import org.jetbrains.java.generate.psi.PsiAdapter; @@ -75,7 +75,7 @@ public class ElementFactory { if (PsiAdapter.isConstantField(field)) fe.setConstant(true); if (PsiAdapter.isEnumField(field)) fe.setEnum(true); - if (field instanceof LightRecordField) fe.setRecordComponent(true); + if (JavaPsiRecordUtil.getComponentForField(field) != null) fe.setRecordComponent(true); PsiModifierList modifiers = field.getModifierList(); if (modifiers != null) { if (modifiers.hasModifierProperty(PsiModifier.TRANSIENT)) fe.setModifierTransient(true);