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 // Step 2. Find references to restore in a target file
return ProgressIndicatorUtils.awaitWithCheckCanceled( return ProgressIndicatorUtils.awaitWithCheckCanceled(
nonBlocking<List<ReferenceToRestoreData>> { submitNonBlocking(project, indicator) {
return@nonBlocking findReferencesToRestore(file, indicator, sourceFileBasedReferences, referencesByRange) 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.codeInsight.hint.HintUtil
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.ModalityState import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.application.ReadAction.nonBlocking
import com.intellij.openapi.command.WriteCommandAction import com.intellij.openapi.command.WriteCommandAction
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.ui.LightweightHint import com.intellij.ui.LightweightHint
import com.intellij.util.ArrayUtil import com.intellij.util.ArrayUtil
import com.intellij.util.concurrency.AppExecutorUtil
import org.jetbrains.annotations.TestOnly import org.jetbrains.annotations.TestOnly
import org.jetbrains.concurrency.CancellablePromise
import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.imports.KotlinImportOptimizer import org.jetbrains.kotlin.idea.imports.KotlinImportOptimizer
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -26,6 +30,7 @@ import java.util.*
import javax.swing.event.HyperlinkEvent import javax.swing.event.HyperlinkEvent
import javax.swing.event.HyperlinkListener import javax.swing.event.HyperlinkListener
// BUNCH 192
object ReviewAddedImports { object ReviewAddedImports {
@get:TestOnly @get:TestOnly
var importsToBeReviewed: Collection<String> = emptyList() var importsToBeReviewed: Collection<String> = emptyList()
@@ -103,5 +108,12 @@ object ReviewAddedImports {
KotlinImportOptimizer.replaceImports(file, newImports) 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.codeInsight.hint.HintUtil
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.ModalityState import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.application.ReadAction.nonBlocking
import com.intellij.openapi.command.WriteCommandAction import com.intellij.openapi.command.WriteCommandAction
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.ui.LightweightHint import com.intellij.ui.LightweightHint
import com.intellij.util.ArrayUtil import com.intellij.util.ArrayUtil
import com.intellij.util.concurrency.AppExecutorUtil
import org.jetbrains.annotations.TestOnly import org.jetbrains.annotations.TestOnly
import org.jetbrains.concurrency.CancellablePromise
import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.imports.KotlinImportOptimizer import org.jetbrains.kotlin.idea.imports.KotlinImportOptimizer
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -27,6 +31,7 @@ import java.util.*
import javax.swing.event.HyperlinkEvent import javax.swing.event.HyperlinkEvent
import javax.swing.event.HyperlinkListener import javax.swing.event.HyperlinkListener
// BUNCH 192
object ReviewAddedImports { object ReviewAddedImports {
@get:TestOnly @get:TestOnly
var importsToBeReviewed: Collection<String> = emptyList() var importsToBeReviewed: Collection<String> = emptyList()
@@ -68,5 +73,11 @@ object ReviewAddedImports {
KotlinImportOptimizer.replaceImports(file, newImports) 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())