| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library fasta.import; | 5 library fasta.import; |
| 6 | 6 |
| 7 import 'builder/builder.dart' show | 7 import 'builder/builder.dart' show |
| 8 Builder, | 8 Builder, |
| 9 LibraryBuilder, | 9 LibraryBuilder, |
| 10 PrefixBuilder; | 10 PrefixBuilder; |
| 11 | 11 |
| 12 import 'combinator.dart' show | 12 import 'combinator.dart' show |
| 13 Combinator; | 13 Combinator; |
| 14 | 14 |
| 15 typedef void AddToScope(String name, Builder member); | 15 typedef void AddToScope(String name, Builder member); |
| 16 | 16 |
| 17 class Import { | 17 class Import { |
| 18 /// The library that is importing [imported]; |
| 19 final LibraryBuilder importer; |
| 20 |
| 18 /// The library being imported. | 21 /// The library being imported. |
| 19 final LibraryBuilder imported; | 22 final LibraryBuilder imported; |
| 20 | 23 |
| 21 final String prefix; | 24 final String prefix; |
| 22 | 25 |
| 23 final List<Combinator> combinators; | 26 final List<Combinator> combinators; |
| 24 | 27 |
| 25 Import(this.imported, this.prefix, this.combinators); | 28 final int charOffset; |
| 29 |
| 30 final int prefixCharOffset; |
| 31 |
| 32 Import(this.importer, this.imported, this.prefix, this.combinators, |
| 33 this.charOffset, this.prefixCharOffset); |
| 34 |
| 35 Uri get fileUri => importer.fileUri; |
| 26 | 36 |
| 27 void finalizeImports(LibraryBuilder importer) { | 37 void finalizeImports(LibraryBuilder importer) { |
| 28 AddToScope add; | 38 AddToScope add; |
| 29 PrefixBuilder prefix; | 39 PrefixBuilder prefix; |
| 30 if (this.prefix == null) { | 40 if (this.prefix == null) { |
| 31 add = importer.addToScope; | 41 add = importer.addToScope; |
| 32 } else { | 42 } else { |
| 33 prefix = new PrefixBuilder(this.prefix, <String, Builder>{}, importer); | 43 prefix = new PrefixBuilder( |
| 44 this.prefix, <String, Builder>{}, importer, prefixCharOffset); |
| 34 add = (String name, Builder member) { | 45 add = (String name, Builder member) { |
| 35 prefix.exports[name] = member; | 46 prefix.exports[name] = member; |
| 36 }; | 47 }; |
| 37 } | 48 } |
| 38 imported.exports.forEach((String name, Builder member) { | 49 imported.exports.forEach((String name, Builder member) { |
| 39 if (combinators != null) { | 50 if (combinators != null) { |
| 40 for (Combinator combinator in combinators) { | 51 for (Combinator combinator in combinators) { |
| 41 if (combinator.isShow && !combinator.names.contains(name)) return; | 52 if (combinator.isShow && !combinator.names.contains(name)) return; |
| 42 if (combinator.isHide && combinator.names.contains(name)) return; | 53 if (combinator.isHide && combinator.names.contains(name)) return; |
| 43 } | 54 } |
| 44 } | 55 } |
| 45 add(name, member); | 56 add(name, member); |
| 46 }); | 57 }); |
| 47 if (prefix != null) { | 58 if (prefix != null) { |
| 48 Builder existing = importer.addBuilder(prefix.name, prefix); | 59 Builder existing = importer.addBuilder(prefix.name, prefix); |
| 49 if (existing == prefix) { | 60 if (existing == prefix) { |
| 50 importer.addToScope(prefix.name, prefix); | 61 importer.addToScope(prefix.name, prefix); |
| 51 } | 62 } |
| 52 } | 63 } |
| 53 } | 64 } |
| 54 } | 65 } |
| OLD | NEW |