external build: method extracted

This commit is contained in:
nik
2012-12-12 14:42:30 +04:00
parent 7ffeca6f80
commit 15708d3bac
3 changed files with 20 additions and 12 deletions
@@ -26,6 +26,8 @@ import java.util.Collection;
public interface DirtyFilesHolder<R extends BuildRootDescriptor, T extends BuildTarget<R>> {
void processDirtyFiles(@NotNull FileProcessor<R, T> processor) throws IOException;
boolean hasDirtyFiles() throws IOException;
boolean hasRemovedFiles();
@NotNull
@@ -15,13 +15,17 @@
*/
package org.jetbrains.jps.builders.impl;
import com.intellij.openapi.util.Ref;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.builders.BuildRootDescriptor;
import org.jetbrains.jps.builders.BuildTarget;
import org.jetbrains.jps.builders.DirtyFilesHolder;
import org.jetbrains.jps.builders.FileProcessor;
import org.jetbrains.jps.incremental.CompileContext;
import org.jetbrains.jps.incremental.Utils;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
@@ -36,6 +40,19 @@ public abstract class DirtyFilesHolderBase<R extends BuildRootDescriptor, T exte
myContext = context;
}
@Override
public boolean hasDirtyFiles() throws IOException {
final Ref<Boolean> hasDirtyFiles = Ref.create(false);
processDirtyFiles(new FileProcessor<R, T>() {
@Override
public boolean apply(T target, File file, R root) throws IOException {
hasDirtyFiles.set(true);
return false;
}
});
return hasDirtyFiles.get();
}
@Override
public boolean hasRemovedFiles() {
Map<BuildTarget<?>, Collection<String>> map = Utils.REMOVED_SOURCES_KEY.get(myContext);
@@ -38,7 +38,6 @@ import org.jetbrains.jps.android.model.JpsAndroidSdkProperties;
import org.jetbrains.jps.builders.BuildOutputConsumer;
import org.jetbrains.jps.builders.BuildRootDescriptor;
import org.jetbrains.jps.builders.DirtyFilesHolder;
import org.jetbrains.jps.builders.FileProcessor;
import org.jetbrains.jps.cmdline.ClasspathBootstrap;
import org.jetbrains.jps.incremental.CompileContext;
import org.jetbrains.jps.incremental.ExternalProcessUtil;
@@ -77,19 +76,9 @@ public class AndroidDexBuilder extends TargetBuilder<BuildRootDescriptor, Androi
if (AndroidJpsUtil.isLightBuild(context)) {
return;
}
final boolean[] hasDirtyFiles = {false};
holder.processDirtyFiles(new FileProcessor<BuildRootDescriptor, AndroidDexBuildTarget>() {
@Override
public boolean apply(AndroidDexBuildTarget target, File file, BuildRootDescriptor root) throws IOException {
assert target == buildTarget;
hasDirtyFiles[0] = true;
return false;
}
});
try {
if (!doDexBuild(buildTarget, context, hasDirtyFiles[0])) {
if (!doDexBuild(buildTarget, context, holder.hasDirtyFiles())) {
throw new ProjectBuildException();
}
}