JavaPsiRecordUtil#isCanonicalConstructor -> isExplicitCanonicalConstructor

GitOrigin-RevId: a3c68d4956c23a726118f6eb8b22e45881d84e09
This commit is contained in:
Tagir Valeev
2019-12-28 06:40:55 +00:00
committed by intellij-monorepo-bot
parent 7a82851f07
commit 586bd6da28
7 changed files with 11 additions and 13 deletions
@@ -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<HighlightInfo> problems = new ArrayList<>();
@@ -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());
@@ -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);
}
}
@@ -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() + "{}";
@@ -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);
@@ -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;
}
@@ -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()) {