| // Copyright (c) 2015, 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. | |
| import 'package:analyzer/src/generated/source.dart'; | |
| import 'package:analyzer/src/summary/format.dart'; | |
| import 'package:analyzer/src/summary/idl.dart'; | |
| /** | |
| * Object that gathers information uses it to assemble a new | |
| * [PackageBundleBuilder]. | |
| */ | |
| class PackageBundleAssembler { | |
| /** | |
| * Value that will be stored in [PackageBundle.majorVersion] for any summaries | |
| * created by this code. When making a breaking change to the summary format, | |
| * this value should be incremented by 1 and [currentMinorVersion] should be | |
| * reset to zero. | |
| */ | |
| static const int currentMajorVersion = 1; | |
| /** | |
| * Value that will be stored in [PackageBundle.minorVersion] for any summaries | |
| * created by this code. When making a non-breaking change to the summary | |
| * format that clients might need to be aware of (such as adding a kind of | |
| * data that was previously not summarized), this value should be incremented | |
| * by 1. | |
| */ | |
| static const int currentMinorVersion = 1; | |
| final List<String> _linkedLibraryUris = <String>[]; | |
| final List<LinkedLibraryBuilder> _linkedLibraries = <LinkedLibraryBuilder>[]; | |
| final List<String> _unlinkedUnitUris = <String>[]; | |
| final List<UnlinkedUnitBuilder> _unlinkedUnits = <UnlinkedUnitBuilder>[]; | |
| final Map<String, UnlinkedUnitBuilder> _unlinkedUnitMap = | |
| <String, UnlinkedUnitBuilder>{}; | |
| LinkedNodeBundleBuilder _bundle2; | |
| void addLinkedLibrary(String uri, LinkedLibraryBuilder library) { | |
| _linkedLibraries.add(library); | |
| _linkedLibraryUris.add(uri); | |
| } | |
| void addUnlinkedUnit(Source source, UnlinkedUnitBuilder unit) { | |
| addUnlinkedUnitViaUri(source.uri.toString(), unit); | |
| } | |
| void addUnlinkedUnitViaUri(String uri, UnlinkedUnitBuilder unit) { | |
| _unlinkedUnitUris.add(uri); | |
| _unlinkedUnits.add(unit); | |
| _unlinkedUnitMap[uri] = unit; | |
| } | |
| /** | |
| * Assemble a new [PackageBundleBuilder] using the gathered information. | |
| */ | |
| PackageBundleBuilder assemble() { | |
| return new PackageBundleBuilder( | |
| linkedLibraryUris: _linkedLibraryUris, | |
| linkedLibraries: _linkedLibraries, | |
| unlinkedUnitUris: _unlinkedUnitUris, | |
| unlinkedUnits: _unlinkedUnits, | |
| majorVersion: currentMajorVersion, | |
| minorVersion: currentMinorVersion, | |
| bundle2: _bundle2); | |
| } | |
| void setBundle2(LinkedNodeBundleBuilder bundle2) { | |
| if (this._bundle2 != null) { | |
| throw StateError('Bundle2 may be set only once.'); | |
| } | |
| _bundle2 = bundle2; | |
| } | |
| } |