mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
include exported dependencies in build target configuration fingerprint => recompile build target on indirect dependency change (IDEA-188330)
This commit is contained in:
+6
@@ -0,0 +1,6 @@
|
||||
Compiling files:
|
||||
moduleA/src/qqq/MainA.java
|
||||
End of files
|
||||
Compiling files:
|
||||
moduleB/src/ppp/MainB.java
|
||||
End of files
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+4
@@ -0,0 +1,4 @@
|
||||
package qqq;
|
||||
|
||||
public class MainA {
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package ppp;
|
||||
|
||||
public class MainB {
|
||||
public static void main(String[] args) {
|
||||
ppp.Util.perform(10);
|
||||
}
|
||||
}
|
||||
@@ -16,10 +16,8 @@
|
||||
package org.jetbrains.jps.incremental;
|
||||
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.ProjectPaths;
|
||||
@@ -42,7 +40,6 @@ import org.jetbrains.jps.model.java.compiler.ProcessorConfigProfile;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
import org.jetbrains.jps.model.module.JpsTypedModuleSourceRoot;
|
||||
import org.jetbrains.jps.service.JpsServiceManager;
|
||||
import org.jetbrains.jps.util.JpsPathUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.PrintWriter;
|
||||
@@ -206,7 +203,7 @@ public final class ModuleBuildTarget extends JVMModuleBuildTarget<JavaSourceRoot
|
||||
}
|
||||
|
||||
final JpsModule module = getModule();
|
||||
JpsJavaDependenciesEnumerator enumerator = JpsJavaExtensionService.dependencies(module).compileOnly();
|
||||
JpsJavaDependenciesEnumerator enumerator = JpsJavaExtensionService.dependencies(module).compileOnly().recursively().exportedOnly();
|
||||
if (!isTests()) {
|
||||
enumerator = enumerator.productionOnly();
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.jetbrains.jps.builders.impl.logging.ProjectBuilderLoggerBase;
|
||||
import org.jetbrains.jps.builders.logging.BuildLoggingManager;
|
||||
import org.jetbrains.jps.cmdline.ProjectDescriptor;
|
||||
import org.jetbrains.jps.model.JpsDummyElement;
|
||||
import org.jetbrains.jps.model.JpsModuleRootModificationUtil;
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootType;
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService;
|
||||
import org.jetbrains.jps.model.java.JpsJavaLibraryType;
|
||||
@@ -38,12 +39,15 @@ import org.jetbrains.jps.util.JpsPathUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author db
|
||||
* @since 26.07.11
|
||||
*/
|
||||
public abstract class IncrementalTestCase extends JpsBuildTestCase {
|
||||
|
||||
private static final String MODULE_DIR_PREFIX = "module";
|
||||
private final String groupName;
|
||||
private File baseDir;
|
||||
private File workDir;
|
||||
@@ -221,6 +225,34 @@ public abstract class IncrementalTestCase extends JpsBuildTestCase {
|
||||
module.addSourceRoot(getUrl(testRootRelativePath), JavaSourceRootType.TEST_SOURCE);
|
||||
}
|
||||
|
||||
protected Map<String, JpsModule> setupModules() {
|
||||
final File projectDir = getOrCreateProjectDir();
|
||||
final File[] moduleDirs = projectDir.listFiles((dir, name) -> name.startsWith(MODULE_DIR_PREFIX));
|
||||
|
||||
if (moduleDirs != null && moduleDirs.length > 0) {
|
||||
final Map<String, JpsModule> modules = new HashMap<>();
|
||||
final List<String> moduleNames = new ArrayList<>();
|
||||
for (File moduleDir : moduleDirs) {
|
||||
final String name = moduleDir.getName().substring(MODULE_DIR_PREFIX.length());
|
||||
final JpsModule m = addModule(name, moduleDir.getName() + "/src");
|
||||
modules.put(name, m);
|
||||
moduleNames.add(name);
|
||||
}
|
||||
Collections.sort(moduleNames, Collections.reverseOrder());
|
||||
// set dependencies in alphabet reverse order
|
||||
JpsModule from = null;
|
||||
for (String name : moduleNames) {
|
||||
final JpsModule mod = modules.get(name);
|
||||
if (from != null) {
|
||||
JpsModuleRootModificationUtil.addDependency(from, mod);
|
||||
}
|
||||
from = mod;
|
||||
}
|
||||
return modules;
|
||||
}
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
private static class StringProjectBuilderLogger extends ProjectBuilderLoggerBase {
|
||||
private final String myRoot;
|
||||
private final StringBuilder myLog;
|
||||
|
||||
@@ -4,19 +4,12 @@ package org.jetbrains.ether;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import org.jetbrains.jps.builders.BuildResult;
|
||||
import org.jetbrains.jps.builders.CompileScopeTestBuilder;
|
||||
import org.jetbrains.jps.model.JpsModuleRootModificationUtil;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author Eugene Zhuravlev
|
||||
*/
|
||||
public class Java9Test extends IncrementalTestCase {
|
||||
|
||||
private static final String MODULE_DIR_PREFIX = "module";
|
||||
|
||||
public Java9Test() {
|
||||
super("java9-features");
|
||||
}
|
||||
@@ -29,6 +22,11 @@ public class Java9Test extends IncrementalTestCase {
|
||||
return super.shouldRunTest();
|
||||
}
|
||||
|
||||
protected BuildResult doTestBuild(int makesCount) {
|
||||
setupModules();
|
||||
return super.doTestBuild(makesCount);
|
||||
}
|
||||
|
||||
public void testModuleInfoAdded() {
|
||||
// expected result: the whole target is recompiled after the module-info.java file was newly added
|
||||
// because necessary 'require' directives may be missing from the newly added module-info file
|
||||
@@ -101,35 +99,4 @@ public class Java9Test extends IncrementalTestCase {
|
||||
modify(1);
|
||||
doBuild(CompileScopeTestBuilder.make().allModules()).assertFailed();
|
||||
}
|
||||
|
||||
protected BuildResult doTestBuild(int makesCount) {
|
||||
setupModules();
|
||||
return super.doTestBuild(makesCount);
|
||||
}
|
||||
|
||||
private void setupModules() {
|
||||
final File projectDir = getOrCreateProjectDir();
|
||||
final File[] moduleDirs = projectDir.listFiles((dir, name) -> name.startsWith(MODULE_DIR_PREFIX));
|
||||
|
||||
if (moduleDirs != null && moduleDirs.length > 0) {
|
||||
final Map<String, JpsModule> modules = new HashMap<>();
|
||||
final List<String> moduleNames = new ArrayList<>();
|
||||
for (File moduleDir : moduleDirs) {
|
||||
final String name = moduleDir.getName().substring(MODULE_DIR_PREFIX.length());
|
||||
final JpsModule m = addModule(name, moduleDir.getName() + "/src");
|
||||
modules.put(name, m);
|
||||
moduleNames.add(name);
|
||||
}
|
||||
Collections.sort(moduleNames, Collections.reverseOrder());
|
||||
// set dependencies in alphabet reverse order
|
||||
JpsModule from = null;
|
||||
for (String name : moduleNames) {
|
||||
final JpsModule mod = modules.get(name);
|
||||
if (from != null) {
|
||||
JpsModuleRootModificationUtil.addDependency(from, mod);
|
||||
}
|
||||
from = mod;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,11 +15,18 @@
|
||||
*/
|
||||
package org.jetbrains.ether;
|
||||
|
||||
import org.jetbrains.jps.model.JpsDummyElement;
|
||||
import org.jetbrains.jps.model.JpsModuleRootModificationUtil;
|
||||
import org.jetbrains.jps.model.java.JpsJavaDependencyScope;
|
||||
import org.jetbrains.jps.model.java.JpsJavaLibraryType;
|
||||
import org.jetbrains.jps.model.library.JpsLibrary;
|
||||
import org.jetbrains.jps.model.library.JpsOrderRootType;
|
||||
import org.jetbrains.jps.model.library.JpsTypedLibrary;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author: db
|
||||
*/
|
||||
@@ -40,6 +47,36 @@ public class MarkDirtyTest extends IncrementalTestCase {
|
||||
doTestBuild(1).assertSuccessful();
|
||||
}
|
||||
|
||||
protected boolean useCachedProjectDescriptorOnEachMake() {
|
||||
return !"recompileTargetOnExportedLibraryChange".equals(getTestName(true));
|
||||
}
|
||||
|
||||
protected void modify(int stage) {
|
||||
if (stage == 0 && "recompileTargetOnExportedLibraryChange".equals(getTestName(true))) {
|
||||
final JpsTypedLibrary<JpsDummyElement> library = myProject.getLibraryCollection().findLibrary("l", JpsJavaLibraryType.INSTANCE);
|
||||
assertNotNull(library);
|
||||
for (String url : library.getRootUrls(JpsOrderRootType.COMPILED)) {
|
||||
library.removeUrl(url, JpsOrderRootType.COMPILED);
|
||||
}
|
||||
library.addRoot(new File(getAbsolutePath("moduleA/lib/util_new.jar")), JpsOrderRootType.COMPILED);
|
||||
}
|
||||
else {
|
||||
super.modify(stage);
|
||||
}
|
||||
}
|
||||
|
||||
public void testRecompileTargetOnExportedLibraryChange() {
|
||||
setupInitialProject();
|
||||
final Map<String, JpsModule> modules = setupModules();
|
||||
final JpsModule moduleA = modules.get("A");
|
||||
assertNotNull(moduleA);
|
||||
|
||||
JpsLibrary library = addLibrary("moduleA/lib/util.jar");
|
||||
JpsModuleRootModificationUtil.addDependency(moduleA, library, JpsJavaDependencyScope.COMPILE, true);
|
||||
|
||||
doTestBuild(1).assertSuccessful();
|
||||
}
|
||||
|
||||
public void testTransitiveRecompile() {
|
||||
JpsModule module = addModule();
|
||||
addTestRoot(module, "testSrc");
|
||||
|
||||
Reference in New Issue
Block a user