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

Side by Side Diff: pkg/analyzer-experimental/lib/src/generated/engine.dart

Issue 12253009: Fresh drop of analyzer-experimental. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 10 months 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
(Empty)
1 // This code was auto-generated, is not intended to be edited, and is subject to
2 // significant change. Please see the README file for more information.
3
4 library engine;
5
6 import 'java_core.dart';
7 import 'dart:collection' show HasNextIterator;
8 import 'error.dart';
9 import 'source.dart';
10 import 'scanner.dart' show Token, CharBufferScanner, StringScanner;
11 import 'ast.dart' show CompilationUnit;
12 import 'parser.dart' show Parser;
13 import 'element.dart';
14 import 'resolver.dart' show Namespace, NamespaceBuilder, LibraryResolver;
15
16 /**
17 * The unique instance of the class {@code AnalysisEngine} serves as the entry p oint for the
18 * functionality provided by the analysis engine.
19 */
20 class AnalysisEngine {
Jennifer Messerly 2013/02/13 21:36:54 Can't wait to try using this! Would be nice to hav
21 /**
22 * The unique instance of this class.
23 */
24 static AnalysisEngine _UniqueInstance = new AnalysisEngine();
25 /**
26 * Return the unique instance of this class.
27 * @return the unique instance of this class
28 */
29 static AnalysisEngine get instance => _UniqueInstance;
30 /**
31 * The logger that should receive information about errors within the analysis engine.
32 */
33 Logger _logger = Logger.NULL;
34 /**
35 * Prevent the creation of instances of this class.
36 */
37 AnalysisEngine() : super() {
38 }
39 /**
40 * Create a new context in which analysis can be performed.
41 * @return the analysis context that was created
42 */
43 AnalysisContext createAnalysisContext() => new AnalysisContextImpl();
44 /**
45 * Return the logger that should receive information about errors within the a nalysis engine.
46 * @return the logger that should receive information about errors within the analysis engine
47 */
48 Logger get logger => _logger;
49 /**
50 * Set the logger that should receive information about errors within the anal ysis engine to the
51 * given logger.
52 * @param logger the logger that should receive information about errors withi n the analysis
53 * engine
54 */
55 void set logger(Logger logger2) {
56 this._logger = logger2 == null ? Logger.NULL : logger2;
57 }
58 }
59 /**
60 * The interface {@code AnalysisContext} defines the behavior of objects that re present a context in
61 * which analysis can be performed. The context includes such information as the version of the SDK
62 * being analyzed against as well as the package-root used to resolve 'package:' URI's. This
63 * information is included indirectly through the {@link SourceFactory source fa ctory}.
64 * <p>
65 * Analysis engine allows for having more than one context. This can be used, fo r example, to
66 * perform one analysis based on the state of files on disk and a separate analy sis based on the
67 * state of those files in open editors. It can also be used to perform an analy sis based on a
68 * proposed future state, such as after a refactoring.
69 */
70 abstract class AnalysisContext {
71 /**
72 * Clear any cached information that is dependent on resolution. This method s hould be invoked if
73 * the assumptions used by resolution have changed but the contents of the fil e have not changed.
74 * Use {@link #sourceChanged(Source)} and {@link #sourcesDeleted(SourceContain er)} to indicate
75 * when the contents of a file or files have changed.
76 */
77 void clearResolution();
78 /**
79 * Call this method when this context is no longer going to be used. At this p oint, the receiver
80 * may choose to push some of its information back into the global cache for c onsumption by
81 * another context for performance.
82 */
83 void discard();
84 /**
85 * Create a new context in which analysis can be performed. Any sources in the specified directory
86 * in the receiver will be removed from the receiver and added to the newly cr eated context.
87 * @param directory the directory (not {@code null}) containing sources that s hould be removed
88 * from the receiver and added to the returned context
89 * @return the analysis context that was created (not {@code null})
90 */
91 AnalysisContext extractAnalysisContext(SourceContainer container);
92 /**
93 * Answer the collection of sources that have been added to the receiver via{@ link #sourceAvailable(Source)} and not removed from the receiver via{@link #sour ceDeleted(Source)} or {@link #sourcesDeleted(SourceContainer)}.
94 * @return a collection of sources (not {@code null}, contains no {@code null} s)
95 */
96 Collection<Source> get availableSources;
97 /**
98 * Return the element referenced by the given location.
99 * @param location the reference describing the element to be returned
100 * @return the element referenced by the given location
101 */
102 Element getElement(ElementLocation location);
103 /**
104 * Return an array containing all of the errors associated with the given sour ce.
105 * @param source the source whose errors are to be returned
106 * @return all of the errors associated with the given source
107 * @throws AnalysisException if the errors could not be determined because the analysis could not
108 * be performed
109 */
110 List<AnalysisError> getErrors(Source source);
111 /**
112 * Parse and build an element model for the HTML file defined by the given sou rce.
113 * @param source the source defining the HTML file whose element model is to b e returned
114 * @return the element model corresponding to the HTML file defined by the giv en source
115 */
116 HtmlElement getHtmlElement(Source source);
117 /**
118 * Return the kind of the given source if it is already known, or {@code null} if the kind is not
119 * already known.
120 * @param source the source whose kind is to be returned
121 * @return the kind of the given source
122 * @see #getOrComputeKindOf(Source)
123 */
124 SourceKind getKnownKindOf(Source source);
125 /**
126 * Return the element model corresponding to the library defined by the given source. If the
127 * element model does not yet exist it will be created. The process of creatin g an element model
128 * for a library can long-running, depending on the size of the library and th e number of
129 * libraries that are imported into it that also need to have a model built fo r them.
130 * @param source the source defining the library whose element model is to be returned
131 * @return the element model corresponding to the library defined by the given source or{@code null} if the element model could not be determined because the analysis could
132 * not be performed
133 */
134 LibraryElement getLibraryElement(Source source);
135 /**
136 * Return the element model corresponding to the library defined by the given source, or{@code null} if the element model does not yet exist.
137 * @param source the source defining the library whose element model is to be returned
138 * @return the element model corresponding to the library defined by the given source
139 */
140 LibraryElement getLibraryElementOrNull(Source source);
141 /**
142 * Return the kind of the given source, computing it's kind if it is not alrea dy known.
143 * @param source the source whose kind is to be returned
144 * @return the kind of the given source
145 * @see #getKnownKindOf(Source)
146 */
147 SourceKind getOrComputeKindOf(Source source);
148 /**
149 * Return an array containing all of the parsing errors associated with the gi ven source.
150 * @param source the source whose errors are to be returned
151 * @return all of the parsing errors associated with the given source
152 * @throws AnalysisException if the errors could not be determined because the analysis could not
153 * be performed
154 */
155 List<AnalysisError> getParsingErrors(Source source);
156 /**
157 * Return an array containing all of the resolution errors associated with the given source.
158 * @param source the source whose errors are to be returned
159 * @return all of the resolution errors associated with the given source
160 * @throws AnalysisException if the errors could not be determined because the analysis could not
161 * be performed
162 */
163 List<AnalysisError> getResolutionErrors(Source source);
164 /**
165 * Return the source factory used to create the sources that can be analyzed i n this context.
166 * @return the source factory used to create the sources that can be analyzed in this context
167 */
168 SourceFactory get sourceFactory;
169 /**
170 * Add the sources contained in the specified context to the receiver's collec tion of sources.
171 * This method is called when an existing context's pubspec has been removed, and the contained
172 * sources should be reanalyzed as part of the receiver.
173 * @param context the context being merged (not {@code null})
174 */
175 void mergeAnalysisContext(AnalysisContext context);
176 /**
177 * Parse a single source to produce an AST structure. The resulting AST struct ure may or may not
178 * be resolved, and may have a slightly different structure depending upon whe ther it is resolved.
179 * @param source the source to be parsed
180 * @return the AST structure representing the content of the source
181 * @throws AnalysisException if the analysis could not be performed
182 */
183 CompilationUnit parse(Source source);
184 /**
185 * Parse and resolve a single source within the given context to produce a ful ly resolved AST.
186 * @param source the source to be parsed and resolved
187 * @param library the library defining the context in which the source file is to be resolved
188 * @return the result of resolving the AST structure representing the content of the source
189 * @throws AnalysisException if the analysis could not be performed
190 */
191 CompilationUnit resolve(Source source, LibraryElement library);
192 /**
193 * Scan a single source to produce a token stream.
194 * @param source the source to be scanned
195 * @param errorListener the listener to which errors should be reported
196 * @return the head of the token stream representing the content of the source
197 * @throws AnalysisException if the analysis could not be performed
198 */
199 Token scan(Source source, AnalysisErrorListener errorListener);
200 /**
201 * Set the source factory used to create the sources that can be analyzed in t his context to the
202 * given source factory.
203 * @param sourceFactory the source factory used to create the sources that can be analyzed in this
204 * context
205 */
206 void set sourceFactory(SourceFactory sourceFactory4);
207 /**
208 * Cache the fact that content for the given source is now available, is of in terest to the
209 * client, and should be analyzed. Do not modify or discard any information ab out this source that
210 * is already cached.
211 * @param source the source that is now available
212 */
213 void sourceAvailable(Source source);
214 /**
215 * Respond to the fact that the content of the given source has changed by rem oving any cached
216 * information that might now be out-of-date.
217 * @param source the source whose content has changed
218 */
219 void sourceChanged(Source source);
220 /**
221 * Respond to the fact that the given source has been deleted and should no lo nger be analyzed by
222 * removing any cached information that might now be out-of-date.
223 * @param source the source that was deleted
224 */
225 void sourceDeleted(Source source);
226 /**
227 * Discard cached information for all files in the specified source container.
228 * @param container the source container that was deleted (not {@code null})
229 */
230 void sourcesDeleted(SourceContainer container);
231 /**
232 * Given a collection of sources with content that has changed, return an {@li nk Iterable}identifying the sources that need to be resolved.
233 * @param changedSources an array of sources (not {@code null}, contains no {@ code null}s)
234 * @return An iterable returning the sources to be resolved
235 */
236 Iterable<Source> sourcesToResolve(List<Source> changedSources);
237 }
238 /**
239 * Instances of the class {@code AnalysisException} represent an exception that occurred during the
240 * analysis of one or more sources.
241 */
242 class AnalysisException extends JavaException {
243 /**
244 * Initialize a newly created exception.
245 */
246 AnalysisException() : super() {
247 _jtd_constructor_117_impl();
248 }
249 _jtd_constructor_117_impl() {
250 }
251 /**
252 * Initialize a newly created exception to have the given message.
253 * @param message the message associated with the exception
254 */
255 AnalysisException.con1(String message) : super(message) {
256 _jtd_constructor_118_impl(message);
257 }
258 _jtd_constructor_118_impl(String message) {
259 }
260 /**
261 * Initialize a newly created exception to have the given message and cause.
262 * @param message the message associated with the exception
263 * @param cause the underlying exception that caused this exception
264 */
265 AnalysisException.con2(String message, Exception cause) : super(message, cause ) {
266 _jtd_constructor_119_impl(message, cause);
267 }
268 _jtd_constructor_119_impl(String message, Exception cause) {
269 }
270 /**
271 * Initialize a newly created exception to have the given cause.
272 * @param cause the underlying exception that caused this exception
273 */
274 AnalysisException.con3(Exception cause) : super.withCause(cause) {
275 _jtd_constructor_120_impl(cause);
276 }
277 _jtd_constructor_120_impl(Exception cause) {
278 }
279 }
280 /**
281 * Instances of the class {@code AnalysisContextImpl} implement an {@link Analys isContext analysis
282 * context}.
283 */
284 class AnalysisContextImpl implements AnalysisContext {
285 /**
286 * The source factory used to create the sources that can be analyzed in this context.
287 */
288 SourceFactory _sourceFactory;
289 /**
290 * A cache mapping sources to the compilation units that were produced for the contents of the
291 * source.
292 */
293 Map<Source, CompilationUnit> _parseCache = new Map<Source, CompilationUnit>();
294 /**
295 * A cache mapping sources (of the defining compilation units of libraries) to the library
296 * elements for those libraries.
297 */
298 Map<Source, LibraryElement> _libraryElementCache = new Map<Source, LibraryElem ent>();
299 /**
300 * A cache mapping sources (of the defining compilation units of libraries) to the public
301 * namespace for that library.
302 */
303 Map<Source, Namespace> _publicNamespaceCache = new Map<Source, Namespace>();
304 /**
305 * A cache of the available sources of interest to the client. Sources are add ed to this
306 * collection via {@link #sourceAvailable(Source)} and removed from this colle ction via{@link #sourceDeleted(Source)} and {@link #directoryDeleted(File)}
307 */
308 Set<Source> _availableSources = new Set<Source>();
309 /**
310 * The object used to synchronize access to all of the caches.
311 */
312 Object _cacheLock = new Object();
313 /**
314 * The suffix used by sources that contain Dart.
315 */
316 static String _DART_SUFFIX = ".dart";
317 /**
318 * The suffix used by sources that contain HTML.
319 */
320 static String _HTML_SUFFIX = ".html";
321 /**
322 * Initialize a newly created analysis context.
323 */
324 AnalysisContextImpl() : super() {
325 }
326 void clearResolution() {
327 {
328 _parseCache.clear();
329 _libraryElementCache.clear();
330 _publicNamespaceCache.clear();
331 }
332 }
333 void discard() {
334 {
335 _parseCache.clear();
336 _libraryElementCache.clear();
337 _publicNamespaceCache.clear();
338 _availableSources.clear();
339 }
340 }
341 AnalysisContext extractAnalysisContext(SourceContainer container) {
342 AnalysisContext newContext = AnalysisEngine.instance.createAnalysisContext() ;
343 {
344 JavaIterator<Source> iter = new JavaIterator(_availableSources);
345 while (iter.hasNext) {
346 Source source = iter.next();
347 if (container.contains(source)) {
348 iter.remove();
349 newContext.sourceAvailable(source);
350 }
351 }
352 }
353 return newContext;
354 }
355 Collection<Source> get availableSources {
356 {
357 return new List<Source>.from(_availableSources);
358 }
359 }
360 Element getElement(ElementLocation location) {
361 throw new UnsupportedOperationException();
362 }
363 List<AnalysisError> getErrors(Source source) {
364 throw new UnsupportedOperationException();
365 }
366 HtmlElement getHtmlElement(Source source) {
367 throw new UnsupportedOperationException();
368 }
369 SourceKind getKnownKindOf(Source source) {
370 if (source.fullName.endsWith(_HTML_SUFFIX)) {
371 return SourceKind.HTML;
372 }
373 if (!source.fullName.endsWith(_DART_SUFFIX)) {
374 return SourceKind.UNKNOWN;
375 }
376 {
377 if (_libraryElementCache.containsKey(source)) {
378 return SourceKind.LIBRARY;
379 }
380 CompilationUnit unit = _parseCache[source];
381 if (unit != null && hasPartOfDirective(unit)) {
382 return SourceKind.PART;
383 }
384 }
385 return null;
386 }
387 LibraryElement getLibraryElement(Source source) {
388 {
389 LibraryElement element = _libraryElementCache[source];
390 if (element == null) {
391 RecordingErrorListener listener = new RecordingErrorListener();
392 LibraryResolver resolver = new LibraryResolver(this, listener);
393 try {
394 element = resolver.resolveLibrary(source, true);
395 } on AnalysisException catch (exception) {
396 AnalysisEngine.instance.logger.logError2("Could not resolve the librar y ${source.fullName}", exception);
397 }
398 }
399 return element;
400 }
401 }
402 /**
403 * Return the element model corresponding to the library defined by the given source, or{@code null} if the element model does not yet exist.
404 * @param source the source defining the library whose element model is to be returned
405 * @return the element model corresponding to the library defined by the given source
406 */
407 LibraryElement getLibraryElementOrNull(Source source) {
408 {
409 return _libraryElementCache[source];
410 }
411 }
412 SourceKind getOrComputeKindOf(Source source) {
413 SourceKind kind = getKnownKindOf(source);
414 if (kind != null) {
415 return kind;
416 }
417 try {
418 if (hasPartOfDirective(parse(source))) {
419 return SourceKind.PART;
420 }
421 } on AnalysisException catch (exception) {
422 return SourceKind.UNKNOWN;
423 }
424 return SourceKind.LIBRARY;
425 }
426 List<AnalysisError> getParsingErrors(Source source) {
427 throw new UnsupportedOperationException();
428 }
429 /**
430 * Return a namespace containing mappings for all of the public names defined by the given
431 * library.
432 * @param library the library whose public namespace is to be returned
433 * @return the public namespace of the given library
434 */
435 Namespace getPublicNamespace(LibraryElement library) {
436 Source source7 = library.definingCompilationUnit.source;
437 {
438 Namespace namespace = _publicNamespaceCache[source7];
439 if (namespace == null) {
440 NamespaceBuilder builder = new NamespaceBuilder();
441 namespace = builder.createPublicNamespace(library);
442 _publicNamespaceCache[source7] = namespace;
443 }
444 return namespace;
445 }
446 }
447 /**
448 * Return a namespace containing mappings for all of the public names defined by the library
449 * defined by the given source.
450 * @param source the source defining the library whose public namespace is to be returned
451 * @return the public namespace corresponding to the library defined by the gi ven source
452 */
453 Namespace getPublicNamespace2(Source source) {
454 {
455 Namespace namespace = _publicNamespaceCache[source];
456 if (namespace == null) {
457 LibraryElement library = getLibraryElement(source);
458 if (library == null) {
459 return null;
460 }
461 NamespaceBuilder builder = new NamespaceBuilder();
462 namespace = builder.createPublicNamespace(library);
463 _publicNamespaceCache[source] = namespace;
464 }
465 return namespace;
466 }
467 }
468 List<AnalysisError> getResolutionErrors(Source source) {
469 throw new UnsupportedOperationException();
470 }
471 SourceFactory get sourceFactory => _sourceFactory;
472 void mergeAnalysisContext(AnalysisContext context) {
473 {
474 _availableSources.addAll(context.availableSources);
475 }
476 }
477 CompilationUnit parse(Source source) {
478 {
479 CompilationUnit unit = _parseCache[source];
480 if (unit == null) {
481 RecordingErrorListener errorListener = new RecordingErrorListener();
482 Token token = scan(source, errorListener);
483 Parser parser = new Parser(source, errorListener);
484 unit = parser.parseCompilationUnit(token);
485 unit.parsingErrors = errorListener.errors;
486 _parseCache[source] = unit;
487 }
488 return unit;
489 }
490 }
491 CompilationUnit parse2(Source source, AnalysisErrorListener errorListener) {
492 {
493 CompilationUnit unit = _parseCache[source];
494 if (unit == null) {
495 Token token = scan(source, errorListener);
496 Parser parser = new Parser(source, errorListener);
497 unit = parser.parseCompilationUnit(token);
498 _parseCache[source] = unit;
499 }
500 return unit;
501 }
502 }
503 /**
504 * Given a table mapping the source for the libraries represented by the corre sponding elements to
505 * the elements representing the libraries, record those mappings.
506 * @param elementMap a table mapping the source for the libraries represented by the elements to
507 * the elements representing the libraries
508 */
509 void recordLibraryElements(Map<Source, LibraryElement> elementMap) {
510 {
511 javaMapPutAll(_libraryElementCache, elementMap);
512 }
513 }
514 CompilationUnit resolve(Source source, LibraryElement library) => parse(source );
515 Token scan(Source source, AnalysisErrorListener errorListener) {
516 List<Token> tokens = new List<Token>.fixedLength(1);
517 Source_ContentReceiver receiver = new Source_ContentReceiver_1(source, error Listener, tokens);
518 try {
519 source.getContents(receiver);
520 } on JavaException catch (exception) {
521 }
522 return tokens[0];
523 }
524 void set sourceFactory(SourceFactory sourceFactory2) {
525 this._sourceFactory = sourceFactory2;
526 }
527 void sourceAvailable(Source source) {
528 {
529 javaSetAdd(_availableSources, source);
530 }
531 }
532 void sourceChanged(Source source) {
533 {
534 _parseCache.remove(source);
535 _libraryElementCache.remove(source);
536 _publicNamespaceCache.remove(source);
537 }
538 }
539 void sourceDeleted(Source source) {
540 {
541 _availableSources.remove(source);
542 sourceChanged(source);
543 }
544 }
545 void sourcesDeleted(SourceContainer container) {
546 {
547 _parseCache.clear();
548 _libraryElementCache.clear();
549 _publicNamespaceCache.clear();
550 JavaIterator<Source> iter = new JavaIterator(_availableSources);
551 while (iter.hasNext) {
552 if (container.contains(iter.next())) {
553 iter.remove();
554 }
555 }
556 }
557 }
558 Iterable<Source> sourcesToResolve(List<Source> changedSources) => JavaArrays.a sList(changedSources);
559 /**
560 * Return {@code true} if the given compilation unit has a part-of directive.
561 * @param unit the compilation unit being tested
562 * @return {@code true} if the compilation unit has a part-of directive
563 */
564 bool hasPartOfDirective(CompilationUnit unit) {
565 for (Directive directive in unit.directives) {
566 if (directive is PartOfDirective) {
567 return true;
568 }
569 }
570 return false;
571 }
572 }
573 class Source_ContentReceiver_1 implements Source_ContentReceiver {
574 Source source;
575 AnalysisErrorListener errorListener;
576 List<Token> tokens;
577 Source_ContentReceiver_1(this.source, this.errorListener, this.tokens);
578 accept(CharBuffer contents) {
579 CharBufferScanner scanner = new CharBufferScanner(source, contents, errorLis tener);
580 tokens[0] = scanner.tokenize();
581 }
582 void accept2(String contents) {
583 StringScanner scanner = new StringScanner(source, contents, errorListener);
584 tokens[0] = scanner.tokenize();
585 }
586 }
587 /**
588 * Instances of the class {@code RecordingErrorListener} implement an error list ener that will
589 * record the errors that are reported to it in a way that is appropriate for ca ching those errors
590 * within an analysis context.
591 */
592 class RecordingErrorListener implements AnalysisErrorListener {
593 /**
594 * A list containing the errors that were collected.
595 */
596 List<AnalysisError> _errors = null;
597 /**
598 * Answer the errors collected by the listener.
599 * @return an array of errors (not {@code null}, contains no {@code null}s)
600 */
601 List<AnalysisError> get errors => _errors != null ? new List.from(_errors) : A nalysisError.NO_ERRORS;
602 void onError(AnalysisError event) {
603 if (_errors == null) {
604 _errors = new List<AnalysisError>();
605 }
606 _errors.add(event);
607 }
608 }
609 /**
610 * The interface {@code Logger} defines the behavior of objects that can be used to receive
611 * information about errors within the analysis engine. Implementations usually write this
612 * information to a file, but can also record the information for later use (suc h as during testing)
613 * or even ignore the information.
614 */
615 abstract class Logger {
616 static Logger NULL = new Logger_NullLogger();
617 /**
618 * Log the given message as an error.
619 * @param message an explanation of why the error occurred or what it means
620 */
621 void logError(String message);
622 /**
623 * Log the given exception as one representing an error.
624 * @param message an explanation of why the error occurred or what it means
625 * @param exception the exception being logged
626 */
627 void logError2(String message, Exception exception);
628 /**
629 * Log the given exception as one representing an error.
630 * @param exception the exception being logged
631 */
632 void logError3(Exception exception);
633 /**
634 * Log the given informational message.
635 * @param message an explanation of why the error occurred or what it means
636 * @param exception the exception being logged
637 */
638 void logInformation(String message);
639 /**
640 * Log the given exception as one representing an informational message.
641 * @param message an explanation of why the error occurred or what it means
642 * @param exception the exception being logged
643 */
644 void logInformation2(String message, Exception exception);
645 }
646 /**
647 * Implementation of {@link Logger} that does nothing.
648 */
649 class Logger_NullLogger implements Logger {
650 void logError(String message) {
651 }
652 void logError2(String message, Exception exception) {
653 }
654 void logError3(Exception exception) {
655 }
656 void logInformation(String message) {
657 }
658 void logInformation2(String message, Exception exception) {
659 }
660 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698