diff --git a/jps/jps-builders/jps-builders.iml b/jps/jps-builders/jps-builders.iml
index 2a58ff7ae66d..bcbc6d67133d 100644
--- a/jps/jps-builders/jps-builders.iml
+++ b/jps/jps-builders/jps-builders.iml
@@ -4,6 +4,7 @@
+
@@ -32,6 +33,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/jps/jps-builders/src/org/jetbrains/jps/api/CanceledStatus.java b/jps/jps-builders/src/org/jetbrains/jps/api/CanceledStatus.java
index d97759a183e1..b03a399379bf 100644
--- a/jps/jps-builders/src/org/jetbrains/jps/api/CanceledStatus.java
+++ b/jps/jps-builders/src/org/jetbrains/jps/api/CanceledStatus.java
@@ -5,5 +5,12 @@ package org.jetbrains.jps.api;
* Date: 1/13/12
*/
public interface CanceledStatus {
+ CanceledStatus NULL = new CanceledStatus() {
+ @Override
+ public boolean isCanceled() {
+ return false;
+ }
+ };
+
boolean isCanceled();
}
diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java
index 314187fa1100..fbd250eaa5bf 100644
--- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java
+++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java
@@ -71,19 +71,14 @@ public abstract class ModuleLevelBuilder extends Builder {
if (LOG.isDebugEnabled()) {
LOG.debug("Differentiate Results:");
-
LOG.debug(" Compiled Files:");
-
for (final File c : allCompiledFiles) {
LOG.debug(" " + c.getAbsolutePath());
}
-
LOG.debug(" Affected Files:");
-
for (final File c : allAffectedFiles) {
LOG.debug(" " + c.getAbsolutePath());
}
-
LOG.debug("End Of Differentiate Results.");
}
diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java
new file mode 100644
index 000000000000..923de0d09adc
--- /dev/null
+++ b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java
@@ -0,0 +1,246 @@
+/*
+ * 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.ether;
+
+import com.intellij.openapi.diagnostic.Logger;
+import junit.framework.TestCase;
+import junitx.framework.FileAssert;
+import org.apache.log4j.Level;
+import org.apache.log4j.xml.DOMConfigurator;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.jps.Project;
+import org.jetbrains.jps.api.CanceledStatus;
+import org.jetbrains.jps.idea.IdeaProjectLoader;
+import org.jetbrains.jps.incremental.AllProjectScope;
+import org.jetbrains.jps.incremental.BuilderRegistry;
+import org.jetbrains.jps.incremental.FSState;
+import org.jetbrains.jps.incremental.IncProjectBuilder;
+import org.jetbrains.jps.incremental.storage.BuildDataManager;
+import org.jetbrains.jps.incremental.storage.ProjectTimestamps;
+import org.jetbrains.jps.server.ProjectDescriptor;
+
+import java.io.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: db
+ * Date: 26.07.11
+ * Time: 0:34
+ * To change this template use File | Settings | File Templates.
+ */
+public abstract class IncrementalTestCase extends TestCase {
+ private final String groupName;
+ private final String tempDir = System.getProperty("java.io.tmpdir");
+
+ private String baseDir;
+ private String workDir;
+
+ protected IncrementalTestCase(final String name) throws Exception {
+ super(name);
+ groupName = name;
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ baseDir = "jps/testData" + File.separator + "incremental" + File.separator;
+
+ for (int i = 0; ; i++) {
+ final File tmp = new File(tempDir + File.separator + "__temp__" + i);
+ if (tmp.mkdir()) {
+ workDir = tmp.getPath() + File.separator;
+ break;
+ }
+ }
+
+ copy(new File(getBaseDir()), new File(getWorkDir()));
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+// delete(new File(workDir));
+ }
+
+ private String getDir(final String prefix) {
+ final String name = getName();
+
+ assert (name.startsWith("test"));
+
+ final String result = Character.toLowerCase(name.charAt("test".length())) + name.substring("test".length() + 1);
+
+ return prefix + File.separator + groupName + File.separator + result;
+ }
+
+ private String getBaseDir() {
+ return getDir(baseDir);
+ }
+
+ private String getWorkDir() {
+ return getDir(workDir);
+ }
+
+ private void delete(final File file) throws Exception {
+ if (file.isDirectory()) {
+ for (File f : file.listFiles()) {
+ delete(f);
+ }
+ }
+
+ if (!file.delete()) throw new IOException("could not delete file or directory " + file.getPath());
+
+ }
+
+ private void copy(final File input, final File output) throws Exception {
+ if (input.isDirectory()) {
+ if (output.mkdirs()) {
+ for (File f : input.listFiles()) {
+ copy(f, new File(output.getPath() + File.separator + f.getName()));
+ }
+ }
+ else {
+ throw new IOException("unable to create directory " + output.getPath());
+ }
+ }
+ else if (input.isFile()) {
+ final FileReader in = new FileReader(input);
+ final FileWriter out = new FileWriter(output);
+ int c;
+
+ while ((c = in.read()) != -1) out.write(c);
+
+ in.close();
+ out.close();
+ }
+ }
+
+ private void modify() throws Exception {
+ final File dir = new File(getBaseDir());
+ final File[] files = dir.listFiles(new FileFilter() {
+ public boolean accept(final File pathname) {
+ final String name = pathname.getName();
+
+ return name.endsWith(".java.new") || name.endsWith(".java.remove");
+ }
+ });
+
+ for (File input : files) {
+ final String name = input.getName();
+
+ final boolean copy = name.endsWith(".java.new");
+ final String postfix = name.substring(0, name.length() - (copy ? ".new" : ".remove").length());
+ final int pathSep = postfix.indexOf("$");
+ final String basename = pathSep == -1 ? postfix : postfix.substring(pathSep + 1);
+ final String path =
+ getWorkDir() + File.separator + (pathSep == -1 ? "src" : postfix.substring(0, pathSep).replace('-', File.separatorChar));
+ final File output = new File(path + File.separator + basename);
+
+ if (copy) {
+ copy(input, output);
+ }
+ else {
+ output.delete();
+ }
+ }
+ }
+
+ private void initLoggers() {
+ final String logFile = getWorkDir() + File.separator + "log.xml";
+
+ if (new File(logFile).exists()) {
+ DOMConfigurator.configure(logFile);
+ }
+
+ Logger.setFactory(new Logger.Factory() {
+ @Override
+ public Logger getLoggerInstance(String category) {
+ final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(category);
+
+ return new Logger() {
+ @Override
+ public boolean isDebugEnabled() {
+ return logger.isDebugEnabled();
+ }
+
+ @Override
+ public void debug(@NonNls String message) {
+ logger.debug(message);
+ }
+
+ @Override
+ public void debug(@Nullable Throwable t) {
+ logger.debug("", t);
+ }
+
+ @Override
+ public void debug(@NonNls String message, @Nullable Throwable t) {
+ logger.debug(message, t);
+ }
+
+ @Override
+ public void error(@NonNls String message, @Nullable Throwable t, @NonNls String... details) {
+ logger.debug(message, t);
+ }
+
+ @Override
+ public void info(@NonNls String message) {
+ logger.info(message);
+ }
+
+ @Override
+ public void info(@NonNls String message, @Nullable Throwable t) {
+ logger.info(message, t);
+ }
+
+ @Override
+ public void warn(@NonNls String message, @Nullable Throwable t) {
+ logger.warn(message, t);
+ }
+
+ @Override
+ public void setLevel(Level level) {
+ logger.setLevel(level);
+ }
+ };
+ }
+ });
+ }
+
+ public void doTest() throws Exception {
+ initLoggers();
+
+ final String projectPath = getWorkDir() + File.separator + ".idea";
+ final Project project = new Project();
+
+ IdeaProjectLoader.loadFromPath(project, projectPath, "");
+
+ final ProjectDescriptor projectDescriptor =
+ new ProjectDescriptor(projectPath, project, new FSState(true), new ProjectTimestamps(projectPath),
+ new BuildDataManager(projectPath, true));
+ final IncProjectBuilder builder = new IncProjectBuilder(projectDescriptor, BuilderRegistry.getInstance(), CanceledStatus.NULL);
+
+ builder.build(new AllProjectScope(project, true), false, true);
+
+ Thread.sleep(1000);
+
+ modify();
+
+ builder.build(new AllProjectScope(project, false), true, false);
+
+ projectDescriptor.release();
+
+ FileAssert.assertEquals(new File(getBaseDir() + ".log"), new File(getWorkDir() + ".log"));
+ }
+}
diff --git a/jps/testSrc/org/jetbrains/ether/TestAnnotations.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestAnnotations.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestAnnotations.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestAnnotations.java
diff --git a/jps/testSrc/org/jetbrains/ether/TestClassModifiers.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestClassModifiers.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestClassModifiers.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestClassModifiers.java
diff --git a/jps/testSrc/org/jetbrains/ether/TestClassProperties.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestClassProperties.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestClassProperties.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestClassProperties.java
diff --git a/jps/testSrc/org/jetbrains/ether/TestClassRename.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestClassRename.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestClassRename.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestClassRename.java
diff --git a/jps/testSrc/org/jetbrains/ether/TestCommon.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestCommon.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestCommon.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestCommon.java
diff --git a/jps/testSrc/org/jetbrains/ether/TestFieldModifiers.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestFieldModifiers.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestFieldModifiers.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestFieldModifiers.java
diff --git a/jps/testSrc/org/jetbrains/ether/TestFieldProperties.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestFieldProperties.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestFieldProperties.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestFieldProperties.java
diff --git a/jps/testSrc/org/jetbrains/ether/TestGenerics.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestGenerics.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestGenerics.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestGenerics.java
diff --git a/jps/testSrc/org/jetbrains/ether/TestMarkDirty.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestMarkDirty.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestMarkDirty.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestMarkDirty.java
diff --git a/jps/testSrc/org/jetbrains/ether/TestMembersChange.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestMembersChange.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestMembersChange.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestMembersChange.java
diff --git a/jps/testSrc/org/jetbrains/ether/TestMethodModifiers.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestMethodModifiers.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestMethodModifiers.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestMethodModifiers.java
diff --git a/jps/testSrc/org/jetbrains/ether/TestMethodProperties.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestMethodProperties.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestMethodProperties.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestMethodProperties.java
diff --git a/jps/testSrc/org/jetbrains/ether/TestPackageInfo.java b/jps/jps-builders/testSrc/org/jetbrains/ether/TestPackageInfo.java
similarity index 100%
rename from jps/testSrc/org/jetbrains/ether/TestPackageInfo.java
rename to jps/jps-builders/testSrc/org/jetbrains/ether/TestPackageInfo.java
diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java
index 16846ac8e8f2..8163e56cfee6 100644
--- a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java
+++ b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java
@@ -1436,7 +1436,6 @@ public class Mappings {
}
debug("Dependent file: ", depFile);
-
final Collection depClusters = mySourceFileToUsages.get(depFile);
for (UsageRepr.Cluster depCluster : depClusters) {
diff --git a/jps/testSrc/org/jetbrains/ether/IncrementalTestCase.java b/jps/testSrc/org/jetbrains/ether/IncrementalTestCase.java
deleted file mode 100644
index 4ba1e8b395ee..000000000000
--- a/jps/testSrc/org/jetbrains/ether/IncrementalTestCase.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.jetbrains.ether;
-
-import junit.framework.TestCase;
-import junitx.framework.FileAssert;
-import org.jetbrains.ether.dependencyView.Mappings;
-
-import java.io.*;
-
-/**
- * Created by IntelliJ IDEA.
- * User: db
- * Date: 26.07.11
- * Time: 0:34
- * To change this template use File | Settings | File Templates.
- */
-public abstract class IncrementalTestCase extends TestCase {
- private final String groupName;
- private final String tempDir = System.getProperty("java.io.tmpdir");
-
- private String baseDir;
- private String workDir;
-
- protected IncrementalTestCase(final String name) throws Exception {
- super(name);
- groupName = name;
- }
-
- @Override
- protected void setUp() throws Exception {
- baseDir = "jps/testData" + File.separator + "incremental" + File.separator;
-
- for (int i = 0; ; i++) {
- final File tmp = new File(tempDir + File.separator + "__temp__" + i);
- if (tmp.mkdir()) {
- workDir = tmp.getPath() + File.separator;
- break;
- }
- }
-
- copy(new File(getBaseDir()), new File(getWorkDir()));
- }
-
- @Override
- protected void tearDown() throws Exception {
-// delete(new File(workDir));
- }
-
- private String getDir(final String prefix) {
- final String name = getName();
-
- assert (name.startsWith("test"));
-
- final String result = Character.toLowerCase(name.charAt("test".length())) + name.substring("test".length() + 1);
-
- return prefix + File.separator + groupName + File.separator + result;
- }
-
- private String getBaseDir() {
- return getDir(baseDir);
- }
-
- private String getWorkDir() {
- return getDir(workDir);
- }
-
- private void delete(final File file) throws Exception {
- if (file.isDirectory()) {
- for (File f : file.listFiles()) {
- delete(f);
- }
- }
-
- if (!file.delete()) throw new IOException("could not delete file or directory " + file.getPath());
-
- }
-
- private void copy(final File input, final File output) throws Exception {
- if (input.isDirectory()) {
- if (output.mkdirs()) {
- for (File f : input.listFiles()) {
- copy(f, new File(output.getPath() + File.separator + f.getName()));
- }
- }
- else {
- throw new IOException("unable to create directory " + output.getPath());
- }
- }
- else if (input.isFile()) {
- final FileReader in = new FileReader(input);
- final FileWriter out = new FileWriter(output);
- int c;
-
- while ((c = in.read()) != -1) out.write(c);
-
- in.close();
- out.close();
- }
- }
-
- private void modify() throws Exception {
- final File dir = new File(getBaseDir());
- final File[] files = dir.listFiles(new FileFilter() {
- public boolean accept(final File pathname) {
- final String name = pathname.getName();
-
- return name.endsWith(".java.new") || name.endsWith(".java.remove");
- }
- });
-
- for (File input : files) {
- final String name = input.getName();
-
- final boolean copy = name.endsWith(".java.new");
- final String postfix = name.substring(0, name.length() - (copy ? ".new" : ".remove").length());
- final int pathSep = postfix.indexOf("$");
- final String basename = pathSep == -1 ? postfix : postfix.substring(pathSep + 1);
- final String path =
- getWorkDir() + File.separator + (pathSep == -1 ? "src" : postfix.substring(0, pathSep).replace('-', File.separatorChar));
- final File output = new File(path + File.separator + basename);
-
- if (copy) {
- copy(input, output);
- }
- else {
- output.delete();
- }
- }
- }
-
- public void doTest() throws Exception {
- final ProjectWrapper first = ProjectWrapper.load(getWorkDir(), "project.builder.useInProcessJavac=true", false);
-
- first.rebuild();
- first.save();
-
- Thread.sleep(1000);
-
- modify();
-
- final ProjectWrapper second = ProjectWrapper.load(getWorkDir(), "project.builder.useInProcessJavac=true", true);
-
- final PrintStream stream = new PrintStream(new FileOutputStream(getWorkDir() + ".log"), true);
-
- try {
- second.makeModule(null, new ProjectWrapper.Flags() {
- public boolean tests() {
- return false;
- }
-
- public boolean incremental() {
- return true;
- }
-
- public boolean force() {
- return false;
- }
-
- public PrintStream logStream() {
- return stream;
- }
- });
-
- }
- finally {
- stream.close();
- }
-
- FileAssert.assertEquals(new File(getBaseDir() + ".log"), new File(getWorkDir() + ".log"));
- }
-}