mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
check cancelled status while waiting for constant search results
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user