mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Grade: workaround for java IDE dependent gradle extensions
(cherry picked from commit c6b1b3b)
This commit is contained in:
+2
-1
@@ -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<ExternalProj
|
||||
|
||||
private boolean myUseAutoImport;
|
||||
private boolean myCreateEmptyContentRootDirectories;
|
||||
private boolean myUseQualifiedModuleNames;
|
||||
private boolean myUseQualifiedModuleNames = !ExternalSystemApiUtil.isJavaCompatibleIde();
|
||||
|
||||
public String getExternalProjectPath() {
|
||||
return myExternalProjectPath;
|
||||
|
||||
+14
@@ -56,6 +56,7 @@ import com.intellij.util.containers.*;
|
||||
import com.intellij.util.containers.Stack;
|
||||
import com.intellij.util.lang.UrlClassLoader;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -71,6 +72,8 @@ import java.util.Queue;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static com.intellij.util.PlatformUtils.*;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 4/1/13 1:31 PM
|
||||
@@ -867,4 +870,15 @@ public class ExternalSystemApiUtil {
|
||||
//noinspection unchecked
|
||||
getSettings(project, systemId).subscribe(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* DO NOT USE THIS METHOD.
|
||||
* The method should be removed when the 'java' subsystem features will be extracted from External System API [IDEA-187832]
|
||||
*
|
||||
* @return check if the current IDE is compatible with the 'java' IntelliJ subsystem
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
public static boolean isJavaCompatibleIde() {
|
||||
return isIdeaUltimate() || isIdeaCommunity() || "AndroidStudio".equals(getPlatformPrefix());
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -450,7 +450,7 @@ public class ExternalSystemRunConfiguration extends LocatableConfigurationBase i
|
||||
@Nullable
|
||||
private String getJvmAgentSetup() throws ExecutionException {
|
||||
// todo [Vlad, IDEA-187832]: extract to `external-system-java` module
|
||||
if(!PlatformUtils.isIntelliJ()) return null;
|
||||
if(!ExternalSystemApiUtil.isJavaCompatibleIde()) return null;
|
||||
|
||||
final JavaParameters extensionsJP = new JavaParameters();
|
||||
final RunConfigurationExtension[] extensions = Extensions.getExtensions(RunConfigurationExtension.EP_NAME);
|
||||
|
||||
@@ -22,6 +22,10 @@ import com.intellij.execution.configurations.SearchScopeProvider;
|
||||
import com.intellij.execution.configurations.SimpleJavaParameters;
|
||||
import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.ExtensionPoint;
|
||||
import com.intellij.openapi.extensions.ExtensionPointListener;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.extensions.impl.ExtensionPointImpl;
|
||||
import com.intellij.openapi.externalSystem.ExternalSystemAutoImportAware;
|
||||
import com.intellij.openapi.externalSystem.ExternalSystemConfigurableAware;
|
||||
import com.intellij.openapi.externalSystem.ExternalSystemManager;
|
||||
@@ -60,6 +64,7 @@ import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.PathUtil;
|
||||
import com.intellij.util.PathsList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.ContainerUtilRt;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import icons.GradleIcons;
|
||||
@@ -82,6 +87,7 @@ import javax.swing.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import static com.intellij.openapi.util.io.FileUtil.pathsEqual;
|
||||
|
||||
@@ -111,7 +117,37 @@ public class GradleManager
|
||||
@Override
|
||||
protected List<GradleProjectResolverExtension> compute() {
|
||||
List<GradleProjectResolverExtension> 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<GradleProjectResolverExtension> point =
|
||||
Extensions.getRootArea().getExtensionPoint(GradleProjectResolverExtension.EP_NAME);
|
||||
if(point instanceof ExtensionPointImpl) {
|
||||
((ExtensionPointImpl<GradleProjectResolverExtension>)point).removeUnloadableExtensions();
|
||||
}
|
||||
}
|
||||
Set<String> 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<GradleProjectResolverExtension> extensionsFilter = ext ->
|
||||
isJavaIde || !javaIdeDependentExtensions.contains(ext.getClass().getName());
|
||||
|
||||
ExtensionPoint<GradleProjectResolverExtension> 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;
|
||||
}
|
||||
|
||||
+12
-2
@@ -218,7 +218,12 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
|
||||
|
||||
if(!resolverCtx.isPreviewMode()){
|
||||
// register classes of extra gradle project models required for extensions (e.g. com.android.builder.model.AndroidProject)
|
||||
projectImportAction.addExtraProjectModelClasses(resolverExtension.getExtraProjectModelClasses());
|
||||
try {
|
||||
projectImportAction.addExtraProjectModelClasses(resolverExtension.getExtraProjectModelClasses());
|
||||
}
|
||||
catch (Throwable t) {
|
||||
LOG.warn(t);
|
||||
}
|
||||
}
|
||||
|
||||
if (importCustomizer == null || importCustomizer.useExtraJvmArgs()) {
|
||||
@@ -232,7 +237,12 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
|
||||
// collect extra command-line arguments
|
||||
executionSettings.withArguments(resolverExtension.getExtraCommandLineArgs());
|
||||
// collect tooling extensions classes
|
||||
toolingExtensionClasses.addAll(resolverExtension.getToolingExtensionsClasses());
|
||||
try {
|
||||
toolingExtensionClasses.addAll(resolverExtension.getToolingExtensionsClasses());
|
||||
}
|
||||
catch (Throwable t) {
|
||||
LOG.warn(t);
|
||||
}
|
||||
}
|
||||
|
||||
BuildActionExecuter<ProjectImportAction.AllModels> buildActionExecutor = resolverCtx.getConnection().action(projectImportAction);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user