Index: pkg/analyzer/lib/src/summary/summary_file_builder.dart |
diff --git a/pkg/analyzer/lib/src/summary/summary_file_builder.dart b/pkg/analyzer/lib/src/summary/summary_file_builder.dart |
index c9c835e105c1def5e11d4056307a4829423359e4..ad03a10960e611d9364583823a45e5fe73859b9c 100644 |
--- a/pkg/analyzer/lib/src/summary/summary_file_builder.dart |
+++ b/pkg/analyzer/lib/src/summary/summary_file_builder.dart |
@@ -5,9 +5,7 @@ |
library analyzer.src.summary.summary_file_builder; |
import 'dart:collection'; |
-import 'dart:io' as io; |
-import 'package:analyzer/dart/ast/ast.dart'; |
import 'package:analyzer/dart/element/element.dart'; |
import 'package:analyzer/file_system/file_system.dart'; |
import 'package:analyzer/file_system/physical_file_system.dart'; |
@@ -15,118 +13,37 @@ import 'package:analyzer/src/dart/sdk/sdk.dart'; |
import 'package:analyzer/src/generated/engine.dart'; |
import 'package:analyzer/src/generated/sdk.dart'; |
import 'package:analyzer/src/generated/source.dart'; |
-import 'package:analyzer/src/summary/flat_buffers.dart' as fb; |
-import 'package:analyzer/src/summary/index_unit.dart'; |
import 'package:analyzer/src/summary/summarize_elements.dart'; |
-import 'package:path/path.dart'; |
- |
-const int FIELD_SPEC_INDEX = 1; |
-const int FIELD_SPEC_SUM = 0; |
-const int FIELD_STRONG_INDEX = 3; |
-const int FIELD_STRONG_SUM = 2; |
- |
-class BuilderOutput { |
- final List<int> sum; |
- final List<int> index; |
- |
- BuilderOutput(this.sum, this.index); |
- |
- void writeMultiple(String outputDirectoryPath, String modeName) { |
- // Write summary. |
- { |
- String outputPath = join(outputDirectoryPath, '$modeName.sum'); |
- io.File file = new io.File(outputPath); |
- file.writeAsBytesSync(sum, mode: io.FileMode.WRITE_ONLY); |
- } |
- // Write index. |
- { |
- String outputPath = join(outputDirectoryPath, '$modeName.index'); |
- io.File file = new io.File(outputPath); |
- file.writeAsBytesSync(index, mode: io.FileMode.WRITE_ONLY); |
- } |
- } |
-} |
- |
-/** |
- * Summary build configuration. |
- */ |
-class SummaryBuildConfig { |
- /** |
- * Whether to use exclude informative data from created summaries. |
- */ |
- final bool buildSummaryExcludeInformative; |
- |
- /** |
- * Whether to output a summary in "fallback mode". |
- */ |
- final bool buildSummaryFallback; |
- |
- /** |
- * Whether to create summaries directly from ASTs, i.e. don't create a |
- * full element model. |
- */ |
- final bool buildSummaryOnlyAst; |
- |
- /** |
- * Path to the dart SDK summary file. |
- */ |
- final String dartSdkSummaryPath; |
- |
- /** |
- * Whether to use strong static checking. |
- */ |
- final bool strongMode; |
- |
- /** |
- * List of summary input file paths. |
- */ |
- final Iterable<String> summaryInputs; |
- |
- /** |
- * Create a build configuration with the given set options. |
- */ |
- SummaryBuildConfig( |
- {this.strongMode: false, |
- this.summaryInputs, |
- this.dartSdkSummaryPath, |
- this.buildSummaryExcludeInformative: false, |
- this.buildSummaryFallback: false, |
- this.buildSummaryOnlyAst: false}); |
-} |
class SummaryBuilder { |
- final AnalysisContext context; |
final Iterable<Source> librarySources; |
- final SummaryBuildConfig config; |
+ final AnalysisContext context; |
+ final bool strong; |
/** |
- * Create a summary builder for these [librarySources] and [context] using the |
- * given [config]. |
+ * Create a summary builder for these [librarySources] and [context]. |
*/ |
- SummaryBuilder(this.librarySources, this.context, this.config); |
+ SummaryBuilder(this.librarySources, this.context, this.strong); |
/** |
- * Create an SDK summary builder for the dart SDK at the given [sdkPath], |
- * using this [config]. |
+ * Create an SDK summary builder for the dart SDK at the given [sdkPath]. |
*/ |
- factory SummaryBuilder.forSdk(String sdkPath, SummaryBuildConfig config) { |
- bool strongMode = config.strongMode; |
- |
+ factory SummaryBuilder.forSdk(String sdkPath, bool strong) { |
// |
// Prepare SDK. |
// |
ResourceProvider resourceProvider = PhysicalResourceProvider.INSTANCE; |
FolderBasedDartSdk sdk = new FolderBasedDartSdk( |
- resourceProvider, resourceProvider.getFolder(sdkPath), strongMode); |
+ resourceProvider, resourceProvider.getFolder(sdkPath), strong); |
sdk.useSummary = false; |
- sdk.analysisOptions = new AnalysisOptionsImpl()..strongMode = strongMode; |
+ sdk.analysisOptions = new AnalysisOptionsImpl()..strongMode = strong; |
// |
// Prepare 'dart:' URIs to serialize. |
// |
Set<String> uriSet = |
sdk.sdkLibraries.map((SdkLibrary library) => library.shortName).toSet(); |
- if (!strongMode) { |
+ if (!strong) { |
uriSet.add('dart:html/nativewrappers.dart'); |
} |
uriSet.add('dart:html_common/html_common_dart2js.dart'); |
@@ -136,68 +53,30 @@ class SummaryBuilder { |
librarySources.add(sdk.mapDartUri(uri)); |
} |
- return new SummaryBuilder(librarySources, sdk.context, config); |
+ return new SummaryBuilder(librarySources, sdk.context, strong); |
} |
- BuilderOutput build() => new _Builder(context, librarySources).build(); |
-} |
- |
-/** |
- * Intermediary summary output result. |
- */ |
-class SummaryOutput { |
- final BuilderOutput spec; |
- final BuilderOutput strong; |
- SummaryOutput(this.spec, this.strong); |
- |
/** |
- * Write this summary output to the given [outputPath] and return the |
- * created file. |
+ * Build the linked bundle and return its bytes. |
*/ |
- io.File write(String outputPath) { |
- fb.Builder builder = new fb.Builder(); |
- fb.Offset specSumOffset = builder.writeListUint8(spec.sum); |
- fb.Offset specIndexOffset = builder.writeListUint8(spec.index); |
- fb.Offset strongSumOffset = builder.writeListUint8(strong.sum); |
- fb.Offset strongIndexOffset = builder.writeListUint8(strong.index); |
- builder.startTable(); |
- builder.addOffset(FIELD_SPEC_SUM, specSumOffset); |
- builder.addOffset(FIELD_SPEC_INDEX, specIndexOffset); |
- builder.addOffset(FIELD_STRONG_SUM, strongSumOffset); |
- builder.addOffset(FIELD_STRONG_INDEX, strongIndexOffset); |
- fb.Offset offset = builder.endTable(); |
- return new io.File(outputPath) |
- ..writeAsBytesSync(builder.finish(offset), mode: io.FileMode.WRITE_ONLY); |
- } |
+ List<int> build() => new _Builder(context, librarySources).build(); |
} |
class _Builder { |
- final Set<Source> processedSources = new Set<Source>(); |
- |
- final PackageBundleAssembler bundleAssembler = new PackageBundleAssembler(); |
- final PackageIndexAssembler indexAssembler = new PackageIndexAssembler(); |
- |
final AnalysisContext context; |
final Iterable<Source> librarySources; |
+ final Set<Source> processedSources = new Set<Source>(); |
+ final PackageBundleAssembler bundleAssembler = new PackageBundleAssembler(); |
+ |
_Builder(this.context, this.librarySources); |
/** |
- * Build summary output. |
+ * Build the linked bundle and return its bytes. |
*/ |
- BuilderOutput build() { |
- // |
- // Serialize each source. |
- // |
- for (Source source in librarySources) { |
- _serializeLibrary(source); |
- } |
- // |
- // Assemble the output. |
- // |
- List<int> sumBytes = bundleAssembler.assemble().toBuffer(); |
- List<int> indexBytes = indexAssembler.assemble().toBuffer(); |
- return new BuilderOutput(sumBytes, indexBytes); |
+ List<int> build() { |
+ librarySources.forEach(_serializeLibrary); |
+ return bundleAssembler.assemble().toBuffer(); |
} |
/** |
@@ -212,12 +91,5 @@ class _Builder { |
bundleAssembler.serializeLibraryElement(element); |
element.importedLibraries.forEach((e) => _serializeLibrary(e.source)); |
element.exportedLibraries.forEach((e) => _serializeLibrary(e.source)); |
- // Index every unit of the library. |
- for (CompilationUnitElement unitElement in element.units) { |
- Source unitSource = unitElement.source; |
- CompilationUnit unit = |
- context.resolveCompilationUnit2(unitSource, source); |
- indexAssembler.indexUnit(unit); |
- } |
} |
} |