KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > retouche > hints > LazyHintComputation


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.modules.retouche.hints;
21 import java.util.ArrayList JavaDoc;
22 import java.util.LinkedList JavaDoc;
23 import java.util.List JavaDoc;
24 import org.netbeans.api.gsf.CancellableTask;
25 import org.netbeans.api.retouche.source.CompilationInfo;
26 import org.openide.filesystems.FileObject;
27
28 /**
29  * This file is originally from Retouche, the Java Support
30  * infrastructure in NetBeans. I have modified the file as little
31  * as possible to make merging Retouche fixes back as simple as
32  * possible.
33  *
34  *
35  * @author Jan Lahoda
36  */

37 public class LazyHintComputation implements CancellableTask<CompilationInfo> {
38     
39     private FileObject file;
40     
41     /** Creates a new instance of LazyHintComputation */
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 JavaDoc<CreatorBasedLazyFixList> toCompute = new LinkedList JavaDoc<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