blob: b87a5cfa77309019d1136535dc8f37869ee71750 [file] [log] [blame]
/*
* 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;
}
}