mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
external build: honor 'exclude output' option
This commit is contained in:
@@ -5,6 +5,9 @@ import gnu.trove.THashMap;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.jps.indices.ModuleExcludeIndex;
|
||||
import org.jetbrains.jps.model.JpsModel;
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService;
|
||||
import org.jetbrains.jps.model.java.JpsJavaModuleExtension;
|
||||
import org.jetbrains.jps.model.java.JpsJavaProjectExtension;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
import org.jetbrains.jps.util.JpsPathUtil;
|
||||
|
||||
@@ -24,11 +27,29 @@ public class ModuleExcludeIndexImpl implements ModuleExcludeIndex {
|
||||
final Collection<JpsModule> allModules = model.getProject().getModules();
|
||||
for (final JpsModule module : allModules) {
|
||||
final List<File> moduleExcludes = new ArrayList<File>();
|
||||
myModuleToExcludesMap.put(module, moduleExcludes);
|
||||
for (String url : module.getExcludeRootsList().getUrls()) {
|
||||
final File root = JpsPathUtil.urlToFile(url);
|
||||
myExcludedRoots.add(root);
|
||||
moduleExcludes.add(root);
|
||||
moduleExcludes.add(JpsPathUtil.urlToFile(url));
|
||||
}
|
||||
JpsJavaModuleExtension moduleExtension = JpsJavaExtensionService.getInstance().getModuleExtension(module);
|
||||
if (moduleExtension != null && !moduleExtension.isInheritOutput() && moduleExtension.isExcludeOutput()) {
|
||||
String outputUrl = moduleExtension.getOutputUrl();
|
||||
if (outputUrl != null) {
|
||||
moduleExcludes.add(JpsPathUtil.urlToFile(outputUrl));
|
||||
}
|
||||
String testOutputUrl = moduleExtension.getTestOutputUrl();
|
||||
if (testOutputUrl != null) {
|
||||
moduleExcludes.add(JpsPathUtil.urlToFile(testOutputUrl));
|
||||
}
|
||||
}
|
||||
myModuleToExcludesMap.put(module, moduleExcludes);
|
||||
myExcludedRoots.addAll(moduleExcludes);
|
||||
}
|
||||
|
||||
JpsJavaProjectExtension projectExtension = JpsJavaExtensionService.getInstance().getProjectExtension(model.getProject());
|
||||
if (projectExtension != null) {
|
||||
String url = projectExtension.getOutputUrl();
|
||||
if (url != null) {
|
||||
myExcludedRoots.add(JpsPathUtil.urlToFile(url));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package org.jetbrains.jps.indices;
|
||||
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import org.jetbrains.jps.indices.impl.ModuleExcludeIndexImpl;
|
||||
import org.jetbrains.jps.model.JpsJavaModelTestCase;
|
||||
import org.jetbrains.jps.model.java.JpsJavaModuleExtension;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
import org.jetbrains.jps.util.JpsPathUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class ModuleExcludeIndexTest extends JpsJavaModelTestCase {
|
||||
private File myRoot;
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
myRoot = FileUtil.createTempDirectory("excludes", null);
|
||||
}
|
||||
|
||||
public void testExcludeProjectOutput() throws IOException {
|
||||
File out = new File(myRoot, "out");
|
||||
getJavaService().getOrCreateProjectExtension(myProject).setOutputUrl(JpsPathUtil.pathToUrl(out.getAbsolutePath()));
|
||||
assertNotExcluded(myRoot);
|
||||
assertExcluded(out);
|
||||
}
|
||||
|
||||
public void testExcludeModuleOutput() {
|
||||
File out = new File(myRoot, "out");
|
||||
JpsModule module = addModule();
|
||||
JpsJavaModuleExtension extension = getJavaService().getOrCreateModuleExtension(module);
|
||||
extension.setExcludeOutput(true);
|
||||
extension.setOutputUrl(JpsPathUtil.pathToUrl(out.getAbsolutePath()));
|
||||
|
||||
assertNotExcluded(myRoot);
|
||||
assertExcluded(out);
|
||||
assertSameElements(getModuleExcludes(module), out);
|
||||
|
||||
extension.setExcludeOutput(false);
|
||||
assertNotExcluded(out);
|
||||
assertEmpty(getModuleExcludes(module));
|
||||
}
|
||||
|
||||
public void testExcludeExcludedFolder() {
|
||||
File exc = new File(myRoot, "exc");
|
||||
JpsModule module = addModule();
|
||||
module.getExcludeRootsList().addUrl(JpsPathUtil.pathToUrl(exc.getAbsolutePath()));
|
||||
|
||||
assertNotExcluded(myRoot);
|
||||
assertExcluded(exc);
|
||||
assertSameElements(getModuleExcludes(module), exc);
|
||||
}
|
||||
|
||||
private Collection<File> getModuleExcludes(JpsModule module) {
|
||||
return new ModuleExcludeIndexImpl(myModel).getModuleExcludes(module);
|
||||
}
|
||||
|
||||
private void assertExcluded(File file) {
|
||||
assertTrue(new ModuleExcludeIndexImpl(myModel).isExcluded(file));
|
||||
}
|
||||
|
||||
private void assertNotExcluded(File file) {
|
||||
assertFalse(new ModuleExcludeIndexImpl(myModel).isExcluded(file));
|
||||
}
|
||||
}
|
||||
@@ -95,7 +95,7 @@ public class JpsDependenciesEnumeratorTest extends JpsJavaModelTestCase {
|
||||
|
||||
public void testLibraryScope() throws Exception {
|
||||
JpsLibraryDependency dependency = myModule.getDependenciesList().addLibraryDependency(createJDomLibrary());
|
||||
JpsJavaExtensionService.getInstance().getOrCreateDependencyExtension(dependency).setScope(JpsJavaDependencyScope.RUNTIME);
|
||||
getJavaService().getOrCreateDependencyExtension(dependency).setScope(JpsJavaDependencyScope.RUNTIME);
|
||||
JpsModuleRootModificationUtil.addDependency(myModule, createJDomLibrary(), JpsJavaDependencyScope.RUNTIME, false);
|
||||
|
||||
assertClassRoots(orderEntries(myModule).withoutSdk(), getJDomJar());
|
||||
@@ -190,16 +190,16 @@ public class JpsDependenciesEnumeratorTest extends JpsJavaModelTestCase {
|
||||
final String output = setModuleOutput(myModule, false);
|
||||
final String testOutput = setModuleOutput(myModule, true);
|
||||
|
||||
assertClassRoots(JpsJavaExtensionService.getInstance().enumerateDependencies(Arrays.asList(myModule)).withoutSdk(),
|
||||
assertClassRoots(getJavaService().enumerateDependencies(Arrays.asList(myModule)).withoutSdk(),
|
||||
testOutput, output, getJDomJar());
|
||||
assertSourceRoots(JpsJavaExtensionService.getInstance().enumerateDependencies(Arrays.asList(myModule)).withoutSdk(),
|
||||
assertSourceRoots(getJavaService().enumerateDependencies(Arrays.asList(myModule)).withoutSdk(),
|
||||
srcRoot, testRoot, getJDomSources());
|
||||
}
|
||||
|
||||
private String setModuleOutput(JpsModule module, boolean tests) {
|
||||
try {
|
||||
File file = FileUtil.createTempDirectory(module.getName(), tests ? "testSrc" : "src");
|
||||
JpsJavaModuleExtension extension = JpsJavaExtensionService.getInstance().getOrCreateModuleExtension(module);
|
||||
JpsJavaModuleExtension extension = getJavaService().getOrCreateModuleExtension(module);
|
||||
String url = JpsPathUtil.getLibraryRootUrl(file);
|
||||
if (tests) {
|
||||
extension.setTestOutputUrl(url);
|
||||
|
||||
@@ -14,9 +14,9 @@ import java.util.List;
|
||||
public class JpsJavaExtensionTest extends JpsJavaModelTestCase {
|
||||
public void testModule() {
|
||||
final JpsModule module = addModule();
|
||||
final JpsJavaModuleExtension extension = JpsJavaExtensionService.getInstance().getOrCreateModuleExtension(module);
|
||||
final JpsJavaModuleExtension extension = getJavaService().getOrCreateModuleExtension(module);
|
||||
extension.setOutputUrl("file://path");
|
||||
JpsJavaModuleExtension moduleExtension = JpsJavaExtensionService.getInstance().getModuleExtension(module);
|
||||
JpsJavaModuleExtension moduleExtension = getJavaService().getModuleExtension(module);
|
||||
assertNotNull(moduleExtension);
|
||||
assertEquals("file://path", moduleExtension.getOutputUrl());
|
||||
}
|
||||
@@ -26,14 +26,14 @@ public class JpsJavaExtensionTest extends JpsJavaModelTestCase {
|
||||
final JpsModule module = model.getProject().addModule("m", JpsJavaModuleType.INSTANCE);
|
||||
final JpsLibrary library = model.getProject().addLibrary("l", JpsJavaLibraryType.INSTANCE);
|
||||
final JpsLibraryDependency dependency = module.getDependenciesList().addLibraryDependency(library);
|
||||
JpsJavaExtensionService.getInstance().getOrCreateDependencyExtension(dependency).setScope(JpsJavaDependencyScope.TEST);
|
||||
JpsJavaExtensionService.getInstance().getOrCreateDependencyExtension(dependency).setExported(true);
|
||||
getJavaService().getOrCreateDependencyExtension(dependency).setScope(JpsJavaDependencyScope.TEST);
|
||||
getJavaService().getOrCreateDependencyExtension(dependency).setExported(true);
|
||||
model.commit();
|
||||
|
||||
List<JpsDependencyElement> dependencies = assertOneElement(myProject.getModules()).getDependenciesList().getDependencies();
|
||||
assertEquals(2, dependencies.size());
|
||||
final JpsDependencyElement dep = dependencies.get(1);
|
||||
final JpsJavaDependencyExtension extension = JpsJavaExtensionService.getInstance().getDependencyExtension(dep);
|
||||
final JpsJavaDependencyExtension extension = getJavaService().getDependencyExtension(dep);
|
||||
assertNotNull(extension);
|
||||
assertTrue(extension.isExported());
|
||||
assertSame(JpsJavaDependencyScope.TEST, extension.getScope());
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.jps.model;
|
||||
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService;
|
||||
import org.jetbrains.jps.model.java.JpsJavaLibraryType;
|
||||
import org.jetbrains.jps.model.java.JpsJavaModuleType;
|
||||
import org.jetbrains.jps.model.library.JpsLibrary;
|
||||
@@ -24,4 +25,8 @@ public abstract class JpsJavaModelTestCase extends JpsModelTestCase {
|
||||
protected JpsLibrary addLibrary(final String name) {
|
||||
return myProject.addLibrary(name, JpsJavaLibraryType.INSTANCE);
|
||||
}
|
||||
|
||||
protected JpsJavaExtensionService getJavaService() {
|
||||
return JpsJavaExtensionService.getInstance();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user