From 586bd6da282a916739a4a56a46ecd520fd63143e Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Sat, 28 Dec 2019 13:04:02 +0700 Subject: [PATCH] JavaPsiRecordUtil#isCanonicalConstructor -> isExplicitCanonicalConstructor GitOrigin-RevId: a3c68d4956c23a726118f6eb8b22e45881d84e09 --- .../daemon/impl/analysis/HighlightMethodUtil.java | 4 ++-- .../src/com/intellij/psi/util/JavaPsiRecordUtil.java | 5 +++-- .../src/com/intellij/codeInsight/ExceptionUtil.java | 2 +- .../src/com/intellij/psi/impl/RecordAugmentProvider.java | 2 +- .../psi/impl/light/LightRecordCanonicalConstructor.java | 7 ++----- .../PublicConstructorInNonPublicClassInspection.java | 2 +- .../com/siyeh/ipp/modifiers/ChangeModifierIntention.java | 2 +- 7 files changed, 11 insertions(+), 13 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java index c49a9e18cb1f..d30e25cd289d 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java @@ -1280,7 +1280,7 @@ public class HighlightMethodUtil { PsiMethod ctor = ObjectUtils.tryCast(codeBlock.getParent(), PsiMethod.class); if (ctor != null && ctor.isConstructor()) { if (JavaPsiRecordUtil.isCompactConstructor(ctor) || - JavaPsiRecordUtil.isCanonicalConstructor(ctor)) { + JavaPsiRecordUtil.isExplicitCanonicalConstructor(ctor)) { String message = JavaErrorMessages.message("record.constructor.call.in.canonical"); return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(methodCall).descriptionAndTooltip(message).create(); } @@ -1953,7 +1953,7 @@ public class HighlightMethodUtil { } return Collections.emptyList(); } - if (JavaPsiRecordUtil.isCanonicalConstructor(method)) { + if (JavaPsiRecordUtil.isExplicitCanonicalConstructor(method)) { PsiParameter[] parameters = method.getParameterList().getParameters(); PsiRecordComponent[] components = aClass.getRecordComponents(); List problems = new ArrayList<>(); diff --git a/java/java-psi-api/src/com/intellij/psi/util/JavaPsiRecordUtil.java b/java/java-psi-api/src/com/intellij/psi/util/JavaPsiRecordUtil.java index f9f4caa66b38..d2634dd4046b 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/JavaPsiRecordUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/JavaPsiRecordUtil.java @@ -56,10 +56,11 @@ public class JavaPsiRecordUtil { /** * @param method method to check - * @return true if given method is a canonical (non-compact) constructor for a record class + * @return true if given method is an explicit canonical (non-compact) constructor for a record class */ - public static boolean isCanonicalConstructor(@NotNull PsiMethod method) { + public static boolean isExplicitCanonicalConstructor(@NotNull PsiMethod method) { if (!method.isConstructor() || isCompactConstructor(method)) return false; + if (method instanceof SyntheticElement) return false; PsiClass aClass = method.getContainingClass(); if (aClass == null || !aClass.isRecord()) return false; return hasCanonicalSignature(method, aClass.getRecordComponents()); diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/ExceptionUtil.java b/java/java-psi-impl/src/com/intellij/codeInsight/ExceptionUtil.java index a910d9520c33..0e19957c0dbf 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/ExceptionUtil.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/ExceptionUtil.java @@ -929,6 +929,6 @@ public class ExceptionUtil { public static boolean canDeclareThrownExceptions(@NotNull PsiMethod method) { return JavaPsiRecordUtil.getRecordComponentForAccessor(method) == null && !JavaPsiRecordUtil.isCompactConstructor(method) && - !JavaPsiRecordUtil.isCanonicalConstructor(method); + !JavaPsiRecordUtil.isExplicitCanonicalConstructor(method); } } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/RecordAugmentProvider.java b/java/java-psi-impl/src/com/intellij/psi/impl/RecordAugmentProvider.java index d0a3bd67851d..b7516c685755 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/RecordAugmentProvider.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/RecordAugmentProvider.java @@ -68,7 +68,7 @@ public class RecordAugmentProvider extends PsiAugmentProvider { String className = aClass.getName(); if (className == null) return null; for (PsiMethod method : ownMethods) { - if (JavaPsiRecordUtil.isCompactConstructor(method) || JavaPsiRecordUtil.isCanonicalConstructor(method)) return null; + if (JavaPsiRecordUtil.isCompactConstructor(method) || JavaPsiRecordUtil.isExplicitCanonicalConstructor(method)) return null; } PsiElementFactory factory = JavaPsiFacade.getElementFactory(recordHeader.getProject()); String sb = "public " + className + recordHeader.getText() + "{}"; 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 52786234d9f4..6af5afdc50c8 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 @@ -1,10 +1,7 @@ // 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. package com.intellij.psi.impl.light; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiMethod; +import com.intellij.psi.*; import com.intellij.psi.impl.ElementPresentationUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.ui.IconManager; @@ -16,7 +13,7 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; -public class LightRecordCanonicalConstructor extends LightMethod { +public class LightRecordCanonicalConstructor extends LightMethod implements SyntheticElement { public LightRecordCanonicalConstructor(@NotNull PsiMethod method, @NotNull PsiClass containingClass) { super(method.getManager(), method, containingClass); diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/PublicConstructorInNonPublicClassInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/PublicConstructorInNonPublicClassInspection.java index 792f68cbcbe1..844ab0efe808 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/PublicConstructorInNonPublicClassInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/classlayout/PublicConstructorInNonPublicClassInspection.java @@ -106,7 +106,7 @@ public class PublicConstructorInNonPublicClassInspection extends BaseInspection return; } if (containingClass.isRecord() && - (JavaPsiRecordUtil.isCompactConstructor(method) || JavaPsiRecordUtil.isCanonicalConstructor(method))) { + (JavaPsiRecordUtil.isCompactConstructor(method) || JavaPsiRecordUtil.isExplicitCanonicalConstructor(method))) { // compact and canonical constructors in record must be public, according to spec return; } diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/modifiers/ChangeModifierIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/modifiers/ChangeModifierIntention.java index 35106c84c806..2ec4e0bb60cc 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/modifiers/ChangeModifierIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/modifiers/ChangeModifierIntention.java @@ -133,7 +133,7 @@ public class ChangeModifierIntention extends BaseElementAtCaretIntentionAction { if (containingClass == null || containingClass.isEnum() && method.isConstructor()) return Collections.emptyList(); if (JavaPsiRecordUtil.getRecordComponentForAccessor(method) != null || JavaPsiRecordUtil.isCompactConstructor(method) || - JavaPsiRecordUtil.isCanonicalConstructor(method)) { + JavaPsiRecordUtil.isExplicitCanonicalConstructor(method)) { return Collections.singletonList(AccessModifier.PUBLIC); } if (containingClass.isInterface()) {