mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
copyright/infer nullity: check read-only status only for files to be changed
This commit is contained in:
+13
-6
@@ -19,6 +19,7 @@ import com.intellij.analysis.AnalysisScope;
|
||||
import com.intellij.analysis.BaseAnalysisAction;
|
||||
import com.intellij.analysis.BaseAnalysisActionDialog;
|
||||
import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.NullableNotNullManager;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.LocateLibraryDialog;
|
||||
@@ -59,14 +60,12 @@ import com.intellij.usages.*;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.SequentialModalProgressTask;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public class InferNullityAnnotationsAction extends BaseAnalysisAction {
|
||||
@NonNls private static final String INFER_NULLITY_ANNOTATIONS = "Infer Nullity Annotations";
|
||||
@@ -185,8 +184,6 @@ public class InferNullityAnnotationsAction extends BaseAnalysisAction {
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (scope.checkScopeWritable(project)) return;
|
||||
|
||||
PsiDocumentManager.getInstance(project).commitAllDocuments();
|
||||
final UsageInfo[] usageInfos = findUsages(project, scope);
|
||||
if (usageInfos == null) return;
|
||||
@@ -258,6 +255,16 @@ public class InferNullityAnnotationsAction extends BaseAnalysisAction {
|
||||
protected void run(@NotNull Result result) throws Throwable {
|
||||
final UsageInfo[] infos = computable.compute();
|
||||
if (infos.length > 0) {
|
||||
|
||||
final Set<PsiElement> elements = new LinkedHashSet<PsiElement>();
|
||||
for (UsageInfo info : infos) {
|
||||
final PsiElement element = info.getElement();
|
||||
if (element != null) {
|
||||
ContainerUtil.addIfNotNull(elements, element.getContainingFile());
|
||||
}
|
||||
}
|
||||
if (!FileModificationService.getInstance().preparePsiElementsForWrite(elements)) return;
|
||||
|
||||
final SequentialModalProgressTask progressTask = new SequentialModalProgressTask(project, INFER_NULLITY_ANNOTATIONS, false);
|
||||
progressTask.setMinIterationTime(200);
|
||||
progressTask.setTask(new AnnotateTask(project, progressTask, infos));
|
||||
|
||||
@@ -597,6 +597,10 @@ public class AnalysisScope {
|
||||
return myFilesSet.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* scope elements should be checked only when needed
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean checkScopeWritable(@NotNull Project project) {
|
||||
if (myFilesSet == null) initFilesSet();
|
||||
return !FileModificationService.getInstance().prepareVirtualFilesForWrite(project, myFilesSet);
|
||||
|
||||
+18
-10
@@ -19,17 +19,20 @@ package com.maddyhome.idea.copyright.actions;
|
||||
import com.intellij.analysis.AnalysisScope;
|
||||
import com.intellij.analysis.BaseAnalysisAction;
|
||||
import com.intellij.analysis.BaseAnalysisActionDialog;
|
||||
import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.progress.Task;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.VerticalFlowLayout;
|
||||
import com.intellij.openapi.util.EmptyRunnable;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.ui.TitledSeparator;
|
||||
@@ -42,8 +45,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
public class UpdateCopyrightAction extends BaseAnalysisAction {
|
||||
public static final String UPDATE_EXISTING_COPYRIGHTS = "update.existing.copyrights";
|
||||
@@ -130,8 +132,7 @@ public class UpdateCopyrightAction extends BaseAnalysisAction {
|
||||
@Override
|
||||
protected void analyze(@NotNull final Project project, @NotNull final AnalysisScope scope) {
|
||||
PropertiesComponent.getInstance().setValue(UPDATE_EXISTING_COPYRIGHTS, String.valueOf(myUpdateExistingCopyrightsCb.isSelected()));
|
||||
if (scope.checkScopeWritable(project)) return;
|
||||
final List<Runnable> preparations = new ArrayList<Runnable>();
|
||||
final Map<PsiFile, Runnable> preparations = new LinkedHashMap<PsiFile, Runnable>();
|
||||
Task.Backgroundable task = new Task.Backgroundable(project, "Prepare Copyright...", true) {
|
||||
@Override
|
||||
public void run(@NotNull final ProgressIndicator indicator) {
|
||||
@@ -141,7 +142,12 @@ public class UpdateCopyrightAction extends BaseAnalysisAction {
|
||||
if (indicator.isCanceled()) {
|
||||
return;
|
||||
}
|
||||
preparations.add(new UpdateCopyrightProcessor(project, ModuleUtilCore.findModuleForPsiElement(file), file).preprocessFile(file, myUpdateExistingCopyrightsCb.isSelected()));
|
||||
final Module module = ModuleUtilCore.findModuleForPsiElement(file);
|
||||
final UpdateCopyrightProcessor processor = new UpdateCopyrightProcessor(project, module, file);
|
||||
final Runnable runnable = processor.preprocessFile(file, myUpdateExistingCopyrightsCb.isSelected());
|
||||
if (runnable != EmptyRunnable.getInstance()) {
|
||||
preparations.put(file, runnable);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -149,6 +155,7 @@ public class UpdateCopyrightAction extends BaseAnalysisAction {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
if (!preparations.isEmpty()) {
|
||||
if (!FileModificationService.getInstance().preparePsiElementsForWrite(preparations.keySet())) return;
|
||||
final SequentialModalProgressTask progressTask = new SequentialModalProgressTask(project, UpdateCopyrightProcessor.TITLE, true);
|
||||
progressTask.setMinIterationTime(200);
|
||||
progressTask.setTask(new UpdateCopyrightSequentialTask(preparations, progressTask));
|
||||
@@ -173,14 +180,14 @@ public class UpdateCopyrightAction extends BaseAnalysisAction {
|
||||
|
||||
private static class UpdateCopyrightSequentialTask implements SequentialTask {
|
||||
private final int mySize;
|
||||
private final List<Runnable> myRunnables;
|
||||
private final Iterator<Runnable> myRunnables;
|
||||
private final SequentialModalProgressTask myProgressTask;
|
||||
private int myIdx = 0;
|
||||
|
||||
private UpdateCopyrightSequentialTask(List<Runnable> runnables, SequentialModalProgressTask progressTask) {
|
||||
myRunnables = runnables;
|
||||
private UpdateCopyrightSequentialTask(Map<PsiFile, Runnable> runnables, SequentialModalProgressTask progressTask) {
|
||||
myRunnables = runnables.values().iterator();
|
||||
myProgressTask = progressTask;
|
||||
mySize = myRunnables.size();
|
||||
mySize = runnables.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -197,7 +204,8 @@ public class UpdateCopyrightAction extends BaseAnalysisAction {
|
||||
if (indicator != null) {
|
||||
indicator.setFraction((double) myIdx/mySize);
|
||||
}
|
||||
myRunnables.get(myIdx++).run();
|
||||
myRunnables.next().run();
|
||||
myIdx++;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -88,6 +88,8 @@ public class UpdateCopyrightProcessor extends AbstractFileProcessor
|
||||
if (update == null) return EmptyRunnable.getInstance();
|
||||
update.prepare();
|
||||
|
||||
if (update instanceof UpdatePsiFileCopyright && !((UpdatePsiFileCopyright)update).hasUpdates()) return EmptyRunnable.getInstance();
|
||||
|
||||
return new Runnable() {
|
||||
public void run()
|
||||
{
|
||||
|
||||
@@ -351,6 +351,10 @@ public abstract class UpdatePsiFileCopyright extends AbstractUpdateCopyright {
|
||||
}.execute();
|
||||
}
|
||||
|
||||
public boolean hasUpdates() {
|
||||
return !actions.isEmpty();
|
||||
}
|
||||
|
||||
private static class CommentRange {
|
||||
public CommentRange(PsiElement first, PsiElement last) {
|
||||
this.first = first;
|
||||
|
||||
Reference in New Issue
Block a user