Register disposable startup items in PluginStartupService
This commit is contained in:
committed by
Vladimir Dolzhenko
parent
e5985ad98b
commit
ac22232b8d
@@ -99,6 +99,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
<applicationService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupApplicationService"/>
|
<applicationService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupApplicationService"/>
|
||||||
|
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.PluginStartupActivity"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.PluginStartupActivity"/>
|
||||||
|
<projectService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupService"/>
|
||||||
|
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.completion.LookupCancelWatcher"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.completion.LookupCancelWatcher"/>
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.caches.KotlinPackageContentModificationListener"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.caches.KotlinPackageContentModificationListener"/>
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
<applicationService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupApplicationService" />
|
<applicationService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupApplicationService" />
|
||||||
|
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.PluginStartupActivity"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.PluginStartupActivity"/>
|
||||||
|
<projectService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupService"/>
|
||||||
|
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.completion.LookupCancelWatcher"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.completion.LookupCancelWatcher"/>
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.caches.KotlinPackageContentModificationListener"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.caches.KotlinPackageContentModificationListener"/>
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
<applicationService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupApplicationService" />
|
<applicationService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupApplicationService" />
|
||||||
|
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.PluginStartupActivity"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.PluginStartupActivity"/>
|
||||||
|
<projectService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupService"/>
|
||||||
|
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.completion.LookupCancelWatcher"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.completion.LookupCancelWatcher"/>
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.caches.KotlinPackageContentModificationListener"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.caches.KotlinPackageContentModificationListener"/>
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
<applicationService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupApplicationService" />
|
<applicationService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupApplicationService" />
|
||||||
|
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.PluginStartupActivity"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.PluginStartupActivity"/>
|
||||||
|
<projectService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupService"/>
|
||||||
|
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.completion.LookupCancelWatcher"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.completion.LookupCancelWatcher"/>
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.caches.KotlinPackageContentModificationListener"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.caches.KotlinPackageContentModificationListener"/>
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
<applicationService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupApplicationService" />
|
<applicationService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupApplicationService" />
|
||||||
|
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.PluginStartupActivity"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.PluginStartupActivity"/>
|
||||||
|
<projectService serviceImplementation="org.jetbrains.kotlin.idea.PluginStartupService"/>
|
||||||
|
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.completion.LookupCancelWatcher"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.completion.LookupCancelWatcher"/>
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.caches.KotlinPackageContentModificationListener"/>
|
<postStartupActivity implementation="org.jetbrains.kotlin.idea.caches.KotlinPackageContentModificationListener"/>
|
||||||
|
|||||||
@@ -17,24 +17,15 @@
|
|||||||
package org.jetbrains.kotlin.idea;
|
package org.jetbrains.kotlin.idea;
|
||||||
|
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.components.ServiceManager;
|
|
||||||
import com.intellij.openapi.diagnostic.Logger;
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
import com.intellij.openapi.editor.EditorFactory;
|
import com.intellij.openapi.extensions.PluginId;
|
||||||
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.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.startup.StartupActivity;
|
import com.intellij.openapi.startup.StartupActivity;
|
||||||
import com.intellij.openapi.updateSettings.impl.UpdateChecker;
|
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.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory;
|
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory;
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors;
|
import org.jetbrains.kotlin.diagnostics.Errors;
|
||||||
import org.jetbrains.kotlin.idea.reporter.KotlinReportSubmitter;
|
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.js.resolve.diagnostics.ErrorsJs;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm;
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm;
|
||||||
import org.jetbrains.kotlin.resolve.konan.diagnostics.ErrorsNative;
|
import org.jetbrains.kotlin.resolve.konan.diagnostics.ErrorsNative;
|
||||||
@@ -51,6 +42,7 @@ public class PluginStartupActivity implements StartupActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
StartupCompatKt.runActivity(project);
|
StartupCompatKt.runActivity(project);
|
||||||
|
PluginStartupService.Companion.getInstance(project).register(project);
|
||||||
|
|
||||||
initializeDiagnostics();
|
initializeDiagnostics();
|
||||||
|
|
||||||
@@ -60,23 +52,8 @@ public class PluginStartupActivity implements StartupActivity {
|
|||||||
}
|
}
|
||||||
catch (Throwable throwable) {
|
catch (Throwable throwable) {
|
||||||
LOG.debug("Excluding Kotlin plugin updates using old API", 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();
|
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)
|
//todo[Sedunov]: wait for fix in platform to avoid misunderstood from Java newbies (also ConfigureKotlinInTempDirTest)
|
||||||
//KotlinSdkType.Companion.setUpIfNeeded();
|
//KotlinSdkType.Companion.setUpIfNeeded();
|
||||||
|
|
||||||
Disposer.register(project, () -> {
|
|
||||||
eventMulticaster.removeDocumentListener(documentListener);
|
|
||||||
indexPatternSearch.unregisterExecutor(kotlinTodoSearcher);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user