KotlinCopyPasteReferenceProcessor clean up

Relates to #KT-37971
This commit is contained in:
Vladimir Dolzhenko
2020-04-07 13:50:30 +02:00
parent 5460327c8d
commit 7327028052
4 changed files with 27 additions and 79 deletions
@@ -464,12 +464,9 @@ class KotlinCopyPasteReferenceProcessor : CopyPastePostProcessor<BasicKotlinRefe
// Step 2. Find references to restore in a target file
return ProgressIndicatorUtils.awaitWithCheckCanceled(
nonBlocking<List<ReferenceToRestoreData>> {
return@nonBlocking findReferencesToRestore(file, indicator, sourceFileBasedReferences, referencesByRange)
submitNonBlocking(project, indicator) {
return@submitNonBlocking findReferencesToRestore(file, indicator, sourceFileBasedReferences, referencesByRange)
}
.withDocumentsCommitted(project)
//.cancelWith(indicator)
.submit(AppExecutorUtil.getAppExecutorService())
)
}
@@ -11,12 +11,16 @@ import com.intellij.codeInsight.hint.HintManagerImpl
import com.intellij.codeInsight.hint.HintUtil
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.application.ReadAction.nonBlocking
import com.intellij.openapi.command.WriteCommandAction
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.project.Project
import com.intellij.ui.LightweightHint
import com.intellij.util.ArrayUtil
import com.intellij.util.concurrency.AppExecutorUtil
import org.jetbrains.annotations.TestOnly
import org.jetbrains.concurrency.CancellablePromise
import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.imports.KotlinImportOptimizer
import org.jetbrains.kotlin.name.Name
@@ -26,6 +30,7 @@ import java.util.*
import javax.swing.event.HyperlinkEvent
import javax.swing.event.HyperlinkListener
// BUNCH 192
object ReviewAddedImports {
@get:TestOnly
var importsToBeReviewed: Collection<String> = emptyList()
@@ -103,5 +108,12 @@ object ReviewAddedImports {
KotlinImportOptimizer.replaceImports(file, newImports)
})
}
}
}
internal fun <T> submitNonBlocking(project: Project, indicator: ProgressIndicator, block: () -> T): CancellablePromise<T> =
nonBlocking<T> {
return@nonBlocking block()
}
.withDocumentsCommitted(project)
.cancelWith(indicator)
.submit(AppExecutorUtil.getAppExecutorService())
@@ -1,72 +0,0 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.idea.codeInsight
import com.intellij.codeInsight.CodeInsightBundle
import com.intellij.codeInsight.CodeInsightSettings
import com.intellij.codeInsight.hint.HintManager
import com.intellij.codeInsight.hint.HintManagerImpl
import com.intellij.codeInsight.hint.HintUtil
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.command.WriteCommandAction
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.ui.LightweightHint
import com.intellij.util.ArrayUtil
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.imports.KotlinImportOptimizer
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.ImportPath
import java.util.*
import javax.swing.event.HyperlinkEvent
import javax.swing.event.HyperlinkListener
object ReviewAddedImports {
@get:TestOnly
var importsToBeReviewed: Collection<String> = emptyList()
@get:TestOnly
var importsToBeDeleted: Collection<String> = emptyList()
fun reviewAddedImports(
project: Project,
editor: Editor,
file: KtFile,
imported: TreeSet<String>
) {
if (CodeInsightSettings.getInstance().ADD_IMPORTS_ON_PASTE == CodeInsightSettings.YES &&
!imported.isEmpty()
) {
if (ApplicationManager.getApplication().isUnitTestMode) {
importsToBeReviewed = imported
removeImports(project, file, importsToBeDeleted)
return
}
// there is actual no such functionality in 191
}
}
private fun removeImports(
project: Project,
file: KtFile,
importsToRemove: Collection<String>
) {
if (importsToRemove.isEmpty()) return
WriteCommandAction.runWriteCommandAction(project, KotlinBundle.message("revert.applied.imports"), null, Runnable {
val newImports = file.importDirectives.mapNotNull {
val importedFqName = it.importedFqName ?: return@mapNotNull null
if (importsToRemove.contains(importedFqName.asString())) return@mapNotNull null
ImportPath(importedFqName, it.isAllUnder, it.aliasName?.let { alias -> Name.identifier(alias) })
}
KotlinImportOptimizer.replaceImports(file, newImports)
})
}
}
@@ -12,12 +12,16 @@ import com.intellij.codeInsight.hint.HintManagerImpl
import com.intellij.codeInsight.hint.HintUtil
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.application.ReadAction.nonBlocking
import com.intellij.openapi.command.WriteCommandAction
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.project.Project
import com.intellij.ui.LightweightHint
import com.intellij.util.ArrayUtil
import com.intellij.util.concurrency.AppExecutorUtil
import org.jetbrains.annotations.TestOnly
import org.jetbrains.concurrency.CancellablePromise
import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.imports.KotlinImportOptimizer
import org.jetbrains.kotlin.name.Name
@@ -27,6 +31,7 @@ import java.util.*
import javax.swing.event.HyperlinkEvent
import javax.swing.event.HyperlinkListener
// BUNCH 192
object ReviewAddedImports {
@get:TestOnly
var importsToBeReviewed: Collection<String> = emptyList()
@@ -68,5 +73,11 @@ object ReviewAddedImports {
KotlinImportOptimizer.replaceImports(file, newImports)
})
}
}
}
internal fun <T> submitNonBlocking(project: Project, indicator: ProgressIndicator, block: () -> T): CancellablePromise<T> =
nonBlocking<T> {
return@nonBlocking block()
}
.withDocumentsCommitted(project)
.submit(AppExecutorUtil.getAppExecutorService())