perform slow alternative resolve during copy/paste

This commit is contained in:
peter
2015-01-09 17:45:00 +01:00
parent 23c16a074c
commit 1e6ebba27a
3 changed files with 24 additions and 10 deletions
@@ -17,6 +17,7 @@ package com.intellij.codeInsight.editorActions;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.RangeMarker;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
import com.intellij.util.IncorrectOperationException;
@@ -26,7 +27,7 @@ import java.util.ArrayList;
/**
* @author peter
*/
public class JavaCopyPasteReferenceProcessor extends CopyPasteReferenceProcessor<PsiJavaCodeReferenceElement> {
public class JavaCopyPasteReferenceProcessor extends CopyPasteReferenceProcessor<PsiJavaCodeReferenceElement> implements DumbAware {
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.editorActions.JavaCopyPasteReferenceProcessor");
@Override
@@ -35,7 +35,6 @@ import com.intellij.psi.PsiFile;
import java.awt.datatransfer.Transferable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CopyHandler extends EditorActionHandler {
@@ -89,9 +88,15 @@ public class CopyHandler extends EditorActionHandler {
final int[] endOffsets = selectionModel.getBlockSelectionEnds();
List<TextBlockTransferableData> transferableDatas = new ArrayList<TextBlockTransferableData>();
CopyPastePostProcessor<? extends TextBlockTransferableData>[] postProcessors = Extensions.getExtensions(CopyPastePostProcessor.EP_NAME);
for (CopyPastePostProcessor<? extends TextBlockTransferableData> processor : DumbService.getInstance(project).filterByDumbAwareness(Arrays.asList(postProcessors))) {
transferableDatas.addAll(processor.collectTransferableData(file, editor, startOffsets, endOffsets));
DumbService.getInstance(project).setAlternativeResolveEnabled(true);
try {
for (CopyPastePostProcessor<? extends TextBlockTransferableData> processor : Extensions.getExtensions(CopyPastePostProcessor.EP_NAME)) {
transferableDatas.addAll(processor.collectTransferableData(file, editor, startOffsets, endOffsets));
}
}
finally {
DumbService.getInstance(project).setAlternativeResolveEnabled(false);
}
String text = editor.getCaretModel().supportsMultipleCarets()
@@ -33,6 +33,7 @@ import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.ide.CopyPasteManager;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.TextRange;
@@ -158,13 +159,20 @@ public class PasteHandler extends EditorActionHandler implements EditorTextInser
final Map<CopyPastePostProcessor, List<? extends TextBlockTransferableData>> extraData = new HashMap<CopyPastePostProcessor, List<? extends TextBlockTransferableData>>();
Collection<TextBlockTransferableData> allValues = new ArrayList<TextBlockTransferableData>();
for (CopyPastePostProcessor<? extends TextBlockTransferableData> processor : Extensions.getExtensions(CopyPastePostProcessor.EP_NAME)) {
List<? extends TextBlockTransferableData> data = processor.extractTransferableData(content);
if (!data.isEmpty()) {
extraData.put(processor, data);
allValues.addAll(data);
DumbService.getInstance(project).setAlternativeResolveEnabled(true);
try {
for (CopyPastePostProcessor<? extends TextBlockTransferableData> processor : Extensions.getExtensions(CopyPastePostProcessor.EP_NAME)) {
List<? extends TextBlockTransferableData> data = processor.extractTransferableData(content);
if (!data.isEmpty()) {
extraData.put(processor, data);
allValues.addAll(data);
}
}
}
finally {
DumbService.getInstance(project).setAlternativeResolveEnabled(false);
}
text = TextBlockTransferable.convertLineSeparators(editor, text, allValues);