From 1e6ebba27aebf7d2043f2c23bb68f69933c39fc7 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 9 Jan 2015 17:45:00 +0100 Subject: [PATCH] perform slow alternative resolve during copy/paste --- .../JavaCopyPasteReferenceProcessor.java | 3 ++- .../codeInsight/editorActions/CopyHandler.java | 13 +++++++++---- .../editorActions/PasteHandler.java | 18 +++++++++++++----- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaCopyPasteReferenceProcessor.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaCopyPasteReferenceProcessor.java index 76be78b7932d..5c4eff0f9374 100644 --- a/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaCopyPasteReferenceProcessor.java +++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaCopyPasteReferenceProcessor.java @@ -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 { +public class JavaCopyPasteReferenceProcessor extends CopyPasteReferenceProcessor implements DumbAware { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.editorActions.JavaCopyPasteReferenceProcessor"); @Override diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CopyHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CopyHandler.java index e780e3922b29..3451c0630e52 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CopyHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CopyHandler.java @@ -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 transferableDatas = new ArrayList(); - CopyPastePostProcessor[] postProcessors = Extensions.getExtensions(CopyPastePostProcessor.EP_NAME); - for (CopyPastePostProcessor processor : DumbService.getInstance(project).filterByDumbAwareness(Arrays.asList(postProcessors))) { - transferableDatas.addAll(processor.collectTransferableData(file, editor, startOffsets, endOffsets)); + + DumbService.getInstance(project).setAlternativeResolveEnabled(true); + try { + for (CopyPastePostProcessor 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() diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/PasteHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/PasteHandler.java index 56d18e3e8d97..9722a1b99d3e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/PasteHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/PasteHandler.java @@ -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> extraData = new HashMap>(); Collection allValues = new ArrayList(); - for (CopyPastePostProcessor processor : Extensions.getExtensions(CopyPastePostProcessor.EP_NAME)) { - List data = processor.extractTransferableData(content); - if (!data.isEmpty()) { - extraData.put(processor, data); - allValues.addAll(data); + + DumbService.getInstance(project).setAlternativeResolveEnabled(true); + try { + for (CopyPastePostProcessor processor : Extensions.getExtensions(CopyPastePostProcessor.EP_NAME)) { + List 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);