From 124b7603bda8446a88dd62b7e1aaed826a153692 Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Mon, 25 Oct 2021 19:00:44 +0300 Subject: [PATCH] [java, spring] Physical annotations for Java `record` parameters (EA-393492) GitOrigin-RevId: 55713ebfb02085b73553a2a288a2372debd3f27e --- .../LightRecordCanonicalConstructor.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightRecordCanonicalConstructor.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightRecordCanonicalConstructor.java index 8985d03f4bf9..805ba0e129a7 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightRecordCanonicalConstructor.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightRecordCanonicalConstructor.java @@ -3,6 +3,7 @@ package com.intellij.psi.impl.light; import com.intellij.psi.*; import com.intellij.psi.impl.ElementPresentationUtil; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.ui.IconManager; import com.intellij.ui.icons.RowIcon; import com.intellij.util.BitUtil; @@ -13,6 +14,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.util.Objects; public class LightRecordCanonicalConstructor extends LightMethod implements SyntheticElement { public LightRecordCanonicalConstructor(@NotNull PsiMethod method, @@ -89,6 +91,31 @@ public class LightRecordCanonicalConstructor extends LightMethod implements Synt myWrapper = wrapper; } + public @Nullable PsiRecordComponent getRecordComponent() { + PsiClass psiClass = PsiTreeUtil.getParentOfType(this, PsiClass.class); + if (psiClass == null) return null; + PsiRecordComponent[] recordComponents = psiClass.getRecordComponents(); + for (PsiRecordComponent recordComponent : recordComponents) { + if (Objects.equals(recordComponent.getName(), this.getName())) { + return recordComponent; + } + } + return null; + } + + @Override + public @Nullable PsiModifierList getModifierList() { + PsiRecordComponent recordComponent = getRecordComponent(); + if (recordComponent == null) return super.getModifierList(); + + return new LightModifierList(getPrototype()) { + @Override + public PsiAnnotation @NotNull [] getAnnotations() { + return recordComponent.getAnnotations(); + } + }; + } + @Override public PsiElement getParent() { return myWrapper;