diff --git a/platform/external-system-api/src/com/intellij/openapi/externalSystem/settings/ExternalProjectSettings.java b/platform/external-system-api/src/com/intellij/openapi/externalSystem/settings/ExternalProjectSettings.java index d8926c31ed90..2156b25ea2a3 100644 --- a/platform/external-system-api/src/com/intellij/openapi/externalSystem/settings/ExternalProjectSettings.java +++ b/platform/external-system-api/src/com/intellij/openapi/externalSystem/settings/ExternalProjectSettings.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.externalSystem.settings; +import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.util.Comparing; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -45,7 +46,7 @@ public abstract class ExternalProjectSettings implements Comparable compute() { List result = ContainerUtilRt.newArrayList(); - Collections.addAll(result, GradleProjectResolverExtension.EP_NAME.getExtensions()); + + // It's possible usecase when 'java' subsystem dependent plugins bundled with the non-java IDE using fat plugin distribution. + // This approach can lead to unwanted/incompatible extensions to be loaded. + // The workaround extensionsFilter should be removed when the IntelliJ java subsystem will become a regular plugin + // or those plugins will be fixed using the optional plugin dependency on 'org.jetbrains.plugins.gradle.java' + boolean isJavaIde = ExternalSystemApiUtil.isJavaCompatibleIde(); + if(!isJavaIde) { + ExtensionPoint point = + Extensions.getRootArea().getExtensionPoint(GradleProjectResolverExtension.EP_NAME); + if(point instanceof ExtensionPointImpl) { + ((ExtensionPointImpl)point).removeUnloadableExtensions(); + } + } + Set javaIdeDependentExtensions = ContainerUtil.set( + "org.jetbrains.kotlin.idea.configuration.KotlinGradleProjectResolverExtension", + "org.jetbrains.kotlin.kapt.idea.KaptProjectResolverExtension", + "org.jetbrains.kotlin.allopen.ide.AllOpenProjectResolverExtension", + "org.jetbrains.kotlin.noarg.ide.NoArgProjectResolverExtension", + "org.jetbrains.kotlin.samWithReceiver.ide.SamWithReceiverProjectResolverExtension" + ); + Predicate extensionsFilter = ext -> + isJavaIde || !javaIdeDependentExtensions.contains(ext.getClass().getName()); + + ExtensionPoint extensionPoint = + Extensions.getRootArea().getExtensionPoint(GradleProjectResolverExtension.EP_NAME); + extensionPoint.addExtensionPointListener(new ExtensionPointListener.Adapter<>()); + + Arrays.stream(GradleProjectResolverExtension.EP_NAME.getExtensions()) + .filter(extensionsFilter) + .forEach(result::add); + ExternalSystemApiUtil.orderAwareSort(result); return result; } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java index e7e9b0f4209e..97285d81e3f3 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java @@ -218,7 +218,12 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver buildActionExecutor = resolverCtx.getConnection().action(projectImportAction); diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleProjectSettings.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleProjectSettings.java index eeb97fe8a81d..d63336fee280 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleProjectSettings.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleProjectSettings.java @@ -3,6 +3,7 @@ package org.jetbrains.plugins.gradle.settings; import com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkUtil; import com.intellij.openapi.externalSystem.settings.ExternalProjectSettings; +import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.util.SmartList; import com.intellij.util.ThreeState; import com.intellij.util.containers.ContainerUtil; @@ -25,7 +26,7 @@ public class GradleProjectSettings extends ExternalProjectSettings { @Nullable private String myGradleJvm = ExternalSystemJdkUtil.USE_PROJECT_JDK; @Nullable private DistributionType distributionType; private boolean disableWrapperSourceDistributionNotification; - private boolean resolveModulePerSourceSet = true; + private boolean resolveModulePerSourceSet = ExternalSystemApiUtil.isJavaCompatibleIde(); @Nullable private CompositeBuild myCompositeBuild; private ThreeState storeProjectFilesExternally = ThreeState.NO;