diff --git a/platform/extensions/src/com/intellij/openapi/extensions/ExtensionPointName.kt b/platform/extensions/src/com/intellij/openapi/extensions/ExtensionPointName.kt index a67e2b15afda..fcffee16adbc 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/ExtensionPointName.kt +++ b/platform/extensions/src/com/intellij/openapi/extensions/ExtensionPointName.kt @@ -81,8 +81,9 @@ class ExtensionPointName(name: @NonNls String) : BaseExtensionPointName } /** - * Consider using [ProjectExtensionPointName.getExtensions] + * Do not use project-level or module-level extensions. */ + @Obsolete fun getExtensionList(areaInstance: AreaInstance?): List = getPointImpl(areaInstance).extensionList /** @@ -97,9 +98,7 @@ class ExtensionPointName(name: @NonNls String) : BaseExtensionPointName return getPointImpl(areaInstance).extensionList.stream() } - @Suppress("DeprecatedCallableAddReplaceWith") - @Deprecated("""use {@link #getPoint()} to access application-level extensions and {@link ProjectExtensionPointName#getPoint(AreaInstance)} - to access project-level and module-level extensions""") + @Deprecated("Do not use project-level or module-level extensions.") fun getPoint(areaInstance: AreaInstance?): ExtensionPoint = getPointImpl(areaInstance) val point: ExtensionPoint diff --git a/platform/extensions/src/com/intellij/openapi/extensions/ExtensionsArea.kt b/platform/extensions/src/com/intellij/openapi/extensions/ExtensionsArea.kt index ff89ccfec01b..5bd055901e0d 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/ExtensionsArea.kt +++ b/platform/extensions/src/com/intellij/openapi/extensions/ExtensionsArea.kt @@ -1,42 +1,47 @@ // 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.openapi.extensions; +package com.intellij.openapi.extensions -import com.intellij.openapi.extensions.impl.ExtensionPointImpl; -import org.jetbrains.annotations.*; - -import java.util.Map; +import com.intellij.openapi.extensions.impl.ExtensionPointImpl +import org.jetbrains.annotations.ApiStatus +import org.jetbrains.annotations.NonNls +import org.jetbrains.annotations.TestOnly +import org.jetbrains.annotations.Unmodifiable @ApiStatus.Internal -public interface ExtensionsArea { +interface ExtensionsArea { @TestOnly - void registerExtensionPoint(@NonNls @NotNull String extensionPointName, - @NotNull String extensionPointBeanClass, - @NotNull ExtensionPoint.Kind kind, - boolean isDynamic); + fun registerExtensionPoint(extensionPointName: @NonNls String, + extensionPointBeanClass: String, + kind: ExtensionPoint.Kind, + isDynamic: Boolean) + - /** - * @deprecated Use {@link #registerExtensionPoint(String, String, ExtensionPoint.Kind, boolean)} - */ @TestOnly - @Deprecated - default void registerExtensionPoint(@NonNls @NotNull String extensionPointName, - @NotNull String extensionPointBeanClass, - @NotNull ExtensionPoint.Kind kind) { - registerExtensionPoint(extensionPointName, extensionPointBeanClass, kind, false); + @Deprecated(message = "Do not use", replaceWith = ReplaceWith("registerExtensionPoint(String, String, ExtensionPoint.Kind, boolean)")) + fun registerExtensionPoint(extensionPointName: @NonNls String, + extensionPointBeanClass: String, + kind: ExtensionPoint.Kind) { + registerExtensionPoint(extensionPointName = extensionPointName, + extensionPointBeanClass = extensionPointBeanClass, + kind = kind, + isDynamic = false) } @TestOnly - void unregisterExtensionPoint(@NonNls @NotNull String extensionPointName); + fun unregisterExtensionPoint(extensionPointName: @NonNls String) - boolean hasExtensionPoint(@NonNls @NotNull String extensionPointName); + fun hasExtensionPoint(extensionPointName: @NonNls String): Boolean - boolean hasExtensionPoint(@NotNull ExtensionPointName extensionPointName); + fun hasExtensionPoint(extensionPointName: ExtensionPointName<*>): Boolean - @NotNull ExtensionPoint<@NotNull T> getExtensionPoint(@NonNls @NotNull String extensionPointName); + fun getExtensionPoint(extensionPointName: @NonNls String): ExtensionPoint - @Nullable ExtensionPoint<@NotNull T> getExtensionPointIfRegistered(@NotNull String extensionPointName); + fun getExtensionPointIfRegistered(extensionPointName: String): ExtensionPoint? - @NotNull ExtensionPoint<@NotNull T> getExtensionPoint(@NotNull ExtensionPointName extensionPointName); + fun getExtensionPoint(extensionPointName: ExtensionPointName): ExtensionPoint - @NotNull @Unmodifiable Map> getNameToPointMap(); + val nameToPointMap: @Unmodifiable Map> + + @TestOnly + fun processExtensionPoints(consumer: (ExtensionPointImpl<*>) -> Unit) } diff --git a/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.kt b/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.kt index a5f0a52ad41d..3f1f155d936f 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.kt +++ b/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.kt @@ -16,7 +16,6 @@ import org.jdom.Element import org.jetbrains.annotations.ApiStatus.Internal import org.jetbrains.annotations.TestOnly import java.lang.reflect.Modifier -import java.util.function.Consumer private val LOG: Logger get() = logger() @@ -57,7 +56,8 @@ class ExtensionsAreaImpl(private val componentManager: ComponentManager) : Exten private val epTraces = if (DEBUG_REGISTRATION) HashMap() else null - override fun getNameToPointMap(): Map> = extensionPoints + override val nameToPointMap: Map> + get() = extensionPoints private val lock = Any() @@ -179,7 +179,7 @@ class ExtensionsAreaImpl(private val componentManager: ComponentManager) : Exten registerExtensionPoint(extensionPointName = extensionPointName, extensionPointBeanClass = extensionPointBeanClass, kind = kind, - dynamic = false) + isDynamic = false) Disposer.register(parentDisposable) { unregisterExtensionPoint(extensionPointName) } } @@ -187,13 +187,13 @@ class ExtensionsAreaImpl(private val componentManager: ComponentManager) : Exten override fun registerExtensionPoint(extensionPointName: String, extensionPointBeanClass: String, kind: ExtensionPoint.Kind, - dynamic: Boolean) { + isDynamic: Boolean) { val pluginDescriptor = DefaultPluginDescriptor(PluginId.getId("fakeIdForTests")) doRegisterExtensionPoint(name = extensionPointName, extensionClass = extensionPointBeanClass, pluginDescriptor = pluginDescriptor, isInterface = kind == ExtensionPoint.Kind.INTERFACE, - dynamic = dynamic) + dynamic = isDynamic) } @TestOnly @@ -289,7 +289,7 @@ class ExtensionsAreaImpl(private val componentManager: ComponentManager) : Exten } @TestOnly - fun processExtensionPoints(consumer: Consumer>) { + override fun processExtensionPoints(consumer: (ExtensionPointImpl<*>) -> Unit) { extensionPoints.values.forEach(consumer) } diff --git a/platform/lang-impl/testSources/com/intellij/openapi/roots/ModuleExtensionRegistrationTest.kt b/platform/lang-impl/testSources/com/intellij/openapi/roots/ModuleExtensionRegistrationTest.kt index c8b4d0aa0e94..56920332e6b8 100644 --- a/platform/lang-impl/testSources/com/intellij/openapi/roots/ModuleExtensionRegistrationTest.kt +++ b/platform/lang-impl/testSources/com/intellij/openapi/roots/ModuleExtensionRegistrationTest.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// 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.openapi.roots import com.intellij.openapi.Disposable @@ -35,6 +35,7 @@ class ModuleExtensionRegistrationTest : HeavyPlatformTestCase() { } }) for (module in ModuleManager.getInstance(myProject).modules) { + @Suppress("DEPRECATION") ModuleRootManagerEx.MODULE_EXTENSION_NAME.getPoint(module).registerExtension(MockModuleExtension(), moduleTypeDisposable) } } diff --git a/platform/platform-impl/src/com/intellij/internal/performance/ActionUpdatesBenchmarkAction.java b/platform/platform-impl/src/com/intellij/internal/performance/ActionUpdatesBenchmarkAction.java index 6669a8115df5..e2958ac4a7c7 100644 --- a/platform/platform-impl/src/com/intellij/internal/performance/ActionUpdatesBenchmarkAction.java +++ b/platform/platform-impl/src/com/intellij/internal/performance/ActionUpdatesBenchmarkAction.java @@ -1,4 +1,4 @@ -// 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.internal.performance; import com.intellij.ide.DataManager; @@ -29,6 +29,7 @@ import com.intellij.util.TimeoutUtil; import com.intellij.util.concurrency.AppExecutorUtil; import com.intellij.util.ui.EDT; import com.intellij.util.ui.UIUtil; +import kotlin.Unit; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -271,6 +272,7 @@ public final class ActionUpdatesBenchmarkAction extends DumbAwareAction { catch (Throwable e) { LOG.warn(e); } + return Unit.INSTANCE; }); StringBuilder sb = new StringBuilder(); diff --git a/platform/projectModel-api/src/com/intellij/openapi/roots/JavaModuleExternalPaths.java b/platform/projectModel-api/src/com/intellij/openapi/roots/JavaModuleExternalPaths.java index 6b1c7345381d..ed0aa8852e5f 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/roots/JavaModuleExternalPaths.java +++ b/platform/projectModel-api/src/com/intellij/openapi/roots/JavaModuleExternalPaths.java @@ -1,18 +1,4 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the 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.openapi.roots; import com.intellij.openapi.module.Module; @@ -22,8 +8,7 @@ import org.jetbrains.annotations.NotNull; @ApiStatus.NonExtendable public abstract class JavaModuleExternalPaths extends ModuleExtension { - - public static JavaModuleExternalPaths getInstance(Module module) { + public static JavaModuleExternalPaths getInstance(@NotNull Module module) { return ModuleRootManager.getInstance(module).getModuleExtension(JavaModuleExternalPaths.class); } diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/ModuleRootManagerEx.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/ModuleRootManagerEx.java index e97c34ed034f..59f34fa60c3f 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/ModuleRootManagerEx.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/ModuleRootManagerEx.java @@ -1,7 +1,7 @@ -// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// 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.openapi.roots; -import com.intellij.openapi.extensions.ProjectExtensionPointName; +import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.impl.RootConfigurationAccessor; import org.jetbrains.annotations.ApiStatus; @@ -9,7 +9,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.TestOnly; public abstract class ModuleRootManagerEx extends ModuleRootManager { - public static final ProjectExtensionPointName MODULE_EXTENSION_NAME = new ProjectExtensionPointName<>("com.intellij.moduleExtension"); + public static final ExtensionPointName MODULE_EXTENSION_NAME = new ExtensionPointName<>("com.intellij.moduleExtension"); @NotNull public abstract ModifiableRootModel getModifiableModel(@NotNull RootConfigurationAccessor accessor); diff --git a/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/roots/ModuleRootComponentBridge.kt b/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/roots/ModuleRootComponentBridge.kt index 454812b4040e..ec0309aa764a 100644 --- a/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/roots/ModuleRootComponentBridge.kt +++ b/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/roots/ModuleRootComponentBridge.kt @@ -51,6 +51,7 @@ class ModuleRootComponentBridge( } init { + @Suppress("DEPRECATION") MODULE_EXTENSION_NAME.getPoint(moduleBridge).addExtensionPointListener(object : ExtensionPointListener { override fun extensionAdded(extension: ModuleExtension, pluginDescriptor: PluginDescriptor) { dropRootModelCache() diff --git a/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/roots/RootModelBridgeImpl.kt b/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/roots/RootModelBridgeImpl.kt index 444af4d527a4..1d17d5ee6d39 100644 --- a/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/roots/RootModelBridgeImpl.kt +++ b/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/roots/RootModelBridgeImpl.kt @@ -142,7 +142,7 @@ internal class RootModelBridgeImpl(internal val moduleEntity: ModuleEntity?, if (parentDisposable is RootModelBridgeImpl && parentDisposable.isDisposed.get()) { parentDisposable.throwDisposed() } - for (extension in ModuleRootManagerEx.MODULE_EXTENSION_NAME.getExtensions(module)) { + for (extension in ModuleRootManagerEx.MODULE_EXTENSION_NAME.getExtensionList(module)) { val readOnlyExtension = loadExtension(extension, parentDisposable, rootManagerElement) if (writable) { diff --git a/platform/service-container/src/com/intellij/serviceContainer/ComponentManagerImpl.kt b/platform/service-container/src/com/intellij/serviceContainer/ComponentManagerImpl.kt index 6edf5f1f9ef8..25bd2a22b6d9 100644 --- a/platform/service-container/src/com/intellij/serviceContainer/ComponentManagerImpl.kt +++ b/platform/service-container/src/com/intellij/serviceContainer/ComponentManagerImpl.kt @@ -378,7 +378,7 @@ abstract class ComponentManagerImpl( // register services before registering extensions because plugins can access services in their extensions, // which can be invoked right away if the plugin is loaded dynamically - val extensionPoints = if (precomputedExtensionModel == null) HashMap(extensionArea.getNameToPointMap()) else null + val extensionPoints = if (precomputedExtensionModel == null) HashMap(extensionArea.nameToPointMap) else null for (rootModule in modules) { executeRegisterTask(rootModule) { module -> val containerDescriptor = getContainerDescriptor(module) diff --git a/platform/testFramework/src/com/intellij/tests/DynamicExtensionPointsTester.java b/platform/testFramework/src/com/intellij/tests/DynamicExtensionPointsTester.java index 80f267ce4666..3eea50dfb608 100644 --- a/platform/testFramework/src/com/intellij/tests/DynamicExtensionPointsTester.java +++ b/platform/testFramework/src/com/intellij/tests/DynamicExtensionPointsTester.java @@ -126,7 +126,7 @@ public final class DynamicExtensionPointsTester { @NotNull Map, Collection>> extensions) { area.processExtensionPoints(ep -> { if (!ep.isDynamic() || (useWhiteList && !EXTENSION_POINTS_WHITE_LIST.contains(ep.name))) { - return; + return Unit.INSTANCE; } List> list = new ArrayList<>(); @@ -137,6 +137,7 @@ public final class DynamicExtensionPointsTester { return Unit.INSTANCE; }); extensions.put(ep, list); + return Unit.INSTANCE; }); } }