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

Unified Diff: pkg/compiler/lib/src/serialization/modelz.dart

Issue 1335983004: Add ImportElement and ExportElement (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 5 years, 3 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
« no previous file with comments | « pkg/compiler/lib/src/serialization/keys.dart ('k') | pkg/compiler/lib/src/ssa/builder.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/serialization/modelz.dart
diff --git a/pkg/compiler/lib/src/serialization/modelz.dart b/pkg/compiler/lib/src/serialization/modelz.dart
index d9ebd35dd4e224677a09b27c1813998aae75363f..f246736c8a8d7e937cc07d5c04b94a618608582e 100644
--- a/pkg/compiler/lib/src/serialization/modelz.dart
+++ b/pkg/compiler/lib/src/serialization/modelz.dart
@@ -27,16 +27,12 @@ import '../elements/visitor.dart';
import '../io/source_file.dart';
import '../ordered_typeset.dart';
import '../resolution/class_members.dart' as class_members;
-import '../resolution/enum_creator.dart' show
- AstBuilder;
import '../resolution/tree_elements.dart' show
TreeElements;
import '../resolution/scope.dart' show
Scope;
import '../script.dart';
import '../serialization/constant_serialization.dart';
-import '../tokens/precedence_constants.dart' as Precedence show
- SEMICOLON_INFO;
import '../tokens/token.dart' show
Token;
import '../tree/tree.dart';
@@ -375,7 +371,8 @@ class LibraryElementZ extends DeserializedElementZ
Uri _canonicalUri;
CompilationUnitElement _entryCompilationUnit;
Link<CompilationUnitElement> _compilationUnits;
- Link<Element> _exports;
+ List<ImportElement> _imports;
+ List<ExportElement> _exports;
ListedContainer _exportsMap;
ListedContainer _importsMap;
Map<LibraryTag, LibraryElement> _libraryDependencies;
@@ -426,12 +423,12 @@ class LibraryElementZ extends DeserializedElementZ
}
@override
- bool hasLibraryName() {
- return getLibraryName() != '';
+ bool get hasLibraryName {
+ return libraryName != '';
}
@override
- String getLibraryName() {
+ String get libraryName {
return _decoder.getString(Key.LIBRARY_NAME);
}
@@ -439,20 +436,15 @@ class LibraryElementZ extends DeserializedElementZ
bool get exportsHandled => true;
void _ensureExports() {
- if (_exports == null) {
- _exportsMap = new ListedContainer(_decoder.getElements(Key.EXPORTS));
- _exports = toLink(_exportsMap.values);
+ if (_exportsMap == null) {
+ _exportsMap = new ListedContainer(_decoder.getElements(Key.EXPORT_SCOPE));
}
}
- Link<Element> get exports {
- _ensureExports();
- return _exports;
- }
-
@override
void forEachExport(f(Element element)) {
- exports.forEach(f);
+ _ensureExports();
+ _exportsMap.forEach(f);
}
@override
@@ -470,53 +462,6 @@ class LibraryElementZ extends DeserializedElementZ
return localLookup(elementName);
}
- void _ensureLibraryDependencies() {
- if (_libraryDependencies == null) {
- _libraryDependencies = <LibraryTag, LibraryElement>{};
- ListDecoder tags = _decoder.getList(Key.TAGS);
- AstBuilder builder = new AstBuilder(0);
- for (int i = 0; i < tags.length; i++) {
- ObjectDecoder dependency = tags.getObject(i);
- String kind = dependency.getString(Key.KIND);
- LibraryElement library = dependency.getElement(Key.LIBRARY);
- // TODO(johnniwinther): Add `ImportElement` and `ExportElement` to the
- // element model to avoid hacking up nodes.
- if (kind == 'import') {
- Import tag = new Import(
- builder.keywordToken('import'),
- builder.literalString(library.canonicalUri.toString())
- ..getEndToken().next =
- builder.symbolToken(Precedence.SEMICOLON_INFO),
- null, // prefix
- null, // combinators
- null, // metadata
- isDeferred: false);
- _libraryDependencies[tag] = library;
- } else if (kind == 'export') {
- Export tag = new Export(
- builder.keywordToken('export'),
- builder.literalString(library.canonicalUri.toString())
- ..getEndToken().next =
- builder.symbolToken(Precedence.SEMICOLON_INFO),
- null, // combinators
- null); // metadata
- _libraryDependencies[tag] = library;
- }
- }
- }
- }
-
- @override
- Iterable<LibraryTag> get tags {
- _ensureLibraryDependencies();
- return _libraryDependencies.keys;
- }
-
- LibraryElement getLibraryFromTag(LibraryDependency tag) {
- _ensureLibraryDependencies();
- return _libraryDependencies[tag];
- }
-
@override
bool get canUseNative => false;
@@ -525,7 +470,7 @@ class LibraryElementZ extends DeserializedElementZ
void _ensureImports() {
if (_importsMap == null) {
- _importsMap = new ListedContainer(_decoder.getElements(Key.IMPORTS));
+ _importsMap = new ListedContainer(_decoder.getElements(Key.IMPORT_SCOPE));
}
}
@@ -536,14 +481,29 @@ class LibraryElementZ extends DeserializedElementZ
}
@override
- Link<Import> getImportsFor(Element element) => _unsupported('getImportsFor');
-
- @override
- LibraryName get libraryTag => _unsupported('libraryTag');
+ Iterable<ImportElement> getImportsFor(Element element) {
+ return _unsupported('getImportsFor');
+ }
String toString() {
return 'Zlibrary(${canonicalUri})';
}
+
+ @override
+ Iterable<ExportElement> get exports {
+ if (_exports == null) {
+ _exports = _decoder.getElements(Key.EXPORTS, isOptional: true);
+ }
+ return _exports;
+ }
+
+ @override
+ Iterable<ImportElement> get imports {
+ if (_imports == null) {
+ _imports = _decoder.getElements(Key.IMPORTS, isOptional: true);
+ }
+ return _imports;
+ }
}
class ScriptZ implements Script {
@@ -1456,7 +1416,6 @@ class ParameterElementZ extends DeserializedElementZ
MemberElement get memberContext => executableContext.memberContext;
}
-
class InitializingFormalElementZ extends ParameterElementZ
implements InitializingFormalElement {
FieldElement _fieldElement;
@@ -1479,5 +1438,142 @@ class InitializingFormalElementZ extends ParameterElementZ
@override
ElementKind get kind => ElementKind.INITIALIZING_FORMAL;
+}
+
+class ImportElementZ extends DeserializedElementZ
+ with LibraryMemberMixin implements ImportElement {
+ bool _isDeferred;
+ PrefixElement _prefix;
+ LibraryElement _importedLibrary;
+ Uri _uri;
+
+ ImportElementZ(ObjectDecoder decoder)
+ : super(decoder);
+
+ @override
+ String get name => '';
+
+ @override
+ accept(ElementVisitor visitor, arg) => visitor.visitImportElement(this, arg);
+
+ @override
+ ElementKind get kind => ElementKind.IMPORT;
+
+ @override
+ LibraryElement get importedLibrary {
+ if (_importedLibrary == null) {
+ _importedLibrary = _decoder.getElement(Key.LIBRARY_DEPENDENCY);
+ }
+ return _importedLibrary;
+ }
+
+ void _ensurePrefixResolved() {
+ if (_isDeferred == null) {
+ _isDeferred = _decoder.getBool(Key.IS_DEFERRED);
+ _prefix = _decoder.getElement(Key.PREFIX, isOptional: true);
+ }
+ }
+
+ @override
+ bool get isDeferred {
+ _ensurePrefixResolved();
+ return _isDeferred;
+ }
+ @override
+ PrefixElement get prefix {
+ _ensurePrefixResolved();
+ return _prefix;
+ }
+
+ @override
+ Uri get uri {
+ if (_uri == null) {
+ _uri = _decoder.getUri(Key.URI);
+ }
+ return _uri;
+ }
+
+ @override
+ Import get node => _unsupported('node');
+
+ String toString() => 'Z$kind($uri)';
+}
+
+class ExportElementZ extends DeserializedElementZ
+ with LibraryMemberMixin implements ExportElement {
+ LibraryElement _exportedLibrary;
+ Uri _uri;
+
+ ExportElementZ(ObjectDecoder decoder)
+ : super(decoder);
+
+ @override
+ String get name => '';
+
+ @override
+ accept(ElementVisitor visitor, arg) => visitor.visitExportElement(this, arg);
+
+ @override
+ ElementKind get kind => ElementKind.EXPORT;
+
+ @override
+ LibraryElement get exportedLibrary {
+ if (_exportedLibrary == null) {
+ _exportedLibrary = _decoder.getElement(Key.LIBRARY_DEPENDENCY);
+ }
+ return _exportedLibrary;
+ }
+
+ @override
+ Uri get uri {
+ if (_uri == null) {
+ _uri = _decoder.getUri(Key.URI);
+ }
+ return _uri;
+ }
+
+ @override
+ Export get node => _unsupported('node');
+
+ String toString() => 'Z$kind($uri)';
+}
+
+class PrefixElementZ extends DeserializedElementZ
+ with LibraryMemberMixin implements PrefixElement {
+ bool _isDeferred;
+ ImportElement _deferredImport;
+
+ PrefixElementZ(ObjectDecoder decoder)
+ : super(decoder);
+
+ @override
+ accept(ElementVisitor visitor, arg) => visitor.visitPrefixElement(this, arg);
+
+ void _ensureDeferred() {
+ if (_isDeferred == null) {
+ _isDeferred = _decoder.getBool(Key.IS_DEFERRED);
+ _deferredImport = _decoder.getElement(Key.IMPORT, isOptional: true);
+ }
+ }
+
+ @override
+ ImportElement get deferredImport {
+ _ensureDeferred();
+ return _deferredImport;
+ }
+
+ @override
+ bool get isDeferred {
+ _ensureDeferred();
+ return _isDeferred;
+ }
+
+ @override
+ ElementKind get kind => ElementKind.PREFIX;
+
+ @override
+ Element lookupLocalMember(String memberName) {
+ return _unsupported('lookupLocalMember');
+ }
}
« no previous file with comments | « pkg/compiler/lib/src/serialization/keys.dart ('k') | pkg/compiler/lib/src/ssa/builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698