From 6eca599fe6ffe8b575ecab267f84c3b69e22fcd2 Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 17 Aug 2012 17:15:02 +0400 Subject: [PATCH] jps: use correct classloader to load extensions and services --- .../jetbrains/jps/incremental/BuilderRegistry.java | 6 ++---- .../builders/LayoutElementBuildersRegistry.java | 4 ++-- .../jetbrains/jps/service/JpsServiceManager.java | 2 +- .../jps/service/impl/JpsServiceManagerImpl.java | 4 ++-- .../jetbrains/jps/idea/IdeaProjectLoader.groovy | 14 ++++++++++++++ 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderRegistry.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderRegistry.java index 829950b6ce85..5003ad3f27c0 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderRegistry.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderRegistry.java @@ -1,7 +1,7 @@ package org.jetbrains.jps.incremental; import com.intellij.util.containers.ContainerUtil; -import org.jetbrains.jps.idea.OwnServiceLoader; +import org.jetbrains.jps.service.JpsServiceManager; import java.util.*; @@ -25,9 +25,7 @@ public class BuilderRegistry { myModuleLevelBuilders.put(category, new ArrayList()); } - final OwnServiceLoader loader = OwnServiceLoader.load(BuilderService.class); - - for (BuilderService service : loader) { + for (BuilderService service : JpsServiceManager.getInstance().getExtensions(BuilderService.class)) { myProjectLevelBuilders.addAll(service.createProjectLevelBuilders()); final List moduleLevelBuilders = service.createModuleLevelBuilders(); for (ModuleLevelBuilder builder : moduleLevelBuilders) { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/builders/LayoutElementBuildersRegistry.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/builders/LayoutElementBuildersRegistry.java index c06efc0be481..bc3b2d80a5cf 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/builders/LayoutElementBuildersRegistry.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/builders/LayoutElementBuildersRegistry.java @@ -5,13 +5,13 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.containers.ClassMap; import org.jetbrains.jps.JpsPathUtil; -import org.jetbrains.jps.idea.OwnServiceLoader; import org.jetbrains.jps.incremental.artifacts.instructions.ArtifactCompilerInstructionCreator; import org.jetbrains.jps.incremental.artifacts.instructions.ArtifactInstructionsBuilderContext; import org.jetbrains.jps.model.artifact.JpsArtifact; import org.jetbrains.jps.model.artifact.elements.*; import org.jetbrains.jps.model.java.JpsProductionModuleOutputPackagingElement; import org.jetbrains.jps.model.java.JpsTestModuleOutputPackagingElement; +import org.jetbrains.jps.service.JpsServiceManager; import java.io.File; import java.util.List; @@ -42,7 +42,7 @@ public class LayoutElementBuildersRegistry { for (LayoutElementBuilderService builder : standardBuilders) { myBuilders.put(builder.getElementClass(), builder); } - for (LayoutElementBuilderService builder : OwnServiceLoader.load(LayoutElementBuilderService.class)) { + for (LayoutElementBuilderService builder : JpsServiceManager.getInstance().getExtensions(LayoutElementBuilderService.class)) { myBuilders.put(builder.getElementClass(), builder); } } diff --git a/jps/model-api/src/org/jetbrains/jps/service/JpsServiceManager.java b/jps/model-api/src/org/jetbrains/jps/service/JpsServiceManager.java index 2f86a7898341..30a33f197f16 100644 --- a/jps/model-api/src/org/jetbrains/jps/service/JpsServiceManager.java +++ b/jps/model-api/src/org/jetbrains/jps/service/JpsServiceManager.java @@ -18,7 +18,7 @@ public abstract class JpsServiceManager { private static final JpsServiceManager INSTANCE; static { - INSTANCE = ServiceLoader.load(JpsServiceManager.class).iterator().next(); + INSTANCE = ServiceLoader.load(JpsServiceManager.class, JpsServiceManager.class.getClassLoader()).iterator().next(); } } } diff --git a/jps/model-impl/src/org/jetbrains/jps/service/impl/JpsServiceManagerImpl.java b/jps/model-impl/src/org/jetbrains/jps/service/impl/JpsServiceManagerImpl.java index 0b701a4ead7a..b455dc0d68a8 100644 --- a/jps/model-impl/src/org/jetbrains/jps/service/impl/JpsServiceManagerImpl.java +++ b/jps/model-impl/src/org/jetbrains/jps/service/impl/JpsServiceManagerImpl.java @@ -17,7 +17,7 @@ public class JpsServiceManagerImpl extends JpsServiceManager { //noinspection unchecked T service = (T)myServices.get(serviceClass); if (service == null) { - final Iterator iterator = ServiceLoader.load(serviceClass).iterator(); + final Iterator iterator = ServiceLoader.load(serviceClass, serviceClass.getClassLoader()).iterator(); if (!iterator.hasNext()) { throw new ServiceConfigurationError("Implementation for " + serviceClass + " not found"); } @@ -37,7 +37,7 @@ public class JpsServiceManagerImpl extends JpsServiceManager { public Iterable getExtensions(Class extensionClass) { List cached = myExtensions.get(extensionClass); if (cached == null) { - final ServiceLoader loader = ServiceLoader.load(extensionClass); + final ServiceLoader loader = ServiceLoader.load(extensionClass, extensionClass.getClassLoader()); List extensions = new ArrayList(); for (T t : loader) { extensions.add(t); diff --git a/jps/model/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy b/jps/model/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy index 3aa7f6e3cee6..5712014cf716 100644 --- a/jps/model/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy +++ b/jps/model/src/org/jetbrains/jps/idea/IdeaProjectLoader.groovy @@ -12,6 +12,20 @@ public class IdeaProjectLoader { private ProjectLoadingErrorReporter errorReporter private final XmlParser xmlParser = new XmlParser(false, false) + public static String guessHome(Script script) { + File home = new File(script["gant.file"].substring("file:".length())) + + while (home != null) { + if (home.isDirectory()) { + if (new File(home, ".idea").exists()) return home.getCanonicalPath() + } + + home = home.getParentFile() + } + + return null + } + public static ProjectMacroExpander loadFromPath(Project project, String path, Map pathVariables) { return loadFromPath(project, path, pathVariables, "") }