Get rid of IndexNotReadyException in CreateActualFix
Related to KT-19586
This commit is contained in:
@@ -20,6 +20,7 @@ import com.intellij.codeInsight.intention.IntentionAction
|
|||||||
import com.intellij.ide.util.EditorHelper
|
import com.intellij.ide.util.EditorHelper
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
|
import com.intellij.openapi.project.DumbService
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.JavaDirectoryService
|
import com.intellij.psi.JavaDirectoryService
|
||||||
import com.intellij.psi.codeStyle.CodeStyleManager
|
import com.intellij.psi.codeStyle.CodeStyleManager
|
||||||
@@ -40,6 +41,7 @@ import org.jetbrains.kotlin.idea.quickfix.KotlinSingleIntentionActionFactory
|
|||||||
import org.jetbrains.kotlin.idea.refactoring.createKotlinFile
|
import org.jetbrains.kotlin.idea.refactoring.createKotlinFile
|
||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||||
import org.jetbrains.kotlin.idea.util.actualsForExpected
|
import org.jetbrains.kotlin.idea.util.actualsForExpected
|
||||||
|
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -71,27 +73,29 @@ sealed class CreateActualFix<out D : KtNamedDeclaration>(
|
|||||||
val factory = KtPsiFactory(project)
|
val factory = KtPsiFactory(project)
|
||||||
|
|
||||||
val actualFile = getOrCreateImplementationFile() ?: return
|
val actualFile = getOrCreateImplementationFile() ?: return
|
||||||
val generated = factory.generateIt(project, element) ?: return
|
DumbService.getInstance(project).runWhenSmart {
|
||||||
|
val generated = factory.generateIt(project, element) ?: return@runWhenSmart
|
||||||
|
|
||||||
runWriteAction {
|
project.executeWriteCommand("Create actual declaration") {
|
||||||
if (actualFile.packageDirective?.fqName != file.packageDirective?.fqName &&
|
if (actualFile.packageDirective?.fqName != file.packageDirective?.fqName &&
|
||||||
actualFile.declarations.isEmpty()
|
actualFile.declarations.isEmpty()
|
||||||
) {
|
) {
|
||||||
val packageDirective = file.packageDirective
|
val packageDirective = file.packageDirective
|
||||||
packageDirective?.let {
|
packageDirective?.let {
|
||||||
val oldPackageDirective = actualFile.packageDirective
|
val oldPackageDirective = actualFile.packageDirective
|
||||||
val newPackageDirective = factory.createPackageDirective(it.fqName)
|
val newPackageDirective = factory.createPackageDirective(it.fqName)
|
||||||
if (oldPackageDirective != null) {
|
if (oldPackageDirective != null) {
|
||||||
oldPackageDirective.replace(newPackageDirective)
|
oldPackageDirective.replace(newPackageDirective)
|
||||||
} else {
|
} else {
|
||||||
actualFile.add(newPackageDirective)
|
actualFile.add(newPackageDirective)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
val actualDeclaration = actualFile.add(generated) as KtElement
|
||||||
|
val reformatted = CodeStyleManager.getInstance(project).reformat(actualDeclaration)
|
||||||
|
val shortened = ShortenReferences.DEFAULT.process(reformatted as KtElement)
|
||||||
|
EditorHelper.openInEditor(shortened)?.caretModel?.moveToOffset(shortened.textRange.startOffset)
|
||||||
}
|
}
|
||||||
val actualDeclaration = actualFile.add(generated) as KtElement
|
|
||||||
val reformatted = CodeStyleManager.getInstance(project).reformat(actualDeclaration)
|
|
||||||
val shortened = ShortenReferences.DEFAULT.process(reformatted as KtElement)
|
|
||||||
EditorHelper.openInEditor(shortened)?.caretModel?.moveToOffset(shortened.textRange.startOffset)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user