diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java index f8f576dec0fa..06aed829f3da 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java @@ -1052,6 +1052,9 @@ public class IncProjectBuilder { doneSomething = true; } } + for (String outputPath : outputs) { + outputToSourceRegistry.removeMapping(outputPath, buildTargetId); + } if (!deletedOutputPaths.isEmpty()) { if (logger.isEnabled()) { logger.logDeletedFiles(deletedOutputPaths); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java index f7e6dda1307e..08d04703d44f 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java @@ -443,25 +443,11 @@ public class BuildDataManager implements StorageOwner { } public void remove(@NotNull String srcPath) throws IOException { - final Collection outputs = myDelegate.getOutputs(srcPath); - if (outputs == null) { - return; - } - try { - myDelegate.remove(srcPath); - } - finally { - myOutputToTargetRegistry.removeMapping(outputs, myBuildTargetId); - } + myDelegate.remove(srcPath); } public void removeOutput(@NotNull String sourcePath, @NotNull String outputPath) throws IOException { - try { - myDelegate.removeOutput(sourcePath, outputPath); - } - finally { - myOutputToTargetRegistry.removeMapping(outputPath, myBuildTargetId); - } + myDelegate.removeOutput(sourcePath, outputPath); } @NotNull diff --git a/jps/jps-builders/testSrc/org/jetbrains/jps/builders/java/ClassMoveTest.java b/jps/jps-builders/testSrc/org/jetbrains/jps/builders/java/ClassMoveTest.java new file mode 100644 index 000000000000..5fbcb0d6ee49 --- /dev/null +++ b/jps/jps-builders/testSrc/org/jetbrains/jps/builders/java/ClassMoveTest.java @@ -0,0 +1,44 @@ +/* + * Copyright 2000-2015 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.builders.java; + +import com.intellij.util.PathUtil; +import org.jetbrains.jps.builders.JpsBuildTestCase; +import org.jetbrains.jps.model.module.JpsModule; + +import static com.intellij.util.io.TestFileSystemBuilder.fs; + +/** + * @author nik + */ +public class ClassMoveTest extends JpsBuildTestCase { + public void testMoveClassAndDelete() { + String a1 = createFile("src1/A.java", "class A{}"); + String b = createFile("src2/B.java", "class B{}"); + JpsModule m = addModule("m", PathUtil.getParentPath(a1), PathUtil.getParentPath(b)); + makeAll(); + assertOutput(m, fs().file("A.class").file("B.class")); + + delete(a1); + String a2 = createFile("src2/A.java", "class A{}"); + makeAll(); + assertOutput(m, fs().file("A.class").file("B.class")); + + delete(a2); + makeAll(); + assertOutput(m, fs().file("B.class")); + } +}