[codeInspection] ConvertToRecordFix: support preview

GitOrigin-RevId: 60b511ee37a8d09ae9e945fcd1bf272a270851a6
This commit is contained in:
Louis Vignier
2022-07-20 16:48:45 +00:00
committed by intellij-monorepo-bot
parent 00e5e0c7db
commit 82cfd789d3
@@ -1,4 +1,4 @@
// 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.
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInspection.classCanBeRecord;
import com.intellij.codeInsight.AnnotationTargetUtil;
@@ -6,6 +6,7 @@ import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInsight.ExceptionUtil;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
import com.intellij.codeInsight.intention.preview.IntentionPreviewInfo;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.codeInspection.util.IntentionFamilyName;
import com.intellij.java.JavaBundle;
@@ -16,6 +17,7 @@ import com.intellij.psi.search.searches.ClassInheritorsSearch;
import com.intellij.psi.util.PropertyUtil;
import com.intellij.psi.util.PropertyUtilBase;
import com.intellij.psi.util.PsiUtil;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.ObjectUtils;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
@@ -56,19 +58,33 @@ public class ConvertToRecordFix extends InspectionGadgetsFix {
@Override
protected void doFix(Project project, ProblemDescriptor descriptor) {
PsiElement psiElement = descriptor.getPsiElement();
if (psiElement == null) return;
PsiClass psiClass = ObjectUtils.tryCast(psiElement.getParent(), PsiClass.class);
if (psiClass == null) return;
RecordCandidate recordCandidate = getClassDefinition(psiClass, mySuggestAccessorsRenaming, myIgnoredAnnotations);
if (recordCandidate == null) return;
ConvertToRecordProcessor processor = new ConvertToRecordProcessor(recordCandidate, myShowAffectedMembers);
final ConvertToRecordProcessor processor = getRecordProcessor(descriptor);
if (processor == null) return;
processor.setPrepareSuccessfulSwingThreadCallback(() -> {});
processor.run();
}
@Nullable
private ConvertToRecordProcessor getRecordProcessor(ProblemDescriptor descriptor) {
PsiElement psiElement = descriptor.getPsiElement();
if (psiElement == null) return null;
PsiClass psiClass = ObjectUtils.tryCast(psiElement.getParent(), PsiClass.class);
if (psiClass == null) return null;
RecordCandidate recordCandidate = getClassDefinition(psiClass, mySuggestAccessorsRenaming, myIgnoredAnnotations);
if (recordCandidate == null) return null;
return new ConvertToRecordProcessor(recordCandidate, myShowAffectedMembers);
}
@Override
public @NotNull IntentionPreviewInfo generatePreview(@NotNull Project project, @NotNull ProblemDescriptor previewDescriptor) {
final ConvertToRecordProcessor processor = getRecordProcessor(previewDescriptor);
if (processor == null) return IntentionPreviewInfo.EMPTY;
processor.performRefactoring(UsageInfo.EMPTY_ARRAY);
return IntentionPreviewInfo.DIFF;
}
/**
* There are some restrictions for records:
* <a href="https://docs.oracle.com/javase/specs/jls/se15/preview/specs/records-jls.html">see the specification</a>.