| /* |
| * Copyright 2000-2012 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 org.jetbrains.jps.model.java.impl; |
| |
| import com.intellij.util.Consumer; |
| import org.jetbrains.jps.model.java.*; |
| import org.jetbrains.jps.model.library.JpsOrderRootType; |
| import org.jetbrains.jps.model.module.*; |
| import org.jetbrains.jps.model.module.impl.JpsDependenciesRootsEnumeratorBase; |
| |
| /** |
| * @author nik |
| */ |
| public class JpsJavaDependenciesRootsEnumeratorImpl extends JpsDependenciesRootsEnumeratorBase<JpsJavaDependenciesEnumeratorImpl> implements JpsJavaDependenciesRootsEnumerator { |
| private boolean myWithoutSelfModuleOutput; |
| |
| public JpsJavaDependenciesRootsEnumeratorImpl(JpsJavaDependenciesEnumeratorImpl dependenciesEnumerator, JpsOrderRootType rootType) { |
| super(dependenciesEnumerator, rootType); |
| } |
| |
| @Override |
| public JpsJavaDependenciesRootsEnumerator withoutSelfModuleOutput() { |
| myWithoutSelfModuleOutput = true; |
| return this; |
| } |
| |
| protected boolean processModuleRootUrls(JpsModule module, JpsDependencyElement dependencyElement, Consumer<String> urlConsumer) { |
| boolean includeProduction, includeTests; |
| if (dependencyElement instanceof JpsModuleDependency) { |
| boolean productionOnTests = myDependenciesEnumerator.isProductionOnTests(dependencyElement); |
| includeProduction = !productionOnTests; |
| includeTests = !myDependenciesEnumerator.isProductionOnly() && myDependenciesEnumerator.shouldIncludeTestsFromDependentModulesToTestClasspath() |
| || productionOnTests; |
| } |
| else { |
| includeProduction = true; |
| includeTests = !myDependenciesEnumerator.isProductionOnly(); |
| } |
| |
| if (myRootType == JpsOrderRootType.SOURCES) { |
| for (JpsModuleSourceRoot root : module.getSourceRoots()) { |
| JpsModuleSourceRootType<?> type = root.getRootType(); |
| if (type.equals(JavaSourceRootType.SOURCE) && includeProduction || type.equals(JavaSourceRootType.TEST_SOURCE) && includeTests) { |
| urlConsumer.consume(root.getUrl()); |
| } |
| } |
| } |
| else if (myRootType == JpsOrderRootType.COMPILED) { |
| JpsJavaExtensionService extensionService = JpsJavaExtensionService.getInstance(); |
| if (myWithoutSelfModuleOutput && myDependenciesEnumerator.isEnumerationRootModule(module)) { |
| if (includeProduction && includeTests) { |
| String url = extensionService.getOutputUrl(module, false); |
| if (url != null) { |
| urlConsumer.consume(url); |
| } |
| } |
| } |
| else { |
| String outputUrl = extensionService.getOutputUrl(module, false); |
| if (includeTests) { |
| String testsOutputUrl = extensionService.getOutputUrl(module, true); |
| if (testsOutputUrl != null && !testsOutputUrl.equals(outputUrl)) { |
| urlConsumer.consume(testsOutputUrl); |
| } |
| } |
| if (includeProduction && outputUrl != null) { |
| urlConsumer.consume(outputUrl); |
| } |
| } |
| } |
| else if (myRootType == JpsAnnotationRootType.INSTANCE) { |
| JpsJavaModuleExtension extension = JpsJavaExtensionService.getInstance().getModuleExtension(module); |
| if (extension != null) { |
| for (String url : extension.getAnnotationRoots().getUrls()) { |
| urlConsumer.consume(url); |
| } |
| } |
| } |
| return true; |
| } |
| } |