get rid of intellij.build.toolbox.litegen parameter and use BuildOptions.TOOLBOX_LITE...
[idea/community.git] / jps / jps-builders / src / org / jetbrains / jps / incremental / artifacts / impl / JpsArtifactUtil.java
1 /*
2  * Copyright 2000-2012 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.jetbrains.jps.incremental.artifacts.impl;
17
18 import com.intellij.openapi.util.text.StringUtil;
19 import com.intellij.util.Processor;
20 import com.intellij.util.containers.ContainerUtil;
21 import gnu.trove.THashSet;
22 import org.jetbrains.annotations.NotNull;
23 import org.jetbrains.jps.model.artifact.JpsArtifact;
24 import org.jetbrains.jps.model.artifact.elements.JpsComplexPackagingElement;
25 import org.jetbrains.jps.model.artifact.elements.JpsCompositePackagingElement;
26 import org.jetbrains.jps.model.artifact.elements.JpsModuleOutputPackagingElement;
27 import org.jetbrains.jps.model.artifact.elements.JpsPackagingElement;
28 import org.jetbrains.jps.model.module.JpsModule;
29
30 import java.util.Collection;
31 import java.util.HashSet;
32 import java.util.Set;
33
34 /**
35  * @author nik
36  */
37 public class JpsArtifactUtil {
38   public static boolean processPackagingElements(@NotNull JpsPackagingElement element,
39                                                  @NotNull Processor<? super JpsPackagingElement> processor) {
40     return processPackagingElements(element, processor, new HashSet<>());
41   }
42
43   private static boolean processPackagingElements(@NotNull JpsPackagingElement element,
44                                                  @NotNull Processor<? super JpsPackagingElement> processor,
45                                                  final Set<? super JpsPackagingElement> processed) {
46     if (!processed.add(element)) {
47       return false;
48     }
49     if (!processor.process(element)) {
50       return false;
51     }
52
53     if (element instanceof JpsCompositePackagingElement) {
54       for (JpsPackagingElement child : ((JpsCompositePackagingElement)element).getChildren()) {
55         processPackagingElements(child, processor, processed);
56       }
57     }
58     else if (element instanceof JpsComplexPackagingElement) {
59       for (JpsPackagingElement child : ((JpsComplexPackagingElement)element).getSubstitution()) {
60         processPackagingElements(child, processor, processed);
61       }
62     }
63     return true;
64   }
65
66   public static boolean isArchiveName(String name) {
67     return name.length() >= 4 && name.charAt(name.length() - 4) == '.' && StringUtil.endsWithIgnoreCase(name, "ar");
68   }
69
70   public static Set<JpsModule> getModulesIncludedInArtifacts(final @NotNull Collection<? extends JpsArtifact> artifacts) {
71     final Set<JpsModule> modules = new THashSet<>();
72     for (JpsArtifact artifact : artifacts) {
73       processPackagingElements(artifact.getRootElement(), element -> {
74         if (element instanceof JpsModuleOutputPackagingElement) {
75           ContainerUtil.addIfNotNull(modules, ((JpsModuleOutputPackagingElement)element).getModuleReference().resolve());
76         }
77         return true;
78       });
79     }
80     return modules;
81   }
82 }