blob: e57cf8dce14d152f780c4c4b6defac34fe145b27 [file] [log] [blame]
// 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.
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;
}
}