| // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file | 
 | // for details. All rights reserved. Use of this source code is governed by a | 
 | // BSD-style license that can be found in the LICENSE file. | 
 |  | 
 | // @dart = 2.9 | 
 |  | 
 | library fasta.export; | 
 |  | 
 | import 'builder/builder.dart'; | 
 | import 'builder/library_builder.dart'; | 
 |  | 
 | import 'combinator.dart' show Combinator; | 
 | import 'fasta_codes.dart'; | 
 |  | 
 | class Export { | 
 |   /// The library that is exporting [exported]; | 
 |   final LibraryBuilder exporter; | 
 |  | 
 |   /// The library being exported. | 
 |   LibraryBuilder exported; | 
 |  | 
 |   final List<Combinator> combinators; | 
 |  | 
 |   final int charOffset; | 
 |  | 
 |   Export(this.exporter, this.exported, this.combinators, this.charOffset); | 
 |  | 
 |   Uri get fileUri => exporter.fileUri; | 
 |  | 
 |   bool addToExportScope(String name, Builder member) { | 
 |     if (combinators != null) { | 
 |       for (Combinator combinator in combinators) { | 
 |         if (combinator.isShow && !combinator.names.contains(name)) return false; | 
 |         if (combinator.isHide && combinator.names.contains(name)) return false; | 
 |       } | 
 |     } | 
 |     bool changed = exporter.addToExportScope(name, member, charOffset); | 
 |     if (changed) { | 
 |       if (exporter.isNonNullableByDefault) { | 
 |         // TODO(johnniwinther): Add a common interface for exportable builders. | 
 |         Builder memberLibrary = member.parent; | 
 |         if (memberLibrary is LibraryBuilder && | 
 |             !memberLibrary.isNonNullableByDefault) { | 
 |           exporter.addProblem( | 
 |               messageExportOptOutFromOptIn, charOffset, noLength, fileUri); | 
 |         } | 
 |       } | 
 |     } | 
 |     return changed; | 
 |   } | 
 | } |