mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[codeInspection] ConvertToRecordFix: support preview
GitOrigin-RevId: 60b511ee37a8d09ae9e945fcd1bf272a270851a6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
00e5e0c7db
commit
82cfd789d3
+26
-10
@@ -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>.
|
||||
|
||||
Reference in New Issue
Block a user