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