mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge branch 'lh-fix-gradle-mem-leak' of https://github.com/lhotari/intellij-community
This commit is contained in:
+7
-6
@@ -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 static ServiceLoader<ModelBuilderService> buildersLoader =
|
||||
ServiceLoader.load(ModelBuilderService.class, ExtraModelBuilder.class.getClassLoader());
|
||||
private final List<ModelBuilderService> 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 {
|
||||
|
||||
+12
-11
@@ -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<Project> {
|
||||
@@ -25,20 +26,20 @@ class JetGradlePlugin implements Plugin<Project> {
|
||||
}
|
||||
|
||||
public void apply(Project project) {
|
||||
registry.register(project.jetExtraModelBuilderClass.newInstance())
|
||||
registry.register(project.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) {
|
||||
|
||||
def extraModelBuilderInstance = new ExtraModelBuilder()
|
||||
allprojects {
|
||||
ext.extraModelBuilder = extraModelBuilderInstance
|
||||
apply plugin: JetGradlePlugin
|
||||
}
|
||||
Reference in New Issue
Block a user