Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(693)

Side by Side Diff: dart/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/dart/DartReconcilingStrategy.java

Issue 59073003: Version 0.8.10.4 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012, the Dart project authors. 2 * Copyright (c) 2012, the Dart project authors.
3 * 3 *
4 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not u se this file except 4 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not u se this file except
5 * in compliance with the License. You may obtain a copy of the License at 5 * in compliance with the License. You may obtain a copy of the License at
6 * 6 *
7 * http://www.eclipse.org/legal/epl-v10.html 7 * http://www.eclipse.org/legal/epl-v10.html
8 * 8 *
9 * Unless required by applicable law or agreed to in writing, software distribut ed under the License 9 * Unless required by applicable law or agreed to in writing, software distribut ed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY K IND, either express 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY K IND, either express
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 * not be {@code null}. 75 * not be {@code null}.
76 */ 76 */
77 private IDocument document; 77 private IDocument document;
78 78
79 /** 79 /**
80 * Synchronize against this field before accessing {@link #dirtyRegion} 80 * Synchronize against this field before accessing {@link #dirtyRegion}
81 */ 81 */
82 private final Object lock = new Object(); 82 private final Object lock = new Object();
83 83
84 /** 84 /**
85 * The region of source that has changed, which may be empty. Synchronize agai nst {@link #lock} 85 * The region of source that has changed and needs to be reconciled, or empty if analysis of this
86 * before accessing this field. 86 * file is up to date, or {@code null} if the entire file needs to be reconcil ed. Synchronize
87 * against {@link #lock} before accessing this field.
87 */ 88 */
88 private DartReconcilingRegion dirtyRegion = DartReconcilingRegion.EMPTY; 89 private DartReconcilingRegion dirtyRegion = DartReconcilingRegion.EMPTY;
89 90
90 /** 91 /**
91 * Listen for analysis results for the source being edited and update the edit or. 92 * Listen for analysis results for the source being edited and update the edit or.
92 */ 93 */
93 private final AnalysisListener analysisListener = new AnalysisListener() { 94 private final AnalysisListener analysisListener = new AnalysisListener() {
94 95
95 @Override 96 @Override
96 public void complete(AnalysisEvent event) { 97 public void complete(AnalysisEvent event) {
(...skipping 21 matching lines...) Expand all
118 public void documentAboutToBeChanged(DocumentEvent event) { 119 public void documentAboutToBeChanged(DocumentEvent event) {
119 } 120 }
120 121
121 @Override 122 @Override
122 public void documentChanged(DocumentEvent event) { 123 public void documentChanged(DocumentEvent event) {
123 124
124 // Record the source region that has changed 125 // Record the source region that has changed
125 String newText = event.getText(); 126 String newText = event.getText();
126 int newLength = newText != null ? newText.length() : 0; 127 int newLength = newText != null ? newText.length() : 0;
127 synchronized (lock) { 128 synchronized (lock) {
128 dirtyRegion = dirtyRegion.add(event.getOffset(), event.getLength(), newL ength); 129 if (dirtyRegion != null) {
130 dirtyRegion = dirtyRegion.add(event.getOffset(), event.getLength(), ne wLength);
131 }
129 } 132 }
130 editor.applyResolvedUnit(null); 133 editor.applyResolvedUnit(null);
131 134
132 // Start analysis immediately if "." pressed to improve code completion re sponse 135 // Start analysis immediately if "." pressed to improve code completion re sponse
133 if (".".equals(newText)) { 136 if (".".endsWith(newText)) {
134 reconcile(); 137 reconcile();
135 } 138 }
136 } 139 }
137 }; 140 };
138 141
139 /** 142 /**
140 * Construct a new instance for the specified editor. 143 * Construct a new instance for the specified editor.
141 * 144 *
142 * @param editor the editor (not {@code null}) 145 * @param editor the editor (not {@code null})
143 */ 146 */
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 } 216 }
214 } 217 }
215 218
216 /** 219 /**
217 * Activates reconciling of the current dirty region. 220 * Activates reconciling of the current dirty region.
218 */ 221 */
219 public void reconcile() { 222 public void reconcile() {
220 InstrumentationBuilder instrumentation = Instrumentation.builder("DartReconc ilingStrategy-reconcile"); 223 InstrumentationBuilder instrumentation = Instrumentation.builder("DartReconc ilingStrategy-reconcile");
221 try { 224 try {
222 instrumentation.data("Name", editor.getTitle()); 225 instrumentation.data("Name", editor.getTitle());
223 DartReconcilingRegion r; 226 DartReconcilingRegion region;
224 synchronized (lock) { 227 synchronized (lock) {
225 if (dirtyRegion.isEmpty()) { 228 region = dirtyRegion;
226 return;
227 }
228 r = dirtyRegion;
229 dirtyRegion = DartReconcilingRegion.EMPTY; 229 dirtyRegion = DartReconcilingRegion.EMPTY;
230 } 230 }
231 instrumentation.data("Offset", r.getOffset()); 231 if (region == null) {
232 instrumentation.data("OldLength", r.getOldLength()); 232 String code = document.get();
233 instrumentation.data("NewLength", r.getNewLength()); 233 instrumentation.data("Length", code.length());
234 sourceChanged(document.get(), r.getOffset(), r.getOldLength(), r.getNewLen gth()); 234 sourceChanged(code);
235 performAnalysisInBackground(); 235 performAnalysisInBackground();
236 } else if (!region.isEmpty()) {
237 instrumentation.data("Offset", region.getOffset());
238 instrumentation.data("OldLength", region.getOldLength());
239 instrumentation.data("NewLength", region.getNewLength());
240 sourceChanged(
241 document.get(),
242 region.getOffset(),
243 region.getOldLength(),
244 region.getNewLength());
245 performAnalysisInBackground();
246 }
236 } finally { 247 } finally {
237 instrumentation.log(); 248 instrumentation.log();
238 } 249 }
239 } 250 }
240 251
241 @Override 252 @Override
242 public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) { 253 public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) {
243 reconcile(); 254 reconcile();
244 } 255 }
245 256
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 } 349 }
339 350
340 /** 351 /**
341 * Apply analysis results only if there are no pending source changes. 352 * Apply analysis results only if there are no pending source changes.
342 */ 353 */
343 private void applyAnalysisResult(CompilationUnit unit) { 354 private void applyAnalysisResult(CompilationUnit unit) {
344 if (unit == null) { 355 if (unit == null) {
345 return; 356 return;
346 } 357 }
347 synchronized (lock) { 358 synchronized (lock) {
348 if (!dirtyRegion.isEmpty()) { 359 if (dirtyRegion == null || !dirtyRegion.isEmpty()) {
349 return; 360 return;
350 } 361 }
351 } 362 }
352 editor.applyResolvedUnit(unit); 363 editor.applyResolvedUnit(unit);
353 } 364 }
354 365
355 /** 366 /**
356 * Get the resolved compilation unit from the editor's analysis context and ap ply that unit. 367 * Get the resolved compilation unit from the editor's analysis context and ap ply that unit.
357 * 368 *
358 * @return {@code true} if a resolved unit was obtained and applied 369 * @return {@code true} if a resolved unit was obtained and applied
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 * @param newLength the number of characters in the replacement text 421 * @param newLength the number of characters in the replacement text
411 */ 422 */
412 private void sourceChanged(String code, int offset, int oldLength, int newLeng th) { 423 private void sourceChanged(String code, int offset, int oldLength, int newLeng th) {
413 AnalysisContext context = editor.getInputAnalysisContext(); 424 AnalysisContext context = editor.getInputAnalysisContext();
414 Source source = editor.getInputSource(); 425 Source source = editor.getInputSource();
415 if (context != null && source != null) { 426 if (context != null && source != null) {
416 context.setChangedContents(source, code, offset, oldLength, newLength); 427 context.setChangedContents(source, code, offset, oldLength, newLength);
417 } 428 }
418 } 429 }
419 } 430 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698