mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-14 18:05:27 +07:00
get rid of createDisposable
GitOrigin-RevId: 14e43ccef1179ae0436e63622be1a030375430d4
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e25387ea42
commit
27028c3aa6
@@ -1,9 +1,8 @@
|
|||||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||||
package org.intellij.lang.regexp.intention;
|
package org.intellij.lang.regexp.intention;
|
||||||
|
|
||||||
import com.intellij.codeInsight.highlighting.HighlightManager;
|
import com.intellij.codeInsight.highlighting.HighlightManager;
|
||||||
import com.intellij.icons.AllIcons;
|
import com.intellij.icons.AllIcons;
|
||||||
import com.intellij.ide.plugins.PluginManager;
|
|
||||||
import com.intellij.ide.util.PropertiesComponent;
|
import com.intellij.ide.util.PropertiesComponent;
|
||||||
import com.intellij.lang.Language;
|
import com.intellij.lang.Language;
|
||||||
import com.intellij.lang.injection.InjectedLanguageManager;
|
import com.intellij.lang.injection.InjectedLanguageManager;
|
||||||
@@ -14,6 +13,7 @@ import com.intellij.openapi.actionSystem.CustomShortcutSet;
|
|||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.application.ModalityState;
|
import com.intellij.openapi.application.ModalityState;
|
||||||
import com.intellij.openapi.application.ReadAction;
|
import com.intellij.openapi.application.ReadAction;
|
||||||
|
import com.intellij.openapi.components.Service;
|
||||||
import com.intellij.openapi.diagnostic.Logger;
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
import com.intellij.openapi.editor.Document;
|
import com.intellij.openapi.editor.Document;
|
||||||
import com.intellij.openapi.editor.Editor;
|
import com.intellij.openapi.editor.Editor;
|
||||||
@@ -112,7 +112,7 @@ public final class CheckRegExpForm {
|
|||||||
@Override
|
@Override
|
||||||
protected void onEditorAdded(@NotNull Editor editor) {
|
protected void onEditorAdded(@NotNull Editor editor) {
|
||||||
super.onEditorAdded(editor);
|
super.onEditorAdded(editor);
|
||||||
disposable = PluginManager.getInstance().createDisposable(CheckRegExpForm.class);
|
disposable = ApplicationManager.getApplication().getService(RegExpDisposable.class);
|
||||||
editor.getCaretModel().addCaretListener(new CaretListener() {
|
editor.getCaretModel().addCaretListener(new CaretListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -164,15 +164,14 @@ public final class CheckRegExpForm {
|
|||||||
});
|
});
|
||||||
setupIcon(myRegExp, myRegExpIcon);
|
setupIcon(myRegExp, myRegExpIcon);
|
||||||
|
|
||||||
final String sampleText =
|
String sampleText = PropertiesComponent.getInstance(project).getValue(LAST_EDITED_REGEXP, RegExpBundle.message("checker.sample.text"));
|
||||||
PropertiesComponent.getInstance(project).getValue(LAST_EDITED_REGEXP, RegExpBundle.message("checker.sample.text"));
|
|
||||||
mySampleText = new EditorTextField(sampleText, project, PlainTextFileType.INSTANCE) {
|
mySampleText = new EditorTextField(sampleText, project, PlainTextFileType.INSTANCE) {
|
||||||
private Disposable disposable;
|
private Disposable disposable;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onEditorAdded(@NotNull Editor editor) {
|
protected void onEditorAdded(@NotNull Editor editor) {
|
||||||
super.onEditorAdded(editor);
|
super.onEditorAdded(editor);
|
||||||
disposable = PluginManager.getInstance().createDisposable(CheckRegExpForm.class);
|
disposable = ApplicationManager.getApplication().getService(RegExpDisposable.class);
|
||||||
editor.getCaretModel().addCaretListener(new CaretListener() {
|
editor.getCaretModel().addCaretListener(new CaretListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -282,7 +281,8 @@ public final class CheckRegExpForm {
|
|||||||
if (result != RegExpMatchResult.MATCHES && result != RegExpMatchResult.FOUND) {
|
if (result != RegExpMatchResult.MATCHES && result != RegExpMatchResult.FOUND) {
|
||||||
setMatches(regExpFile, null);
|
setMatches(regExpFile, null);
|
||||||
}
|
}
|
||||||
ApplicationManager.getApplication().invokeLater(() -> reportResult(result, regExpFile), ModalityState.any(), __ -> updater.isDisposed());
|
ApplicationManager.getApplication()
|
||||||
|
.invokeLater(() -> reportResult(result, regExpFile), ModalityState.any(), __ -> updater.isDisposed());
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -576,8 +576,8 @@ public final class CheckRegExpForm {
|
|||||||
return RegExpMatchResult.BAD_REGEXP;
|
return RegExpMatchResult.BAD_REGEXP;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SmartList<RegExpMatch> collectMatches(Matcher matcher) {
|
private static List<RegExpMatch> collectMatches(Matcher matcher) {
|
||||||
final SmartList<RegExpMatch> matches = new SmartList<>();
|
List<RegExpMatch> matches = new SmartList<>();
|
||||||
do {
|
do {
|
||||||
final RegExpMatch match = new RegExpMatch();
|
final RegExpMatch match = new RegExpMatch();
|
||||||
final int count = matcher.groupCount();
|
final int count = matcher.groupCount();
|
||||||
@@ -585,7 +585,15 @@ public final class CheckRegExpForm {
|
|||||||
match.add(matcher.start(i), matcher.end(i));
|
match.add(matcher.start(i), matcher.end(i));
|
||||||
}
|
}
|
||||||
matches.add(match);
|
matches.add(match);
|
||||||
} while (matcher.find());
|
}
|
||||||
|
while (matcher.find());
|
||||||
return matches;
|
return matches;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Service
|
||||||
|
final class RegExpDisposable implements Disposable {
|
||||||
|
@Override
|
||||||
|
public void dispose() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,14 @@
|
|||||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||||
package com.intellij.ide.plugins;
|
package com.intellij.ide.plugins;
|
||||||
|
|
||||||
import com.intellij.ide.plugins.cl.PluginAwareClassLoader;
|
import com.intellij.ide.plugins.cl.PluginAwareClassLoader;
|
||||||
import com.intellij.openapi.Disposable;
|
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.application.PathManager;
|
import com.intellij.openapi.application.PathManager;
|
||||||
import com.intellij.openapi.application.ex.ApplicationInfoEx;
|
import com.intellij.openapi.application.ex.ApplicationInfoEx;
|
||||||
import com.intellij.openapi.components.ComponentManager;
|
|
||||||
import com.intellij.openapi.components.Service;
|
import com.intellij.openapi.components.Service;
|
||||||
import com.intellij.openapi.diagnostic.Logger;
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
import com.intellij.openapi.extensions.PluginDescriptor;
|
import com.intellij.openapi.extensions.PluginDescriptor;
|
||||||
import com.intellij.openapi.extensions.PluginId;
|
import com.intellij.openapi.extensions.PluginId;
|
||||||
import com.intellij.openapi.util.Disposer;
|
|
||||||
import org.jetbrains.annotations.ApiStatus;
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -155,35 +152,6 @@ public final class PluginManager {
|
|||||||
return PluginManagerCore.getPluginSet().findEnabledPlugin(id);
|
return PluginManagerCore.getPluginSet().findEnabledPlugin(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull Disposable createDisposable(@NotNull Class<?> requestor) {
|
|
||||||
ClassLoader classLoader = requestor.getClassLoader();
|
|
||||||
if (!(classLoader instanceof PluginAwareClassLoader)) {
|
|
||||||
return Disposer.newDisposable();
|
|
||||||
}
|
|
||||||
|
|
||||||
int classLoaderId = ((PluginAwareClassLoader)classLoader).getInstanceId();
|
|
||||||
// must not be lambda because we care about identity in ObjectTree.myObject2NodeMap
|
|
||||||
return new PluginAwareDisposable() {
|
|
||||||
@Override
|
|
||||||
public int getClassLoaderId() {
|
|
||||||
return classLoaderId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void dispose() { }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull Disposable createDisposable(@NotNull Class<?> requestor, @NotNull ComponentManager parentDisposable) {
|
|
||||||
Disposable disposable = createDisposable(requestor);
|
|
||||||
Disposer.register(parentDisposable, disposable);
|
|
||||||
return disposable;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface PluginAwareDisposable extends Disposable {
|
|
||||||
int getClassLoaderId();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert build number like '146.9999' to '146.*' (like plugin repository does) to ensure that plugins which have such values in
|
* Convert build number like '146.9999' to '146.*' (like plugin repository does) to ensure that plugins which have such values in
|
||||||
* 'until-build' attribute will be compatible with 146.SNAPSHOT build.
|
* 'until-build' attribute will be compatible with 146.SNAPSHOT build.
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ private val EMPTY_CLASS_LOADER_ARRAY = arrayOfNulls<ClassLoader>(0)
|
|||||||
private val KOTLIN_STDLIB_CLASSES_USED_IN_SIGNATURES = computeKotlinStdlibClassesUsedInSignatures()
|
private val KOTLIN_STDLIB_CLASSES_USED_IN_SIGNATURES = computeKotlinStdlibClassesUsedInSignatures()
|
||||||
|
|
||||||
private var logStream: Writer? = null
|
private var logStream: Writer? = null
|
||||||
private val instanceIdProducer = AtomicInteger()
|
|
||||||
private val parentListCacheIdCounter = AtomicInteger()
|
private val parentListCacheIdCounter = AtomicInteger()
|
||||||
|
|
||||||
@ApiStatus.Internal
|
@ApiStatus.Internal
|
||||||
@@ -72,8 +71,7 @@ class PluginClassLoader(classPath: ClassPath,
|
|||||||
private val edtTime = AtomicLong()
|
private val edtTime = AtomicLong()
|
||||||
private val backgroundTime = AtomicLong()
|
private val backgroundTime = AtomicLong()
|
||||||
private val loadedClassCounter = AtomicInteger()
|
private val loadedClassCounter = AtomicInteger()
|
||||||
private val instanceId = instanceIdProducer.incrementAndGet()
|
private val scope: CoroutineScope = CoroutineScope(SupervisorJob() + CoroutineName(pluginId.idString))
|
||||||
private val scope: CoroutineScope = CoroutineScope(SupervisorJob() + CoroutineName("${pluginId.idString}@$instanceId"))
|
|
||||||
private val _resolveScopeManager = resolveScopeManager ?: defaultResolveScopeManager
|
private val _resolveScopeManager = resolveScopeManager ?: defaultResolveScopeManager
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -133,8 +131,6 @@ class PluginClassLoader(classPath: ClassPath,
|
|||||||
throw IllegalStateException("Unexpected state: $state")
|
throw IllegalStateException("Unexpected state: $state")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getInstanceId(): Int = instanceId
|
|
||||||
|
|
||||||
override fun getEdtTime(): Long = edtTime.get()
|
override fun getEdtTime(): Long = edtTime.get()
|
||||||
|
|
||||||
override fun getBackgroundTime(): Long = backgroundTime.get()
|
override fun getBackgroundTime(): Long = backgroundTime.get()
|
||||||
@@ -469,7 +465,6 @@ ${if (exception == null) "" else exception.message}""")
|
|||||||
return "${javaClass.simpleName}(" +
|
return "${javaClass.simpleName}(" +
|
||||||
"plugin=$pluginDescriptor, " +
|
"plugin=$pluginDescriptor, " +
|
||||||
"packagePrefix=$packagePrefix, " +
|
"packagePrefix=$packagePrefix, " +
|
||||||
"instanceId=$instanceId, " +
|
|
||||||
"state=${if (state == PluginAwareClassLoader.ACTIVE) "active" else "unload in progress"}" +
|
"state=${if (state == PluginAwareClassLoader.ACTIVE) "active" else "unload in progress"}" +
|
||||||
")"
|
")"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ public interface PluginAwareClassLoader {
|
|||||||
|
|
||||||
@NotNull PluginId getPluginId();
|
@NotNull PluginId getPluginId();
|
||||||
|
|
||||||
int getInstanceId();
|
|
||||||
|
|
||||||
long getEdtTime();
|
long getEdtTime();
|
||||||
|
|
||||||
long getBackgroundTime();
|
long getBackgroundTime();
|
||||||
|
|||||||
@@ -1098,15 +1098,9 @@ private fun analyzeSnapshot(hprofPath: String, pluginId: PluginId): String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createDisposeTreePredicate(pluginDescriptor: IdeaPluginDescriptorImpl): Predicate<Disposable>? {
|
private fun createDisposeTreePredicate(pluginDescriptor: IdeaPluginDescriptorImpl): Predicate<Disposable>? {
|
||||||
val classLoader = pluginDescriptor.pluginClassLoader as? PluginClassLoader
|
val classLoader = pluginDescriptor.pluginClassLoader as? PluginClassLoader ?: return null
|
||||||
?: return null
|
|
||||||
return Predicate {
|
return Predicate {
|
||||||
if (it is PluginManager.PluginAwareDisposable) {
|
it::class.java.classLoader === classLoader
|
||||||
it.classLoaderId == classLoader.instanceId
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
it::class.java.classLoader === classLoader
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import com.intellij.execution.target.TargetProgressIndicator;
|
|||||||
import com.intellij.execution.target.value.TargetEnvironmentFunctions;
|
import com.intellij.execution.target.value.TargetEnvironmentFunctions;
|
||||||
import com.intellij.execution.ui.ConsoleView;
|
import com.intellij.execution.ui.ConsoleView;
|
||||||
import com.intellij.ide.AppLifecycleListener;
|
import com.intellij.ide.AppLifecycleListener;
|
||||||
import com.intellij.ide.plugins.PluginManager;
|
|
||||||
import com.intellij.openapi.Disposable;
|
import com.intellij.openapi.Disposable;
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.module.Module;
|
import com.intellij.openapi.module.Module;
|
||||||
@@ -34,6 +33,7 @@ import com.intellij.util.NotNullFunction;
|
|||||||
import com.intellij.util.containers.ContainerUtil;
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import com.jetbrains.python.HelperPackage;
|
import com.jetbrains.python.HelperPackage;
|
||||||
import com.jetbrains.python.PyBundle;
|
import com.jetbrains.python.PyBundle;
|
||||||
|
import com.jetbrains.python.PythonPluginDisposable;
|
||||||
import com.jetbrains.python.console.PydevConsoleRunnerUtil;
|
import com.jetbrains.python.console.PydevConsoleRunnerUtil;
|
||||||
import com.jetbrains.python.remote.PyRemoteSdkAdditionalData;
|
import com.jetbrains.python.remote.PyRemoteSdkAdditionalData;
|
||||||
import com.jetbrains.python.sdk.PyRemoteSdkAdditionalDataMarker;
|
import com.jetbrains.python.sdk.PyRemoteSdkAdditionalDataMarker;
|
||||||
@@ -437,10 +437,29 @@ public class PythonTask {
|
|||||||
* Listener is removed from process stopped to prevent leak
|
* Listener is removed from process stopped to prevent leak
|
||||||
*/
|
*/
|
||||||
private void stopProcessWhenAppClosed(@NotNull ProcessHandler process) {
|
private void stopProcessWhenAppClosed(@NotNull ProcessHandler process) {
|
||||||
Disposable disposable = PluginManager.getInstance().createDisposable(PythonTask.class, myModule);
|
Disposable disposable = Disposer.newDisposable();
|
||||||
process.addProcessListener(new ProcessAdapter() {
|
Disposable a = new Disposable() {
|
||||||
@Override
|
@Override
|
||||||
public void processTerminated(@NotNull final ProcessEvent event) {
|
public void dispose() {
|
||||||
|
Disposer.dispose(disposable);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Disposable b = new Disposable() {
|
||||||
|
@Override
|
||||||
|
public void dispose() {
|
||||||
|
Disposer.dispose(disposable);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//noinspection IncorrectParentDisposable
|
||||||
|
Disposer.register(myModule, a);
|
||||||
|
Disposer.register(PythonPluginDisposable.getInstance(myModule.getProject()), b);
|
||||||
|
|
||||||
|
Disposer.register(disposable, a);
|
||||||
|
Disposer.register(disposable, b);
|
||||||
|
|
||||||
|
process.addProcessListener(new ProcessListener() {
|
||||||
|
@Override
|
||||||
|
public void processTerminated(@NotNull ProcessEvent event) {
|
||||||
Disposer.dispose(disposable);
|
Disposer.dispose(disposable);
|
||||||
}
|
}
|
||||||
}, disposable);
|
}, disposable);
|
||||||
|
|||||||
Reference in New Issue
Block a user