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