From 84d2a1c81d0ddaa488facad1f86763da00120c09 Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Wed, 12 Oct 2016 13:58:56 +0300 Subject: [PATCH 1/4] Gradle: Replace custom classloader in ijinit with a supported way - this way is supported by Gradle --- .../gradle/tooling/internal/init/init.gradle | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/init/init.gradle b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/init/init.gradle index 010c4597e45b..84dcb6ea7548 100644 --- a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/init/init.gradle +++ b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/init/init.gradle @@ -14,6 +14,7 @@ * limitations under the License. */ import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry +import org.jetbrains.plugins.gradle.tooling.internal.ExtraModelBuilder @SuppressWarnings("GrPackage") class JetGradlePlugin implements Plugin { @@ -25,20 +26,18 @@ class JetGradlePlugin implements Plugin { } public void apply(Project project) { - registry.register(project.jetExtraModelBuilderClass.newInstance()) + registry.register(new ExtraModelBuilder()) } } -try { - System.setProperty("idea.active", "true"); - String[] paths = ${EXTENSIONS_JARS_PATH} - URL[] urls = paths.collect{ new File(it).toURI().toURL() } - URLClassLoader classLoader = new URLClassLoader(urls, getClass().classLoader) - Class modelClass = classLoader.loadClass('org.jetbrains.plugins.gradle.tooling.internal.ExtraModelBuilder') - allprojects { - ext.jetExtraModelBuilderClass = modelClass - apply plugin: JetGradlePlugin +System.setProperty("idea.active", "true") + +initscript { + dependencies { + classpath files(${EXTENSIONS_JARS_PATH}) } } -catch (all) { + +allprojects { + apply plugin: JetGradlePlugin } \ No newline at end of file From 7421d44a2f5f22797cadd7894c0c3d47ce5a11e8 Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Wed, 12 Oct 2016 13:43:27 +0300 Subject: [PATCH 2/4] Gradle: Wire a single instance to all plugin instances --- .../plugins/gradle/tooling/internal/init/init.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/init/init.gradle b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/init/init.gradle index 84dcb6ea7548..1687b232a624 100644 --- a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/init/init.gradle +++ b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/init/init.gradle @@ -26,7 +26,7 @@ class JetGradlePlugin implements Plugin { } public void apply(Project project) { - registry.register(new ExtraModelBuilder()) + registry.register(project.extraModelBuilder) } } @@ -38,6 +38,8 @@ initscript { } } +def extraModelBuilderInstance = new ExtraModelBuilder() allprojects { + ext.extraModelBuilder = extraModelBuilderInstance apply plugin: JetGradlePlugin } \ No newline at end of file From f89a05f8e346a706513c7b0d1058c06faf91d8aa Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Wed, 12 Oct 2016 13:39:53 +0300 Subject: [PATCH 3/4] Gradle: Change static field to instance field --- .../plugins/gradle/tooling/internal/ExtraModelBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/ExtraModelBuilder.java b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/ExtraModelBuilder.java index 1fd4792851bc..58bdaeaaf025 100644 --- a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/ExtraModelBuilder.java +++ b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/ExtraModelBuilder.java @@ -34,7 +34,7 @@ import java.util.ServiceLoader; @SuppressWarnings("UnusedDeclaration") public class ExtraModelBuilder implements ToolingModelBuilder { - private static ServiceLoader buildersLoader = + private ServiceLoader buildersLoader = ServiceLoader.load(ModelBuilderService.class, ExtraModelBuilder.class.getClassLoader()); @NotNull From 0579d273e8a0ab5228cee087002786d99e1cb6a2 Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Wed, 12 Oct 2016 13:51:09 +0300 Subject: [PATCH 4/4] Gradle: ServiceLoader instance isn't required --- .../gradle/tooling/internal/ExtraModelBuilder.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/ExtraModelBuilder.java b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/ExtraModelBuilder.java index 58bdaeaaf025..0eb30c3f6108 100644 --- a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/ExtraModelBuilder.java +++ b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/internal/ExtraModelBuilder.java @@ -15,6 +15,7 @@ */ package org.jetbrains.plugins.gradle.tooling.internal; +import com.google.common.collect.Lists; import org.gradle.api.Project; import org.gradle.tooling.provider.model.ToolingModelBuilder; import org.gradle.util.GradleVersion; @@ -25,6 +26,7 @@ import org.jetbrains.plugins.gradle.tooling.ModelBuilderService; import org.jetbrains.plugins.gradle.tooling.annotation.TargetVersions; import org.jetbrains.plugins.gradle.tooling.util.VersionMatcher; +import java.util.List; import java.util.ServiceLoader; /** @@ -33,25 +35,24 @@ import java.util.ServiceLoader; */ @SuppressWarnings("UnusedDeclaration") public class ExtraModelBuilder implements ToolingModelBuilder { - - private ServiceLoader buildersLoader = - ServiceLoader.load(ModelBuilderService.class, ExtraModelBuilder.class.getClassLoader()); + private final List modelBuilderServices; @NotNull private final GradleVersion myCurrentGradleVersion; public ExtraModelBuilder() { - this.myCurrentGradleVersion = GradleVersion.current(); + this(GradleVersion.current()); } @TestOnly public ExtraModelBuilder(@NotNull GradleVersion gradleVersion) { this.myCurrentGradleVersion = gradleVersion; + this.modelBuilderServices = Lists.newArrayList(ServiceLoader.load(ModelBuilderService.class, ExtraModelBuilder.class.getClassLoader())); } @Override public boolean canBuild(String modelName) { - for (ModelBuilderService service : buildersLoader) { + for (ModelBuilderService service : modelBuilderServices) { if (service.canBuild(modelName) && isVersionMatch(service)) return true; } return false; @@ -59,7 +60,7 @@ public class ExtraModelBuilder implements ToolingModelBuilder { @Override public Object buildAll(String modelName, Project project) { - for (ModelBuilderService service : buildersLoader) { + for (ModelBuilderService service : modelBuilderServices) { if (service.canBuild(modelName) && isVersionMatch(service)) { final long startTime = System.currentTimeMillis(); try {