Refactoring: move application utility methods from refactoring utility to common place

This commit is contained in:
Nikolay Krasko
2014-09-27 22:29:18 +04:00
parent 89f0c8dc87
commit b79b7554ff
18 changed files with 52 additions and 48 deletions
@@ -19,6 +19,8 @@ package org.jetbrains.jet.plugin.util.application
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.util.ShutDownTracker
import com.intellij.openapi.project.Project
import com.intellij.openapi.command.CommandProcessor
public fun warnTimeConsuming(logger: Logger) {
val application = ApplicationManager.getApplication()!!
@@ -33,3 +35,21 @@ public fun warnTimeConsuming(logger: Logger) {
logger.warn("This operation is time consuming and must not be called on EDT.")
Throwable().printStackTrace()
}
public fun runReadAction<T: Any>(action: () -> T?): T? {
return ApplicationManager.getApplication()?.runReadAction<T>(action)
}
public fun runWriteAction<T: Any>(action: () -> T?): T? {
return ApplicationManager.getApplication()?.runWriteAction<T>(action)
}
public fun Project.executeWriteCommand(name: String, command: () -> Unit) {
CommandProcessor.getInstance().executeCommand(this, { runWriteAction(command) }, name, null)
}
public fun <T: Any> Project.executeWriteCommand(name: String, command: () -> T): T {
var result: T? = null
CommandProcessor.getInstance().executeCommand(this, { result = runWriteAction(command) }, name, null)
return result!!
}
@@ -41,7 +41,7 @@ import org.jetbrains.jet.lang.psi.JetExpression
import org.jetbrains.jet.plugin.completion.ExpectedInfos
import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession
import org.jetbrains.jet.plugin.refactoring.runWriteAction
import org.jetbrains.jet.plugin.util.application.runWriteAction
import org.jetbrains.jet.plugin.refactoring.EmptyValidator
fun insertLambdaTemplate(context: InsertionContext, placeholderRange: TextRange, lambdaType: JetType) {
@@ -39,7 +39,7 @@ import org.jetbrains.jet.plugin.codeInsight.CodeInsightUtils
import com.intellij.psi.PsiDocumentManager
import org.jetbrains.jet.lang.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils
import org.jetbrains.jet.plugin.refactoring.runReadAction
import org.jetbrains.jet.plugin.util.application.runReadAction
public class KotlinSmartStepIntoHandler : JvmSmartStepIntoHandler() {
@@ -59,7 +59,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext
import com.sun.jdi.VirtualMachine
import org.jetbrains.jet.codegen.AsmUtil
import com.sun.jdi.InvalidStackFrameException
import org.jetbrains.jet.plugin.refactoring.runReadAction
import org.jetbrains.jet.plugin.util.application.runReadAction
import org.jetbrains.jet.lang.psi.analysisContext
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
import org.jetbrains.jet.lang.resolve.java.JvmClassName
@@ -396,7 +396,8 @@ fun Type.getClassDescriptor(project: Project): ClassDescriptor? {
return runReadAction {
val classes = JavaPsiFacade.getInstance(project).findClasses(jvmName.asString(), GlobalSearchScope.allScope(project))
if (classes.isEmpty()) null else {
if (classes.isEmpty()) null
else {
val clazz = classes.first()
JavaResolveExtension.getResolver(project, clazz).resolveClass(JavaClassImpl(clazz))
}
@@ -29,7 +29,7 @@ import org.jetbrains.jet.plugin.refactoring.extractFunction.AnalysisResult.Statu
import com.intellij.debugger.engine.evaluation.EvaluateExceptionUtil
import org.jetbrains.jet.plugin.refactoring.extractFunction.validate
import org.jetbrains.jet.plugin.refactoring.extractFunction.ExtractionOptions
import org.jetbrains.jet.plugin.refactoring.runReadAction
import org.jetbrains.jet.plugin.util.application.runReadAction
import com.intellij.psi.PsiManager
import com.intellij.psi.impl.PsiModificationTrackerImpl
import org.jetbrains.jet.lang.psi.*
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2013 JetBrains s.r.o.
* Copyright 2010-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@ import org.jetbrains.jet.plugin.findUsages.toSearchTarget
import org.jetbrains.jet.plugin.findUsages.toClassHelper
import org.jetbrains.jet.plugin.findUsages.toClassDeclarationsHelper
import org.jetbrains.jet.plugin.search.usagesSearch.search
import org.jetbrains.jet.plugin.refactoring.runReadAction
import org.jetbrains.jet.plugin.util.application.runReadAction
public class KotlinFindClassUsagesHandler(
jetClass: JetClassOrObject,
@@ -80,7 +80,7 @@ public class KotlinFindClassUsagesHandler(
val classUsages = kotlinOptions.toClassHelper().newRequest(target).search()
val declarationUsages = kotlinOptions.toClassDeclarationsHelper().newRequest(target).search()
(classUsages + declarationUsages).all { ref -> KotlinFindUsagesHandler.processUsage(processor, ref)} && processInheritors()
(classUsages + declarationUsages).all { ref -> KotlinFindUsagesHandler.processUsage(processor, ref) } && processInheritors()
}!!
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2013 JetBrains s.r.o.
* Copyright 2010-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@ import org.jetbrains.jet.plugin.findUsages.dialogs.KotlinTypeParameterFindUsages
import org.jetbrains.jet.plugin.search.usagesSearch.DefaultSearchHelper
import org.jetbrains.jet.plugin.findUsages.toSearchTarget
import org.jetbrains.jet.plugin.search.usagesSearch.search
import org.jetbrains.jet.plugin.refactoring.runReadAction
import org.jetbrains.jet.plugin.util.application.runReadAction
public class KotlinTypeParameterFindUsagesHandler(
element: JetNamedDeclaration,
@@ -46,7 +46,7 @@ public class KotlinTypeParameterFindUsagesHandler(
return runReadAction {
val target = options.toSearchTarget(element as JetNamedDeclaration, true)
val request = DefaultSearchHelper<JetNamedDeclaration>().newRequest(target)
request.search().all {ref -> KotlinFindUsagesHandler.processUsage(processor, ref)}
request.search().all { ref -> KotlinFindUsagesHandler.processUsage(processor, ref) }
}!!
}
@@ -51,13 +51,13 @@ import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils
import org.jetbrains.jet.plugin.refactoring.EmptyValidator
import org.jetbrains.jet.plugin.refactoring.CollectingValidator
import org.jetbrains.jet.plugin.util.isUnit
import org.jetbrains.jet.plugin.refactoring.runWriteAction
import com.intellij.util.ArrayUtil
import com.intellij.psi.PsiWhiteSpace
import org.jetbrains.jet.plugin.refactoring.isMultiLine
import org.jetbrains.jet.plugin.refactoring.getLineCount
import com.intellij.psi.PsiElement
import org.jetbrains.jet.lexer.JetTokens
import org.jetbrains.jet.plugin.util.application.runWriteAction
private val TYPE_PARAMETER_LIST_VARIABLE_NAME = "typeParameterList"
private val TEMPLATE_FROM_USAGE_FUNCTION_BODY = "New Kotlin Function Body.kt"
@@ -128,7 +128,7 @@ class FunctionBuilder(val config: FunctionBuilderConfiguration) {
return typeCandidates.getOrPut(typeInfo) {
val types = typeInfo.getPossibleTypes(this).reverse()
val newTypes = LinkedHashSet<JetType>(types)
val newTypes = LinkedHashSet(types)
for (substitution in substitutions) {
// each substitution can be applied or not, so we offer all options
val toAdd = newTypes.map { theType -> theType.substitute(substitution, typeInfo.variance) }
@@ -34,7 +34,7 @@ import org.jetbrains.jet.lang.psi.JetElement
import com.intellij.openapi.application.ApplicationManager
import org.jetbrains.jet.lang.psi.psiUtil.getOutermostParentContainedIn
import org.jetbrains.jet.plugin.refactoring.checkConflictsInteractively
import org.jetbrains.jet.plugin.refactoring.executeWriteCommand
import org.jetbrains.jet.plugin.util.application.executeWriteCommand
import org.jetbrains.jet.lang.psi.JetBlockExpression
import kotlin.test.fail
import org.jetbrains.jet.plugin.refactoring.extractFunction.AnalysisResult.Status
@@ -241,4 +241,4 @@ fun selectElements(
editor.getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE)
selectSingleExpression()
}
}
@@ -33,7 +33,7 @@ import com.intellij.codeInsight.highlighting.HighlightManager
import com.intellij.codeInsight.folding.CodeFoldingManager
import com.intellij.ui.ReplacePromptDialog
import com.intellij.find.FindManager
import org.jetbrains.jet.plugin.refactoring.executeWriteCommand
import org.jetbrains.jet.plugin.util.application.executeWriteCommand
import com.intellij.refactoring.util.duplicates.MethodDuplicatesHandler
import com.intellij.refactoring.RefactoringBundle
@@ -67,6 +67,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext
import org.jetbrains.jet.lang.psi.psiUtil.getParentByType
import org.jetbrains.jet.lang.psi.psiUtil.isAncestor
import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession
import org.jetbrains.jet.plugin.util.application.runWriteAction
import com.intellij.psi.PsiNamedElement
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor
@@ -218,24 +219,6 @@ public fun Project.checkConflictsInteractively(conflicts: MultiMap<PsiElement, S
onAccept()
}
public fun runReadAction<T: Any>(action: () -> T?): T? {
return ApplicationManager.getApplication()?.runReadAction<T>(action)
}
public fun runWriteAction<T: Any>(action: () -> T?): T? {
return ApplicationManager.getApplication()?.runWriteAction<T>(action)
}
public fun Project.executeWriteCommand(name: String, command: () -> Unit) {
CommandProcessor.getInstance().executeCommand(this, { runWriteAction(command) }, name, null)
}
public fun <T: Any> Project.executeWriteCommand(name: String, command: () -> T): T {
var result: T? = null
CommandProcessor.getInstance().executeCommand(this, { result = runWriteAction(command) }, name, null)
return result!!
}
public fun <T, E: PsiElement> getPsiElementPopup(
editor: Editor,
elements: List<T>,
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2013 JetBrains s.r.o.
* Copyright 2010-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,7 +25,7 @@ import org.jetbrains.jet.lang.psi.JetNamedFunction
import com.intellij.refactoring.rename.RenameJavaMethodProcessor
import org.jetbrains.jet.asJava.KotlinLightMethod
import kotlin.properties.Delegates
import org.jetbrains.jet.plugin.refactoring.runReadAction
import org.jetbrains.jet.plugin.util.application.runReadAction
public class RenameKotlinFunctionProcessor : RenameKotlinPsiProcessor() {
private val javaMethodProcessorInstance by Delegates.lazy {
@@ -41,7 +41,7 @@ import org.jetbrains.jet.lang.descriptors.PropertyDescriptor
import org.jetbrains.jet.asJava.namedUnwrappedElement
import org.jetbrains.jet.lang.resolve.OverrideResolver
import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils
import org.jetbrains.jet.plugin.refactoring.runReadAction
import org.jetbrains.jet.plugin.util.application.runReadAction
public class RenameKotlinPropertyProcessor : RenamePsiElementProcessor() {
override fun canProcessElement(element: PsiElement): Boolean = element.namedUnwrappedElement is JetProperty
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2013 JetBrains s.r.o.
* Copyright 2010-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -47,7 +47,7 @@ import java.util.Collections
import com.intellij.openapi.roots.FileIndexFacade
import com.intellij.util.indexing.FileBasedIndex
import com.intellij.psi.impl.cache.impl.id.IdIndex
import org.jetbrains.jet.plugin.refactoring.runReadAction
import org.jetbrains.jet.plugin.util.application.runReadAction
import com.intellij.psi.search.TextOccurenceProcessor
import org.jetbrains.jet.plugin.references.JetMultiDeclarationReference
import com.intellij.psi.PsiManager
@@ -142,7 +142,7 @@ public class KotlinPsiSearchHelper(private val project: Project): PsiSearchHelpe
val entries = Collections.singletonList(IdIndexEntry(text, caseSensitively))
val index = FileIndexFacade.getInstance(project)
val checker: (Int?) -> Boolean = { (it!! and searchContext.toInt()) != 0 }
return runReadAction{
return runReadAction {
FileBasedIndex.getInstance().processFilesContainingAllKeys(IdIndex.NAME, entries, scope, checker) { file ->
!index.shouldBeFound(scope, file) || processor.process(file)
}
@@ -23,7 +23,7 @@ import com.intellij.debugger.DebuggerManagerEx
import com.intellij.debugger.ui.breakpoints.LineBreakpoint
import com.intellij.debugger.actions.MethodSmartStepTarget
import com.intellij.debugger.engine.BasicStepMethodFilter
import org.jetbrains.jet.plugin.refactoring.runReadAction
import org.jetbrains.jet.plugin.util.application.runReadAction
import org.jetbrains.jet.InTextDirectivesUtils.*
import com.intellij.openapi.util.io.FileUtil
import java.io.File
@@ -19,7 +19,7 @@ package org.jetbrains.jet.plugin.debugger
import com.intellij.debugger.engine.DebugProcessImpl
import com.intellij.debugger.engine.SuspendContextImpl
import com.intellij.debugger.engine.MethodFilter
import org.jetbrains.jet.plugin.refactoring.runReadAction
import org.jetbrains.jet.plugin.util.application.runReadAction
import com.intellij.debugger.impl.PositionUtil
import com.intellij.execution.process.ProcessOutputTypes
import com.intellij.openapi.roots.libraries.LibraryUtil
@@ -46,7 +46,7 @@ abstract class KotlinDebuggerTestBase : KotlinDebuggerTestCase() {
}
protected fun SuspendContextImpl.printContext() {
runReadAction { (): Unit ->
runReadAction {(): Unit ->
if (this.getFrameProxy() == null) {
return@runReadAction println("Context thread is null", ProcessOutputTypes.SYSTEM)
}
@@ -58,9 +58,9 @@ import org.jetbrains.jet.plugin.refactoring.move.moveTopLevelDeclarations.MoveKo
import org.jetbrains.jet.plugin.refactoring.move.moveTopLevelDeclarations.JetFileKotlinMoveTarget
import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.plugin.search.allScope
import org.jetbrains.jet.plugin.refactoring.runWriteAction
import org.jetbrains.jet.InTextDirectivesUtils
import org.jetbrains.jet.testing.ConfigLibraryUtil
import org.jetbrains.jet.plugin.util.application.runWriteAction
public abstract class AbstractJetMoveTest : MultiFileTestCase() {
protected fun doTest(path: String) {
@@ -93,7 +93,7 @@ public abstract class AbstractJetMoveTest : MultiFileTestCase() {
doTest { rootDir, rootAfter ->
val mainFile = rootDir.findFileByRelativePath(mainFilePath)!!
val mainPsiFile = PsiManager.getInstance(getProject()!!).findFile(mainFile)!!
val document = FileDocumentManager.getInstance()!!.getDocument(mainFile)!!
val document = FileDocumentManager.getInstance().getDocument(mainFile)!!
val editor = EditorFactory.getInstance()!!.createEditor(document, getProject()!!)!!
val caretOffset = extractCaretOffset(document)
@@ -112,11 +112,11 @@ public abstract class AbstractJetMoveTest : MultiFileTestCase() {
assert(!conflictFile.exists())
}
catch(e: ConflictsInTestsException) {
JetTestUtils.assertEqualsToFile(conflictFile, e.getMessages().sort().makeString("\n"))
JetTestUtils.assertEqualsToFile(conflictFile, e.getMessages().sort().joinToString("\n"))
}
finally {
PsiDocumentManager.getInstance(getProject()!!).commitAllDocuments()
FileDocumentManager.getInstance()?.saveAllDocuments()
FileDocumentManager.getInstance().saveAllDocuments()
EditorFactory.getInstance()!!.releaseEditor(editor)
}
@@ -43,7 +43,7 @@ import com.intellij.openapi.module.Module
import java.io.File
import com.intellij.openapi.roots.ModuleRootModificationUtil
import org.jetbrains.jet.plugin.search.allScope
import org.jetbrains.jet.plugin.refactoring.runWriteAction
import org.jetbrains.jet.plugin.util.application.runWriteAction
class RunConfigurationTest: CodeInsightTestCase() {
fun getTestProject() = myProject!!