mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
perform slow alternative resolve during copy/paste
This commit is contained in:
+2
-1
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user