diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/DefaultModuleEditorsProvider.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/DefaultModuleEditorsProvider.java index 6f09f02422e7..a94ce4fef5c4 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/DefaultModuleEditorsProvider.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/DefaultModuleEditorsProvider.java @@ -1,33 +1,19 @@ -/* - * Copyright 2000-2009 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-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.openapi.roots.ui.configuration; import com.intellij.openapi.module.*; import com.intellij.openapi.module.Module; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; -public class DefaultModuleEditorsProvider implements ModuleConfigurationEditorProvider { +final class DefaultModuleEditorsProvider implements ModuleConfigurationEditorProvider { @Override - public ModuleConfigurationEditor[] createEditors(ModuleConfigurationState state) { + public @NotNull ModuleConfigurationEditor @NotNull [] createEditors(@NotNull ModuleConfigurationState state) { Module module = state.getCurrentRootModel().getModule(); ModuleType moduleType = ModuleType.get(module); - if (!(moduleType instanceof JavaModuleType) && - (!GeneralModuleType.INSTANCE.equals(moduleType))) { + if (!(moduleType instanceof JavaModuleType) && !GeneralModuleType.INSTANCE.equals(moduleType)) { return ModuleConfigurationEditor.EMPTY; } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java index 1d8a1e311d76..14f48a90f24d 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java @@ -158,9 +158,7 @@ public abstract class ModuleEditor implements Place.Navigator, Disposable { return false; } - private void createEditors(@Nullable Module module) { - if (module == null) return; - + private void createEditors(@NotNull Module module) { ModuleConfigurationState state = createModuleConfigurationState(); for (ModuleConfigurationEditorProvider provider : EP_NAME.getExtensionList(module)) { ModuleConfigurationEditor[] editors = provider.createEditors(state); @@ -218,12 +216,16 @@ public abstract class ModuleEditor implements Place.Navigator, Disposable { } private @NotNull JPanel createPanel() { - getModifiableRootModel(); //initialize model if needed + // initialize model if needed + getModifiableRootModel(); getModifiableRootModelProxy(); myGenericSettingsPanel = new ModuleEditorPanel(); - createEditors(getModule()); + Module module = getModule(); + if (module != null) { + createEditors(module); + } final JComponent component = createCenterPanel(); myGenericSettingsPanel.add(component, BorderLayout.CENTER); diff --git a/platform/lang-core/src/com/intellij/openapi/roots/ui/configuration/ModuleConfigurationEditorProvider.java b/platform/lang-core/src/com/intellij/openapi/roots/ui/configuration/ModuleConfigurationEditorProvider.java index f0c4c8e2b79c..d30a35ce91d4 100644 --- a/platform/lang-core/src/com/intellij/openapi/roots/ui/configuration/ModuleConfigurationEditorProvider.java +++ b/platform/lang-core/src/com/intellij/openapi/roots/ui/configuration/ModuleConfigurationEditorProvider.java @@ -2,6 +2,7 @@ package com.intellij.openapi.roots.ui.configuration; import com.intellij.openapi.module.ModuleConfigurationEditor; +import org.jetbrains.annotations.NotNull; /** * Implement this interface to provide tabs for a module editor in 'Project Structure' dialog. The implementation should be registered in your {@code plugin.xml}: @@ -12,5 +13,5 @@ import com.intellij.openapi.module.ModuleConfigurationEditor; * */ public interface ModuleConfigurationEditorProvider { - ModuleConfigurationEditor[] createEditors(ModuleConfigurationState state); + @NotNull ModuleConfigurationEditor @NotNull [] createEditors(@NotNull ModuleConfigurationState state); } diff --git a/platform/lang-impl/src/com/intellij/openapi/module/WebModuleConfigurationEditorProvider.java b/platform/lang-impl/src/com/intellij/openapi/module/WebModuleConfigurationEditorProvider.java index 447e3da55222..9997e4883f83 100644 --- a/platform/lang-impl/src/com/intellij/openapi/module/WebModuleConfigurationEditorProvider.java +++ b/platform/lang-impl/src/com/intellij/openapi/module/WebModuleConfigurationEditorProvider.java @@ -1,15 +1,14 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.openapi.module; import com.intellij.openapi.roots.ui.configuration.CommonContentEntriesEditor; import com.intellij.openapi.roots.ui.configuration.ModuleConfigurationEditorProvider; import com.intellij.openapi.roots.ui.configuration.ModuleConfigurationState; -import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; -@ApiStatus.Internal -public final class WebModuleConfigurationEditorProvider implements ModuleConfigurationEditorProvider { +final class WebModuleConfigurationEditorProvider implements ModuleConfigurationEditorProvider { @Override - public ModuleConfigurationEditor[] createEditors(final ModuleConfigurationState state) { + public @NotNull ModuleConfigurationEditor @NotNull [] createEditors(@NotNull ModuleConfigurationState state) { Module module = state.getCurrentRootModel().getModule(); if (!ModuleTypeWithWebFeatures.isAvailable(module)) { return ModuleConfigurationEditor.EMPTY; diff --git a/platform/platform-tests/testSrc/com/intellij/ide/plugins/DynamicPluginsTest.kt b/platform/platform-tests/testSrc/com/intellij/ide/plugins/DynamicPluginsTest.kt index f38b859ce0b9..a1a2facf02e8 100644 --- a/platform/platform-tests/testSrc/com/intellij/ide/plugins/DynamicPluginsTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/ide/plugins/DynamicPluginsTest.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. @file:Suppress("UsePropertyAccessSyntax") package com.intellij.ide.plugins @@ -843,7 +843,7 @@ class DynamicPluginsTest { val listenerDisposable = Disposer.newDisposable() val checked = AtomicInteger() - Configurable.PROJECT_CONFIGURABLE.addChangeListener(project, Runnable { + Configurable.PROJECT_CONFIGURABLE.addChangeListener(project, { checked.incrementAndGet() }, listenerDisposable) @@ -1134,7 +1134,7 @@ private class MyRunnable : Runnable { } private class MyModuleConfigurationEditorProvider : ModuleConfigurationEditorProvider { - override fun createEditors(state: ModuleConfigurationState?): Array = arrayOf() + override fun createEditors(state: ModuleConfigurationState): Array = emptyArray() } private inline fun runAndCheckThatNoNewPlugins(block: () -> Unit) { diff --git a/plugins/devkit/devkit-core/src/module/PluginModuleEditorsProvider.java b/plugins/devkit/devkit-core/src/module/PluginModuleEditorsProvider.java index 933ca507c226..582349152a0b 100644 --- a/plugins/devkit/devkit-core/src/module/PluginModuleEditorsProvider.java +++ b/plugins/devkit/devkit-core/src/module/PluginModuleEditorsProvider.java @@ -1,4 +1,4 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.idea.devkit.module; import com.intellij.openapi.module.Module; @@ -7,6 +7,7 @@ import com.intellij.openapi.module.ModuleType; import com.intellij.openapi.roots.ui.configuration.DefaultModuleConfigurationEditorFactory; import com.intellij.openapi.roots.ui.configuration.ModuleConfigurationEditorProvider; import com.intellij.openapi.roots.ui.configuration.ModuleConfigurationState; +import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.devkit.build.PluginModuleBuildConfEditor; import java.util.ArrayList; @@ -15,7 +16,7 @@ import java.util.List; final class PluginModuleEditorsProvider implements ModuleConfigurationEditorProvider { @Override - public ModuleConfigurationEditor[] createEditors(ModuleConfigurationState state) { + public @NotNull ModuleConfigurationEditor @NotNull [] createEditors(@NotNull ModuleConfigurationState state) { final Module module = state.getCurrentRootModel().getModule(); if (ModuleType.get(module) != PluginModuleType.getInstance()) return ModuleConfigurationEditor.EMPTY; diff --git a/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/roots/ui/NonJvmKotlinModuleEditorsProvider.kt b/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/roots/ui/NonJvmKotlinModuleEditorsProvider.kt index ed620cd01601..422e13da79fd 100644 --- a/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/roots/ui/NonJvmKotlinModuleEditorsProvider.kt +++ b/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/roots/ui/NonJvmKotlinModuleEditorsProvider.kt @@ -1,5 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. - +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.idea.roots.ui import com.intellij.openapi.module.ModuleConfigurationEditor @@ -11,7 +10,7 @@ import com.intellij.workspaceModel.ide.legacyBridge.impl.java.JAVA_MODULE_ENTITY import org.jetbrains.kotlin.idea.base.facet.platform.platform import org.jetbrains.kotlin.platform.jvm.isJvm -class NonJvmKotlinModuleEditorsProvider : ModuleConfigurationEditorProviderEx { +private class NonJvmKotlinModuleEditorsProvider : ModuleConfigurationEditorProviderEx { override fun isCompleteEditorSet() = true override fun createEditors(state: ModuleConfigurationState): Array { diff --git a/python/pluginJava/src/com/intellij/python/community/plugin/java/facet/PythonModuleConfigurationEditorProvider.java b/python/pluginJava/src/com/intellij/python/community/plugin/java/facet/PythonModuleConfigurationEditorProvider.java index b6dd8039d962..54e3784ed549 100644 --- a/python/pluginJava/src/com/intellij/python/community/plugin/java/facet/PythonModuleConfigurationEditorProvider.java +++ b/python/pluginJava/src/com/intellij/python/community/plugin/java/facet/PythonModuleConfigurationEditorProvider.java @@ -1,4 +1,4 @@ -// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.python.community.plugin.java.facet; import com.intellij.openapi.module.Module; @@ -8,19 +8,22 @@ import com.intellij.openapi.roots.ui.configuration.DefaultModuleConfigurationEdi import com.intellij.openapi.roots.ui.configuration.ModuleConfigurationEditorProvider; import com.intellij.openapi.roots.ui.configuration.ModuleConfigurationState; import com.jetbrains.python.module.PyContentEntriesEditor; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.model.java.JavaSourceRootType; import java.util.ArrayList; import java.util.List; - final class PythonModuleConfigurationEditorProvider implements ModuleConfigurationEditorProvider { @Override - public ModuleConfigurationEditor[] createEditors(final ModuleConfigurationState state) { - final Module module = state.getCurrentRootModel().getModule(); - if (!(ModuleType.get(module) instanceof PythonModuleType)) return ModuleConfigurationEditor.EMPTY; - final DefaultModuleConfigurationEditorFactory editorFactory = DefaultModuleConfigurationEditorFactory.getInstance(); - final List editors = new ArrayList<>(); + public @NotNull ModuleConfigurationEditor @NotNull [] createEditors(@NotNull ModuleConfigurationState state) { + Module module = state.getCurrentRootModel().getModule(); + if (!(ModuleType.get(module) instanceof PythonModuleType)) { + return ModuleConfigurationEditor.EMPTY; + } + + DefaultModuleConfigurationEditorFactory editorFactory = DefaultModuleConfigurationEditorFactory.getInstance(); + List editors = new ArrayList<>(); editors.add(new PyContentEntriesEditor(module, state, false, JavaSourceRootType.SOURCE)); editors.add(editorFactory.createClasspathEditor(state)); return editors.toArray(ModuleConfigurationEditor.EMPTY);