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

Unified Diff: pkg/front_end/lib/src/fasta/source/directive_listener.dart

Issue 2889463002: Fixes for review comments. (Closed)
Patch Set: Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: pkg/front_end/lib/src/fasta/source/directive_listener.dart
diff --git a/pkg/front_end/lib/src/fasta/source/directive_listener.dart b/pkg/front_end/lib/src/fasta/source/directive_listener.dart
index ce4709a5a2390c8173dc0a1450757fe4ac08c9a1..8a775887611bb6dc40e2e9141eb5b2cfba0b9cff 100644
--- a/pkg/front_end/lib/src/fasta/source/directive_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/directive_listener.dart
@@ -11,7 +11,6 @@ import '../parser/identifier_context.dart';
import '../parser/listener.dart';
import '../quote.dart';
import '../scanner/token.dart';
-import 'stack_listener.dart';
/// Listener that records imports, exports, and part directives.
///
@@ -21,95 +20,91 @@ import 'stack_listener.dart';
/// any top-level declaration, but we recommend to continue parsing the entire
/// file in order to gracefully handle input errors.
class DirectiveListener extends Listener {
- final Stack _stack = new Stack();
-
/// Export directives with URIs and combinators.
Siggi Cherem (dart-lang) 2017/05/16 21:42:04 Export => Import
scheglov 2017/05/17 00:07:31 Done.
- final List<ImportDirective> imports = <ImportDirective>[];
+ final List<NamespaceDirective> imports = <NamespaceDirective>[];
/// Export directives with URIs and combinators.
- final List<ExportDirective> exports = <ExportDirective>[];
+ final List<NamespaceDirective> exports = <NamespaceDirective>[];
/// Collects URIs that occur on any part directive.
final Set<String> parts = new Set<String>();
- bool _inDirective = false;
+ bool _inPart = false;
+ String _uri;
+ List<NamespaceCombinator> _combinators;
+ List<String> _combinatorNames;
DirectiveListener();
@override
beginExport(_) {
- _inDirective = true;
+ _combinators = <NamespaceCombinator>[];
+ }
+
+ @override
+ void beginHide(Token hideKeyword) {
+ _combinatorNames = <String>[];
}
@override
beginImport(_) {
- _inDirective = true;
+ _combinators = <NamespaceCombinator>[];
}
@override
void beginLiteralString(Token token) {
- if (_inDirective) {
- _push(unescapeString(token.lexeme));
+ if (_combinators != null || _inPart) {
Siggi Cherem (dart-lang) 2017/05/16 21:42:04 let's add a simple getter with this formula: bo
scheglov 2017/05/17 00:07:31 I think the class is small enough to make relation
+ _uri = unescapeString(token.lexeme);
}
}
@override
beginPart(_) {
- _inDirective = true;
+ _inPart = true;
}
@override
- void endCombinators(int count) {
- List<String> names = _popList(count);
- _push(names);
+ void beginShow(Token showKeyword) {
+ _combinatorNames = <String>[];
}
@override
endExport(export, semicolon) {
- List<NamespaceCombinator> combinators = _pop();
- String uri = _pop();
- exports.add(new ExportDirective(uri, combinators));
- _inDirective = false;
+ exports.add(new NamespaceDirective.export(_uri, _combinators));
+ _uri = null;
+ _combinators = null;
}
@override
void endHide(Token hideKeyword) {
- List<String> names = _pop();
- _push(new NamespaceCombinator.hide(names));
- }
-
- @override
- void endIdentifierList(int count) {
- if (_inDirective) {
- _push(_popList(count) ?? <String>[]);
- }
+ _combinators.add(new NamespaceCombinator.hide(_combinatorNames));
+ _combinatorNames = null;
}
@override
endImport(import, deferred, asKeyword, semicolon) {
- List<NamespaceCombinator> combinators = _pop();
- String uri = _pop();
- imports.add(new ImportDirective(uri, combinators));
- _inDirective = false;
+ imports.add(new NamespaceDirective.import(_uri, _combinators));
+ _uri = null;
+ _combinators = null;
}
@override
endPart(part, semicolon) {
- String uri = _pop();
- parts.add(uri);
- _inDirective = false;
+ parts.add(_uri);
+ _uri = null;
+ _inPart = false;
}
@override
void endShow(Token showKeyword) {
- List<String> names = _pop();
- _push(new NamespaceCombinator.show(names));
+ _combinators.add(new NamespaceCombinator.show(_combinatorNames));
+ _combinatorNames = null;
}
@override
void handleIdentifier(Token token, IdentifierContext context) {
- if (_inDirective && context == IdentifierContext.combinator) {
- _push(token.lexeme);
+ if (_combinatorNames != null && context == IdentifierContext.combinator) {
+ _combinatorNames.add(token.lexeme);
}
}
@@ -125,33 +120,6 @@ class DirectiveListener extends Listener {
}
return super.handleUnrecoverableError(token, message);
}
-
- T _pop<T>() {
- var value = _stack.pop() as T;
- return value;
- }
-
- List<T> _popList<T>(int n) {
- return _stack.popList(n);
- }
-
- void _push<T>(T value) {
- _stack.push(value);
- }
-}
-
-class ExportDirective {
- final String uri;
- final List<NamespaceCombinator> combinators;
-
- ExportDirective(this.uri, this.combinators);
-}
-
-class ImportDirective {
- final String uri;
- final List<NamespaceCombinator> combinators;
-
- ImportDirective(this.uri, this.combinators);
}
class NamespaceCombinator {
@@ -166,3 +134,13 @@ class NamespaceCombinator {
: isShow = true,
names = names.toSet();
}
+
+class NamespaceDirective {
+ final bool isImport;
+ final String uri;
+ final List<NamespaceCombinator> combinators;
+
+ NamespaceDirective.export(this.uri, this.combinators) : isImport = false;
+
+ NamespaceDirective.import(this.uri, this.combinators) : isImport = true;
+}
« no previous file with comments | « no previous file | pkg/front_end/lib/src/incremental/file_state.dart » ('j') | pkg/front_end/lib/src/incremental/file_state.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698