Gradle: detect Scala plugin presence dynamically (to avoid cyclical plugin dependency)

This commit is contained in:
Pavel Fatin
2014-03-10 13:49:38 +01:00
parent 0333bd1501
commit 52a92f2125
4 changed files with 19 additions and 7 deletions
@@ -1,5 +0,0 @@
<idea-plugin>
<extensions defaultExtensionNs="org.jetbrains.plugins.gradle">
<projectResolve implementation="org.jetbrains.plugins.gradle.integrations.scala.ScalaGradleProjectResolverExtension"/>
</extensions>
</idea-plugin>
+1 -1
View File
@@ -41,7 +41,6 @@
<depends>org.intellij.groovy</depends>
<depends optional="true" config-file="gradle-javaee-plugin.xml">com.intellij.javaee</depends>
<depends optional="true" config-file="gradle-maven-integration.xml">org.jetbrains.idea.maven</depends>
<depends optional="true" config-file="gradle-scala-integration.xml">org.intellij.scala</depends>
<extensionPoints>
<extensionPoint name="projectResolve" interface="org.jetbrains.plugins.gradle.service.project.GradleProjectResolverExtension"/>
@@ -63,6 +62,7 @@
<resolve.contributor implementation="org.jetbrains.plugins.gradle.service.resolve.GradleSourceSetsContributor"/>
<resolve.contributor implementation="org.jetbrains.plugins.gradle.service.resolve.GradleImplicitContributor"/>
<projectResolve implementation="org.jetbrains.plugins.gradle.service.project.BaseGradleProjectResolverExtension"/>
<projectResolve implementation="org.jetbrains.plugins.gradle.integrations.scala.ScalaGradleProjectResolverExtension"/>
</extensions>
<extensions defaultExtensionNs="com.intellij">
@@ -31,6 +31,7 @@ import org.jetbrains.plugins.gradle.model.data.ScalaCompileOptionsData;
import org.jetbrains.plugins.gradle.model.data.ScalaModelData;
import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension;
import org.jetbrains.plugins.gradle.util.GradleConstants;
import org.jetbrains.plugins.gradle.util.GradleUtil;
import java.util.Collections;
import java.util.Set;
@@ -43,8 +44,12 @@ import java.util.Set;
public class ScalaGradleProjectResolverExtension extends AbstractProjectResolverExtension {
private static final Logger LOG = Logger.getInstance(ScalaGradleProjectResolverExtension.class);
private static final boolean scalaPluginPresent = GradleUtil.isPluginPresent("org.intellij.scala");
@Override
public void populateModuleExtraModels(@NotNull IdeaModule gradleModule, @NotNull DataNode<ModuleData> ideModule) {
if (!scalaPluginPresent) return;
ScalaModel scalaModel = resolverCtx.getExtraProject(gradleModule, ScalaModel.class);
if (scalaModel != null) {
ScalaModelData scalaModelData = create(scalaModel);
@@ -57,7 +62,7 @@ public class ScalaGradleProjectResolverExtension extends AbstractProjectResolver
@NotNull
@Override
public Set<Class> getExtraProjectModelClasses() {
return Collections.<Class>singleton(ScalaModel.class);
return scalaPluginPresent ? Collections.<Class>singleton(ScalaModel.class) : Collections.<Class>emptySet();
}
@@ -1,7 +1,11 @@
package org.jetbrains.plugins.gradle.util;
import com.intellij.ide.actions.OpenProjectFileChooserDescriptor;
import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.ide.plugins.PluginManager;
import com.intellij.ide.plugins.PluginManagerCore;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.extensions.PluginId;
import com.intellij.openapi.externalSystem.model.ExternalSystemException;
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.externalSystem.util.ExternalSystemConstants;
@@ -243,4 +247,12 @@ public class GradleUtil {
public static String createJvmArg(@NotNull String name, @NotNull String value) {
return String.format(JVM_ARG_FORMAT, name, value);
}
public static boolean isPluginPresent(@NotNull String id) {
PluginId pluginId = PluginId.getRegisteredIds().get(id);
if (pluginId == null) return false;
IdeaPluginDescriptor pluginDescriptor = PluginManager.getPlugin(pluginId);
if (pluginDescriptor == null) return false;
return !PluginManagerCore.shouldSkipPlugin(pluginDescriptor);
}
}