check cancelled status while waiting for constant search results

This commit is contained in:
Eugene Zhuravlev
2012-07-10 16:52:15 +02:00
parent 027859737c
commit 4b9f0c978f
@@ -669,6 +669,10 @@ final class BuildSession implements Runnable, CanceledStatus {
}
private class ConstantSearch implements Callbacks.ConstantAffectionResolver {
private ConstantSearch() {
}
@Nullable @Override
public Future<Callbacks.ConstantAffection> request(String ownerClassName, String fieldName, int accessFlags, boolean fieldRemoved, boolean accessChanged) {
final CmdlineRemoteProto.Message.BuilderMessage.ConstantSearchTask.Builder task =
@@ -678,7 +682,7 @@ final class BuildSession implements Runnable, CanceledStatus {
task.setAccessFlags(accessFlags);
task.setIsAccessChanged(accessChanged);
task.setIsFieldRemoved(fieldRemoved);
final ConstantSearchFuture future = new ConstantSearchFuture();
final ConstantSearchFuture future = new ConstantSearchFuture(BuildSession.this);
final ConstantSearchFuture prev = mySearchTasks.put(new Pair<String, String>(ownerClassName, fieldName), future);
if (prev != null) {
prev.setDone();
@@ -694,8 +698,10 @@ final class BuildSession implements Runnable, CanceledStatus {
private static class ConstantSearchFuture extends BasicFuture<Callbacks.ConstantAffection> {
private volatile Callbacks.ConstantAffection myResult = Callbacks.ConstantAffection.EMPTY;
private final CanceledStatus myCanceledStatus;
private ConstantSearchFuture() {
private ConstantSearchFuture(CanceledStatus canceledStatus) {
myCanceledStatus = canceledStatus;
}
public void setResult(final Collection<File> affectedFiles) {
@@ -705,8 +711,16 @@ final class BuildSession implements Runnable, CanceledStatus {
@Override
public Callbacks.ConstantAffection get() throws InterruptedException, ExecutionException {
super.get();
return myResult;
while (true) {
try {
return get(300L, TimeUnit.MILLISECONDS);
}
catch (TimeoutException ignored) {
}
if (myCanceledStatus.isCanceled()) {
return myResult;
}
}
}
@Override