diff --git a/idea/resources-descriptors/META-INF/plugin.xml b/idea/resources-descriptors/META-INF/plugin.xml index 7fd96ad5765..793d670b990 100644 --- a/idea/resources-descriptors/META-INF/plugin.xml +++ b/idea/resources-descriptors/META-INF/plugin.xml @@ -99,6 +99,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + diff --git a/idea/resources-descriptors/META-INF/plugin.xml.193 b/idea/resources-descriptors/META-INF/plugin.xml.193 index 20111ffc31f..62ca572bebe 100644 --- a/idea/resources-descriptors/META-INF/plugin.xml.193 +++ b/idea/resources-descriptors/META-INF/plugin.xml.193 @@ -110,6 +110,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + diff --git a/idea/resources-descriptors/META-INF/plugin.xml.202 b/idea/resources-descriptors/META-INF/plugin.xml.202 index 5c27f8c8763..7bb50e19353 100644 --- a/idea/resources-descriptors/META-INF/plugin.xml.202 +++ b/idea/resources-descriptors/META-INF/plugin.xml.202 @@ -99,6 +99,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + diff --git a/idea/resources-descriptors/META-INF/plugin.xml.as40 b/idea/resources-descriptors/META-INF/plugin.xml.as40 index 5b34e2eb4dc..61d3e7a6a09 100644 --- a/idea/resources-descriptors/META-INF/plugin.xml.as40 +++ b/idea/resources-descriptors/META-INF/plugin.xml.as40 @@ -109,6 +109,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + diff --git a/idea/resources-descriptors/META-INF/plugin.xml.as41 b/idea/resources-descriptors/META-INF/plugin.xml.as41 index 95a1cf31049..81af72f575e 100644 --- a/idea/resources-descriptors/META-INF/plugin.xml.as41 +++ b/idea/resources-descriptors/META-INF/plugin.xml.as41 @@ -98,6 +98,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + diff --git a/idea/src/org/jetbrains/kotlin/idea/PluginStartupActivity.java b/idea/src/org/jetbrains/kotlin/idea/PluginStartupActivity.java index 1f1d0d4d10e..bc36cd83676 100644 --- a/idea/src/org/jetbrains/kotlin/idea/PluginStartupActivity.java +++ b/idea/src/org/jetbrains/kotlin/idea/PluginStartupActivity.java @@ -17,24 +17,15 @@ package org.jetbrains.kotlin.idea; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.EditorFactory; -import com.intellij.openapi.editor.event.DocumentEvent; -import com.intellij.openapi.editor.event.DocumentListener; -import com.intellij.openapi.editor.event.EditorEventMulticaster; -import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.extensions.PluginId; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupActivity; import com.intellij.openapi.updateSettings.impl.UpdateChecker; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.search.searches.IndexPatternSearch; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.diagnostics.DiagnosticFactory; import org.jetbrains.kotlin.diagnostics.Errors; import org.jetbrains.kotlin.idea.reporter.KotlinReportSubmitter; -import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinTodoSearcher; import org.jetbrains.kotlin.js.resolve.diagnostics.ErrorsJs; import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm; import org.jetbrains.kotlin.resolve.konan.diagnostics.ErrorsNative; @@ -51,6 +42,7 @@ public class PluginStartupActivity implements StartupActivity { } StartupCompatKt.runActivity(project); + PluginStartupService.Companion.getInstance(project).register(project); initializeDiagnostics(); @@ -60,23 +52,8 @@ public class PluginStartupActivity implements StartupActivity { } catch (Throwable throwable) { LOG.debug("Excluding Kotlin plugin updates using old API", throwable); - UpdateChecker.getDisabledToUpdatePlugins().add("org.jetbrains.kotlin"); + UpdateChecker.getDisabledToUpdate().add(PluginId.getId("org.jetbrains.kotlin")); } - EditorEventMulticaster eventMulticaster = EditorFactory.getInstance().getEventMulticaster(); - DocumentListener documentListener = new DocumentListener() { - @Override - public void documentChanged(@NotNull DocumentEvent e) { - VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(e.getDocument()); - if (virtualFile != null && virtualFile.getFileType() == KotlinFileType.INSTANCE) { - KotlinPluginUpdater.Companion.getInstance().kotlinFileEdited(virtualFile); - } - } - }; - eventMulticaster.addDocumentListener(documentListener, project); - - IndexPatternSearch indexPatternSearch = ServiceManager.getService(IndexPatternSearch.class); - KotlinTodoSearcher kotlinTodoSearcher = new KotlinTodoSearcher(); - indexPatternSearch.registerExecutor(kotlinTodoSearcher); KotlinPluginCompatibilityVerifier.checkCompatibility(); @@ -84,11 +61,6 @@ public class PluginStartupActivity implements StartupActivity { //todo[Sedunov]: wait for fix in platform to avoid misunderstood from Java newbies (also ConfigureKotlinInTempDirTest) //KotlinSdkType.Companion.setUpIfNeeded(); - - Disposer.register(project, () -> { - eventMulticaster.removeDocumentListener(documentListener); - indexPatternSearch.unregisterExecutor(kotlinTodoSearcher); - }); } /* diff --git a/idea/src/org/jetbrains/kotlin/idea/PluginStartupService.kt b/idea/src/org/jetbrains/kotlin/idea/PluginStartupService.kt new file mode 100644 index 00000000000..479d59535df --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/PluginStartupService.kt @@ -0,0 +1,51 @@ +/* + * 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 + +import com.intellij.openapi.Disposable +import com.intellij.openapi.components.ServiceManager +import com.intellij.openapi.editor.EditorFactory +import com.intellij.openapi.editor.event.DocumentEvent +import com.intellij.openapi.editor.event.DocumentListener +import com.intellij.openapi.fileEditor.FileDocumentManager +import com.intellij.openapi.project.Project +import com.intellij.openapi.util.Disposer +import com.intellij.psi.search.searches.IndexPatternSearch +import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinTodoSearcher +import org.jetbrains.kotlin.idea.util.application.getServiceSafe + +class PluginStartupService : Disposable { + + fun register(project: Project) { + val eventMulticaster = EditorFactory.getInstance().eventMulticaster + val documentListener: DocumentListener = object : DocumentListener { + override fun documentChanged(e: DocumentEvent) { + FileDocumentManager.getInstance().getFile(e.document)?.let { virtualFile -> + if (virtualFile.fileType === KotlinFileType.INSTANCE) { + KotlinPluginUpdater.getInstance().kotlinFileEdited(virtualFile) + } + } + } + } + eventMulticaster.addDocumentListener(documentListener, this) + + val indexPatternSearch = ServiceManager.getService(IndexPatternSearch::class.java) + val kotlinTodoSearcher = KotlinTodoSearcher() + indexPatternSearch.registerExecutor(kotlinTodoSearcher) + + Disposer.register(this, { + eventMulticaster.removeDocumentListener(documentListener) + indexPatternSearch.unregisterExecutor(kotlinTodoSearcher) + }) + } + + override fun dispose() { + } + + companion object { + fun getInstance(project: Project): PluginStartupService = project.getServiceSafe() + } +} \ No newline at end of file