From 00827c2819dddd77a11d3f85b6f6d5ac116f006c Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 19 Mar 2014 13:19:55 +0400 Subject: [PATCH] fixed loading JPS extensions in minor IDEs --- .../org.jetbrains.jps.plugin.JpsPluginManager | 16 ------- .../org.jetbrains.jps.plugin.JpsPluginManager | 1 + .../jps/impl/JpsIdePluginManagerImpl.java | 43 +++++++++++-------- 3 files changed, 26 insertions(+), 34 deletions(-) delete mode 100644 java/compiler/impl/src/META-INF/services/org.jetbrains.jps.plugin.JpsPluginManager create mode 100644 platform/platform-impl/src/META-INF/services/org.jetbrains.jps.plugin.JpsPluginManager rename {java/compiler/impl => platform/platform-impl}/src/com/intellij/jps/impl/JpsIdePluginManagerImpl.java (73%) diff --git a/java/compiler/impl/src/META-INF/services/org.jetbrains.jps.plugin.JpsPluginManager b/java/compiler/impl/src/META-INF/services/org.jetbrains.jps.plugin.JpsPluginManager deleted file mode 100644 index 06c49734b05b..000000000000 --- a/java/compiler/impl/src/META-INF/services/org.jetbrains.jps.plugin.JpsPluginManager +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright 2000-2014 JetBrains s.r.o. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -com.intellij.jps.impl.JpsIdePluginManagerImpl diff --git a/platform/platform-impl/src/META-INF/services/org.jetbrains.jps.plugin.JpsPluginManager b/platform/platform-impl/src/META-INF/services/org.jetbrains.jps.plugin.JpsPluginManager new file mode 100644 index 000000000000..fc337eeb1b0a --- /dev/null +++ b/platform/platform-impl/src/META-INF/services/org.jetbrains.jps.plugin.JpsPluginManager @@ -0,0 +1 @@ +com.intellij.jps.impl.JpsIdePluginManagerImpl diff --git a/java/compiler/impl/src/com/intellij/jps/impl/JpsIdePluginManagerImpl.java b/platform/platform-impl/src/com/intellij/jps/impl/JpsIdePluginManagerImpl.java similarity index 73% rename from java/compiler/impl/src/com/intellij/jps/impl/JpsIdePluginManagerImpl.java rename to platform/platform-impl/src/com/intellij/jps/impl/JpsIdePluginManagerImpl.java index a46a25f5e68a..c079d388159d 100644 --- a/java/compiler/impl/src/com/intellij/jps/impl/JpsIdePluginManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/jps/impl/JpsIdePluginManagerImpl.java @@ -15,12 +15,9 @@ */ package com.intellij.jps.impl; -import com.intellij.compiler.server.CompileServerPlugin; -import com.intellij.openapi.extensions.ExtensionPoint; -import com.intellij.openapi.extensions.ExtensionPointListener; -import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.extensions.PluginDescriptor; +import com.intellij.openapi.extensions.*; import com.intellij.openapi.vfs.CharsetToolkit; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.plugin.JpsPluginManager; @@ -39,19 +36,23 @@ public class JpsIdePluginManagerImpl extends JpsPluginManager { private List myExternalBuildPlugins = new CopyOnWriteArrayList(); public JpsIdePluginManagerImpl() { - ExtensionPoint extensionPoint = Extensions.getRootArea().getExtensionPoint(CompileServerPlugin.EP_NAME); - extensionPoint.addExtensionPointListener(new ExtensionPointListener() { - @Override - public void extensionAdded(@NotNull CompileServerPlugin extension, @Nullable PluginDescriptor pluginDescriptor) { - if (pluginDescriptor != null) { - myExternalBuildPlugins.add(pluginDescriptor); + ExtensionsArea rootArea = Extensions.getRootArea(); + //todo[nik] introduce more generic platform extension for JPS plugins instead + if (rootArea.hasExtensionPoint("com.intellij.compileServer.plugin")) { + ExtensionPoint extensionPoint = rootArea.getExtensionPoint("com.intellij.compileServer.plugin"); + extensionPoint.addExtensionPointListener(new ExtensionPointListener() { + @Override + public void extensionAdded(@NotNull Object extension, @Nullable PluginDescriptor pluginDescriptor) { + if (pluginDescriptor != null) { + myExternalBuildPlugins.add(pluginDescriptor); + } } - } - @Override - public void extensionRemoved(@NotNull CompileServerPlugin extension, @Nullable PluginDescriptor pluginDescriptor) { - } - }); + @Override + public void extensionRemoved(@NotNull Object extension, @Nullable PluginDescriptor pluginDescriptor) { + } + }); + } } @NotNull @@ -59,9 +60,15 @@ public class JpsIdePluginManagerImpl extends JpsPluginManager { public Collection loadExtensions(@NotNull Class extensionClass) { String resourceName = "META-INF/services/" + extensionClass.getName(); Set> classes = new LinkedHashSet>(); + Set loaders = new LinkedHashSet(); for (PluginDescriptor plugin : myExternalBuildPlugins) { - ClassLoader loader = plugin.getPluginClassLoader(); - if (loader == null) continue; + ContainerUtil.addIfNotNull(loaders, plugin.getPluginClassLoader()); + } + if (loaders.isEmpty()) { + loaders.add(getClass().getClassLoader()); + } + + for (ClassLoader loader : loaders) { try { Enumeration resources = loader.getResources(resourceName); while (resources.hasMoreElements()) {