1 19 20 package org.netbeans.modules.java.hints; 21 import java.util.ArrayList ; 22 import java.util.LinkedList ; 23 import java.util.List ; 24 import org.netbeans.api.java.source.CancellableTask; 25 import org.netbeans.api.java.source.CompilationInfo; 26 import org.openide.filesystems.FileObject; 27 28 32 public class LazyHintComputation implements CancellableTask<CompilationInfo> { 33 34 private FileObject file; 35 36 37 public LazyHintComputation(FileObject file) { 38 this.file = file; 39 } 40 41 public synchronized void cancel() { 42 cancelled = true; 43 if (delegate != null) { 44 delegate.cancel(); 45 } 46 } 47 48 private synchronized void setDelegate(CreatorBasedLazyFixList delegate) { 49 this.delegate = delegate; 50 } 51 52 private boolean cancelled; 53 private CreatorBasedLazyFixList delegate; 54 private synchronized boolean isCancelled() { 55 return cancelled; 56 } 57 58 private synchronized void resume() { 59 cancelled = false; 60 } 61 62 public void run(CompilationInfo info) { 63 resume(); 64 65 boolean cancelled = false; 66 67 List <CreatorBasedLazyFixList> toCompute = new LinkedList <CreatorBasedLazyFixList>(); 68 69 try { 70 toCompute.addAll(LazyHintComputationFactory.getAndClearToCompute(file)); 71 72 if (isCancelled()) { 73 cancelled = true; 74 return; 75 } 76 77 while (!toCompute.isEmpty()) { 78 if (isCancelled()) { 79 cancelled = true; 80 return; 81 } 82 83 CreatorBasedLazyFixList l = toCompute.remove(0); 84 85 setDelegate(l); 86 l.compute(info); 87 setDelegate(null); 88 89 if (isCancelled()) { 90 toCompute.add(0, l); 91 cancelled = true; 92 return; 93 } 94 } 95 } finally { 96 if (cancelled && !toCompute.isEmpty()) { 97 for (CreatorBasedLazyFixList l : toCompute) { 98 LazyHintComputationFactory.addToCompute(file, l); 99 } 100 } 101 } 102 } 103 104 } 105 | Popular Tags |