Get rid of IndexNotReadyException in CreateActualFix

Related to KT-19586
This commit is contained in:
Mikhail Glukhikh
2018-09-06 13:09:41 +03:00
parent 74c5d8ed09
commit 26469b3365
@@ -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,9 +73,10 @@ 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()
) { ) {
@@ -94,6 +97,7 @@ sealed class CreateActualFix<out D : KtNamedDeclaration>(
EditorHelper.openInEditor(shortened)?.caretModel?.moveToOffset(shortened.textRange.startOffset) EditorHelper.openInEditor(shortened)?.caretModel?.moveToOffset(shortened.textRange.startOffset)
} }
} }
}
private fun getOrCreateImplementationFile(): KtFile? { private fun getOrCreateImplementationFile(): KtFile? {
val declaration = element as? KtNamedDeclaration ?: return null val declaration = element as? KtNamedDeclaration ?: return null