hide flex modules from 'available elements' tree in artifact editor

This commit is contained in:
nik
2013-09-18 09:53:11 +04:00
parent c6e955efa8
commit 58c7e6e46d
5 changed files with 52 additions and 12 deletions
@@ -0,0 +1,28 @@
/*
* Copyright 2000-2013 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.
*/
package com.intellij.packaging.ui;
import com.intellij.openapi.extensions.ExtensionPointName;
import org.jetbrains.annotations.NotNull;
/**
* @author nik
*/
public abstract class PackagingSourceItemFilter {
public static final ExtensionPointName<PackagingSourceItemFilter> EP_NAME = ExtensionPointName.create("com.intellij.packaging.sourceItemFilter");
public abstract boolean isAvailable(@NotNull PackagingSourceItem item, @NotNull ArtifactEditorContext context);
}
@@ -104,6 +104,7 @@ public class ModuleSourceItemGroup extends PackagingSourceItem {
}
}
@NotNull
public Module getModule() {
return myModule;
}
@@ -46,10 +46,10 @@ public class ModulesAndLibrariesSourceItemsProvider extends PackagingSourceItems
public Collection<? extends PackagingSourceItem> getSourceItems(@NotNull ArtifactEditorContext editorContext, @NotNull Artifact artifact,
PackagingSourceItem parent) {
if (parent == null) {
return createModuleItems(editorContext, artifact, ArrayUtil.EMPTY_STRING_ARRAY);
return createModuleItems(editorContext, ArrayUtil.EMPTY_STRING_ARRAY);
}
else if (parent instanceof ModuleGroupItem) {
return createModuleItems(editorContext, artifact, ((ModuleGroupItem)parent).getPath());
return createModuleItems(editorContext, ((ModuleGroupItem)parent).getPath());
}
else if (parent instanceof ModuleSourceItemGroup) {
return createClasspathItems(editorContext, artifact, ((ModuleSourceItemGroup)parent).getModule());
@@ -57,8 +57,9 @@ public class ModulesAndLibrariesSourceItemsProvider extends PackagingSourceItems
return Collections.emptyList();
}
private static Collection<? extends PackagingSourceItem> createClasspathItems(ArtifactEditorContext editorContext,
Artifact artifact, @NotNull Module module) {
@NotNull
private static Collection<? extends PackagingSourceItem> createClasspathItems(@NotNull ArtifactEditorContext editorContext,
@NotNull Artifact artifact, @NotNull Module module) {
final List<PackagingSourceItem> items = new ArrayList<PackagingSourceItem>();
final ModuleRootModel rootModel = editorContext.getModulesProvider().getRootModel(module);
List<Library> libraries = new ArrayList<Library>();
@@ -83,7 +84,8 @@ public class ModulesAndLibrariesSourceItemsProvider extends PackagingSourceItems
return items;
}
private static Collection<? extends PackagingSourceItem> createModuleItems(ArtifactEditorContext editorContext, Artifact artifact, @NotNull String[] groupPath) {
@NotNull
private static Collection<? extends PackagingSourceItem> createModuleItems(@NotNull ArtifactEditorContext editorContext, @NotNull String[] groupPath) {
final Module[] modules = editorContext.getModulesProvider().getModules();
final List<PackagingSourceItem> items = new ArrayList<PackagingSourceItem>();
Set<String> groups = new HashSet<String>();
@@ -17,15 +17,12 @@ package com.intellij.openapi.roots.ui.configuration.artifacts.sourceItems;
import com.intellij.ide.projectView.PresentationData;
import com.intellij.ide.util.treeView.NodeDescriptor;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.roots.ui.configuration.artifacts.ArtifactEditorEx;
import com.intellij.openapi.roots.ui.configuration.artifacts.nodes.ArtifactsTreeNode;
import com.intellij.packaging.artifacts.Artifact;
import com.intellij.packaging.ui.ArtifactEditorContext;
import com.intellij.packaging.ui.PackagingSourceItem;
import com.intellij.packaging.ui.PackagingSourceItemsProvider;
import com.intellij.packaging.ui.TreeNodePresentation;
import com.intellij.packaging.ui.*;
import com.intellij.ui.treeStructure.SimpleNode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
@@ -61,12 +58,13 @@ public abstract class SourceItemNodeBase extends ArtifactsTreeNode {
@Override
protected SimpleNode[] buildChildren() {
final PackagingSourceItemsProvider[] providers = Extensions.getExtensions(PackagingSourceItemsProvider.EP_NAME);
final PackagingSourceItemsProvider[] providers = PackagingSourceItemsProvider.EP_NAME.getExtensions();
PackagingSourceItemFilter[] filters = PackagingSourceItemFilter.EP_NAME.getExtensions();
List<SimpleNode> children = new ArrayList<SimpleNode>();
for (PackagingSourceItemsProvider provider : providers) {
final Collection<? extends PackagingSourceItem> items = provider.getSourceItems(myContext, myArtifact, getSourceItem());
for (PackagingSourceItem item : items) {
if (myArtifact.getArtifactType().isSuitableItem(item)) {
if (myArtifact.getArtifactType().isSuitableItem(item) && isAvailable(item, myContext, filters)) {
children.add(new SourceItemNode(myContext, this, item, myArtifactEditor));
}
}
@@ -74,6 +72,16 @@ public abstract class SourceItemNodeBase extends ArtifactsTreeNode {
return children.isEmpty() ? NO_CHILDREN : children.toArray(new SimpleNode[children.size()]);
}
private static boolean isAvailable(@NotNull PackagingSourceItem item, @NotNull ArtifactEditorContext context,
@NotNull PackagingSourceItemFilter[] filters) {
for (PackagingSourceItemFilter filter : filters) {
if (!filter.isAvailable(item, context)) {
return false;
}
}
return true;
}
@Nullable
protected abstract PackagingSourceItem getSourceItem();
}
@@ -65,6 +65,7 @@
<extensionPoint name="packaging.elementType" interface="com.intellij.packaging.elements.PackagingElementType"/>
<extensionPoint name="packaging.artifactPropertiesProvider" interface="com.intellij.packaging.artifacts.ArtifactPropertiesProvider"/>
<extensionPoint name="packaging.sourceItemProvider" interface="com.intellij.packaging.ui.PackagingSourceItemsProvider"/>
<extensionPoint name="packaging.sourceItemFilter" interface="com.intellij.packaging.ui.PackagingSourceItemFilter"/>
<extensionPoint name="packaging.artifactType" interface="com.intellij.packaging.artifacts.ArtifactType"/>
<extensionPoint name="frameworkSupport" interface="com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider"/>