Allow OrderEnumeratorHandler to have state

This commit is contained in:
Kirill.Safonov
2011-09-06 19:40:35 +04:00
parent 3069ff8713
commit 385eebd062
5 changed files with 35 additions and 17 deletions
@@ -19,6 +19,7 @@ import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
@@ -26,12 +27,18 @@ import java.util.Collection;
* @author nik
*/
public abstract class OrderEnumerationHandler {
public static final ExtensionPointName<OrderEnumerationHandler> EP_NAME =
ExtensionPointName.create("com.intellij.orderEnumerationHandler");
public static final ExtensionPointName<Factory> EP_NAME =
ExtensionPointName.create("com.intellij.orderEnumerationHandlerFactory");
public abstract boolean isApplicable(@NotNull Project project);
public static abstract class Factory {
public abstract boolean isApplicable(@NotNull Project project);
public abstract boolean isApplicable(@NotNull Module module);
public abstract OrderEnumerationHandler createHandler(@Nullable Module module);
}
public abstract boolean isApplicable(@NotNull Module module);
public static enum AddDependencyType {ADD, DO_NOT_ADD, DEFAULT}
@@ -56,12 +56,12 @@ abstract class OrderEnumeratorBase extends OrderEnumerator implements OrderEnume
public OrderEnumeratorBase(@Nullable Module module, @NotNull Project project, @Nullable OrderRootsCache cache) {
myCache = cache;
List<OrderEnumerationHandler> customHandlers = null;
for (OrderEnumerationHandler handler : OrderEnumerationHandler.EP_NAME.getExtensions()) {
if (handler.isApplicable(project) && (module == null || handler.isApplicable(module))) {
for (OrderEnumerationHandler.Factory handlerFactory : OrderEnumerationHandler.EP_NAME.getExtensions()) {
if (handlerFactory.isApplicable(project) && (module == null || handlerFactory.isApplicable(module))) {
if (customHandlers == null) {
customHandlers = new SmartList<OrderEnumerationHandler>();
}
customHandlers.add(handler);
customHandlers.add(handlerFactory.createHandler(module));
}
}
this.myCustomHandlers = customHandlers == null ? Collections.<OrderEnumerationHandler>emptyList() : customHandlers;
@@ -151,7 +151,7 @@
<extensionPoint name="roots.watchedRootsProvider" interface="com.intellij.openapi.roots.WatchedRootsProvider" area="IDEA_PROJECT"/>
<extensionPoint name="moduleExtension" interface="com.intellij.openapi.roots.ModuleExtension" area="IDEA_MODULE"/>
<extensionPoint name="orderRootType" interface="com.intellij.openapi.roots.OrderRootType"/>
<extensionPoint name="orderEnumerationHandler" interface="com.intellij.openapi.roots.OrderEnumerationHandler"/>
<extensionPoint name="orderEnumerationHandlerFactory" interface="com.intellij.openapi.roots.OrderEnumerationHandler$Factory"/>
<extensionPoint name="directoryIndexExcludePolicy" interface="com.intellij.openapi.roots.impl.DirectoryIndexExcludePolicy"
area="IDEA_PROJECT"/>
<extensionPoint name="librarySettingsProvider" interface="com.intellij.openapi.roots.ui.configuration.LibrarySettingsProvider"/>
@@ -21,6 +21,7 @@ import com.intellij.openapi.roots.*;
import com.intellij.openapi.vfs.VfsUtil;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.maven.importing.MavenRootModelAdapter;
import org.jetbrains.idea.maven.model.MavenArtifact;
import org.jetbrains.idea.maven.model.MavenConstants;
@@ -32,16 +33,26 @@ import java.util.Collection;
import java.util.List;
public class MavenOrderEnumeratorHandler extends OrderEnumerationHandler {
@Override
public boolean isApplicable(@NotNull Project project) {
return MavenProjectsManager.getInstance(project).isMavenizedProject();
public static class FactoryImpl extends OrderEnumerationHandler.Factory {
@Override
public boolean isApplicable(@NotNull Project project) {
return MavenProjectsManager.getInstance(project).isMavenizedProject();
}
@Override
public boolean isApplicable(@NotNull Module module) {
final MavenProjectsManager manager = MavenProjectsManager.getInstance(module.getProject());
return manager.isMavenizedModule(module);
}
@Override
public OrderEnumerationHandler createHandler(@Nullable Module module) {
return INSTANCE;
}
}
@Override
public boolean isApplicable(@NotNull Module module) {
final MavenProjectsManager manager = MavenProjectsManager.getInstance(module.getProject());
return manager.isMavenizedModule(module);
}
private static final MavenOrderEnumeratorHandler INSTANCE = new MavenOrderEnumeratorHandler();
@Override
@NotNull
@@ -32,7 +32,7 @@
<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
<configurationType implementation="org.jetbrains.idea.maven.execution.MavenRunConfigurationType"/>
<configurationProducer implementation="org.jetbrains.idea.maven.execution.MavenConfigurationProducer"/>
<orderEnumerationHandler implementation="org.jetbrains.idea.maven.execution.MavenOrderEnumeratorHandler"/>
<orderEnumerationHandlerFactory implementation="org.jetbrains.idea.maven.execution.MavenOrderEnumeratorHandler$FactoryImpl"/>
<compiler implementation="org.jetbrains.idea.maven.compiler.MavenResourceCompiler" order="last"/>