Lines 39-44
Link Here
|
39 |
|
39 |
|
40 |
package org.netbeans.modules.parsing.spi; |
40 |
package org.netbeans.modules.parsing.spi; |
41 |
|
41 |
|
|
|
42 |
import java.lang.ref.Reference; |
43 |
import java.lang.ref.WeakReference; |
42 |
import java.util.HashMap; |
44 |
import java.util.HashMap; |
43 |
import java.util.Map; |
45 |
import java.util.Map; |
44 |
|
46 |
|
Lines 79-85
Link Here
|
79 |
*/ |
81 |
*/ |
80 |
int reparseDelay = DEFAULT_REPARSE_DELAY; |
82 |
int reparseDelay = DEFAULT_REPARSE_DELAY; |
81 |
|
83 |
|
82 |
private Source source; |
84 |
private Reference<Source> source; |
83 |
|
85 |
|
84 |
/** |
86 |
/** |
85 |
* This implementations of {@link Scheduler} reschedules all tasks when: |
87 |
* This implementations of {@link Scheduler} reschedules all tasks when: |
Lines 116-123
Link Here
|
116 |
protected final void schedule ( |
118 |
protected final void schedule ( |
117 |
SchedulerEvent event |
119 |
SchedulerEvent event |
118 |
) { |
120 |
) { |
119 |
if (source != null) |
121 |
Reference<Source> obj = source; |
120 |
schedule (source, event); |
122 |
Source s = obj == null ? null : obj.get(); |
|
|
123 |
if (s != null) { |
124 |
schedule(s, event); |
125 |
} |
121 |
} |
126 |
} |
122 |
|
127 |
|
123 |
private RequestProcessor |
128 |
private RequestProcessor |
Lines 141-164
Link Here
|
141 |
if (task != null) |
146 |
if (task != null) |
142 |
task.cancel (); |
147 |
task.cancel (); |
143 |
task = null; |
148 |
task = null; |
144 |
this.source = source; |
149 |
this.source = new WeakReference<Source>(source); |
145 |
//if (task == null) { |
150 |
//if (task == null) { |
146 |
if (requestProcessor == null) |
151 |
if (requestProcessor == null) |
147 |
requestProcessor = new RequestProcessor (); |
152 |
requestProcessor = new RequestProcessor (); |
148 |
task = requestProcessor.create (new Runnable () { |
153 |
task = requestProcessor.create (new Run(this, source, event)); |
149 |
public void run () { |
|
|
150 |
SourceCache cache = SourceAccessor.getINSTANCE ().getCache (source); |
151 |
Map<Class<? extends Scheduler>,SchedulerEvent> events = new HashMap<Class<? extends Scheduler>,SchedulerEvent> (); |
152 |
events.put (Scheduler.this.getClass (), event); |
153 |
SourceAccessor.getINSTANCE ().setSchedulerEvents (source, events); |
154 |
//S ystem.out.println ("\nSchedule tasks (" + Scheduler.this + "):"); |
155 |
cache.scheduleTasks (Scheduler.this.getClass ()); |
156 |
} |
157 |
}); |
158 |
//} |
154 |
//} |
159 |
task.schedule (reparseDelay); |
155 |
task.schedule (reparseDelay); |
160 |
} |
156 |
} |
161 |
|
157 |
|
|
|
158 |
private static final class Run implements Runnable { |
159 |
private final Scheduler scheduler; |
160 |
private SchedulerEvent event; |
161 |
private Source source; |
162 |
|
163 |
private Run(Scheduler aThis, Source source, SchedulerEvent ev) { |
164 |
this.scheduler = aThis; |
165 |
this.source = source; |
166 |
this.event = ev; |
167 |
} |
168 |
|
169 |
|
170 |
public void run() { |
171 |
SourceCache cache = SourceAccessor.getINSTANCE().getCache(source); |
172 |
Map<Class<? extends Scheduler>, SchedulerEvent> events = new HashMap<Class<? extends Scheduler>, SchedulerEvent>(); |
173 |
events.put(scheduler.getClass(), event); |
174 |
SourceAccessor.getINSTANCE().setSchedulerEvents(source, events); |
175 |
//S ystem.out.println ("\nSchedule tasks (" + Scheduler.this + "):"); |
176 |
cache.scheduleTasks(scheduler.getClass()); |
177 |
source = null; |
178 |
} |
179 |
} |
180 |
|
162 |
protected abstract SchedulerEvent createSchedulerEvent (SourceModificationEvent event); |
181 |
protected abstract SchedulerEvent createSchedulerEvent (SourceModificationEvent event); |
163 |
|
182 |
|
164 |
private static boolean notNull (final Iterable<?> it) { |
183 |
private static boolean notNull (final Iterable<?> it) { |