Version 2.13.0-134.0.dev
Merge commit '45e3d3c77f775a81fb863022555e37fe36d111a7' into 'dev'
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 07ede06b..b90401a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -80,7 +80,7 @@
/// TODO(scheglov) Clean up the list of implicitly analyzed files.
class AnalysisDriver implements AnalysisDriverGeneric {
/// The version of data format, should be incremented on every format change.
- static const int DATA_VERSION = 128;
+ static const int DATA_VERSION = 130;
/// The length of the list returned by [_computeDeclaredVariablesSignature].
static const int _declaredVariablesSignatureLength = 4;
diff --git a/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart b/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
index 36d2133..140cbd2 100644
--- a/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
@@ -157,7 +157,7 @@
}
for (var dependency in declaredDevDependencies.entries) {
- var packageName = dependency.key;
+ var packageName = dependency.key as YamlNode;
if (declaredDependencies.containsKey(packageName)) {
_reportErrorForNode(reporter, packageName,
PubspecWarningCode.UNNECESSARY_DEV_DEPENDENCY, [packageName.value]);
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index ecace4e..383977d 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -630,51 +630,60 @@
if (tag == Tag.NullType) {
return null;
} else if (tag == Tag.DynamicType) {
- return DynamicTypeImpl.instance;
+ var type = DynamicTypeImpl.instance;
+ return _readAliasElementArguments(type);
} else if (tag == Tag.FunctionType) {
- return _readFunctionType();
+ var type = _readFunctionType();
+ return _readAliasElementArguments(type);
} else if (tag == Tag.InterfaceType) {
var element = nextElement() as ClassElement;
var typeArguments = _readTypeList();
var nullability = _readNullability();
- return InterfaceTypeImpl(
+ var type = InterfaceTypeImpl(
element: element,
typeArguments: typeArguments,
nullabilitySuffix: nullability,
);
+ return _readAliasElementArguments(type);
} else if (tag == Tag.InterfaceType_noTypeArguments_none) {
var element = nextElement() as ClassElement;
- return InterfaceTypeImpl(
+ var type = InterfaceTypeImpl(
element: element,
typeArguments: const <DartType>[],
nullabilitySuffix: NullabilitySuffix.none,
);
+ return _readAliasElementArguments(type);
} else if (tag == Tag.InterfaceType_noTypeArguments_question) {
var element = nextElement() as ClassElement;
- return InterfaceTypeImpl(
+ var type = InterfaceTypeImpl(
element: element,
typeArguments: const <DartType>[],
nullabilitySuffix: NullabilitySuffix.question,
);
+ return _readAliasElementArguments(type);
} else if (tag == Tag.InterfaceType_noTypeArguments_star) {
var element = nextElement() as ClassElement;
- return InterfaceTypeImpl(
+ var type = InterfaceTypeImpl(
element: element,
typeArguments: const <DartType>[],
nullabilitySuffix: NullabilitySuffix.star,
);
+ return _readAliasElementArguments(type);
} else if (tag == Tag.NeverType) {
var nullability = _readNullability();
- return NeverTypeImpl.instance.withNullability(nullability);
+ var type = NeverTypeImpl.instance.withNullability(nullability);
+ return _readAliasElementArguments(type);
} else if (tag == Tag.TypeParameterType) {
var element = nextElement() as TypeParameterElement;
var nullability = _readNullability();
- return TypeParameterTypeImpl(
+ var type = TypeParameterTypeImpl(
element: element,
nullabilitySuffix: nullability,
);
+ return _readAliasElementArguments(type);
} else if (tag == Tag.VoidType) {
- return VoidTypeImpl.instance;
+ var type = VoidTypeImpl.instance;
+ return _readAliasElementArguments(type);
} else {
throw UnimplementedError('$tag');
}
@@ -711,6 +720,40 @@
}
}
+ DartType _readAliasElementArguments(DartType type) {
+ var aliasElement = _readRawElement();
+ if (aliasElement is TypeAliasElement) {
+ var aliasArguments = _readTypeList();
+ if (type is DynamicType) {
+ // TODO(scheglov) add support for `dynamic` aliasing
+ return type;
+ } else if (type is FunctionType) {
+ return FunctionTypeImpl(
+ typeFormals: type.typeFormals,
+ parameters: type.parameters,
+ returnType: type.returnType,
+ nullabilitySuffix: type.nullabilitySuffix,
+ aliasElement: aliasElement,
+ aliasArguments: aliasArguments,
+ );
+ } else if (type is InterfaceType) {
+ return InterfaceTypeImpl(
+ element: type.element,
+ typeArguments: type.typeArguments,
+ nullabilitySuffix: type.nullabilitySuffix,
+ aliasElement: aliasElement,
+ aliasArguments: aliasArguments,
+ );
+ } else if (type is VoidType) {
+ // TODO(scheglov) add support for `void` aliasing
+ return type;
+ } else {
+ throw UnimplementedError('${type.runtimeType}');
+ }
+ }
+ return type;
+ }
+
/// TODO(scheglov) Optimize for write/read of types without type parameters.
FunctionType _readFunctionType() {
var typeParameters = <TypeParameterElement>[];
@@ -727,9 +770,6 @@
element.bound = bound;
}
- var aliasElement = nextElement() as TypeAliasElement?;
- var aliasArguments = aliasElement != null ? _readTypeList() : null;
-
var returnType = nextType()!;
var formalParameters = <ParameterElement>[];
@@ -756,8 +796,6 @@
parameters: formalParameters,
returnType: returnType,
nullabilitySuffix: nullability,
- aliasElement: aliasElement,
- aliasArguments: aliasArguments,
);
}
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 687b4f2..9f0dbdd 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -427,8 +427,10 @@
writeByte(Tag.NullType);
} else if (type is DynamicType) {
writeByte(Tag.DynamicType);
+ _writeTypeAliasElementArguments(type);
} else if (type is FunctionType) {
_writeFunctionType(type);
+ _writeTypeAliasElementArguments(type);
} else if (type is InterfaceType) {
var typeArguments = type.typeArguments;
var nullabilitySuffix = type.nullabilitySuffix;
@@ -452,17 +454,20 @@
}
_writeNullabilitySuffix(nullabilitySuffix);
}
+ _writeTypeAliasElementArguments(type);
} else if (type is NeverType) {
writeByte(Tag.NeverType);
_writeNullabilitySuffix(type.nullabilitySuffix);
+ _writeTypeAliasElementArguments(type);
} else if (type is TypeParameterType) {
writeByte(Tag.TypeParameterType);
writeElement(type.element);
_writeNullabilitySuffix(type.nullabilitySuffix);
+ _writeTypeAliasElementArguments(type);
} else if (type is VoidType) {
writeByte(Tag.VoidType);
+ _writeTypeAliasElementArguments(type);
} else {
- // TODO
throw UnimplementedError('${type.runtimeType}');
}
}
@@ -530,12 +535,6 @@
writeType(typeParameter.bound);
}
- var aliasElement = type.aliasElement;
- writeElement(aliasElement);
- if (aliasElement != null) {
- _writeTypeList(type.aliasArguments!);
- }
-
writeType(type.returnType);
var parameters = type.parameters;
@@ -561,6 +560,14 @@
_sink.writeUInt30(index);
}
+ void _writeTypeAliasElementArguments(DartType type) {
+ var aliasElement = type.aliasElement;
+ writeElement0(aliasElement);
+ if (aliasElement != null) {
+ _writeTypeList(type.aliasArguments!);
+ }
+ }
+
void _writeTypeList(List<DartType> types) {
_sink.writeUInt30(types.length);
for (var type in types) {
diff --git a/pkg/analyzer/lib/src/util/yaml.dart b/pkg/analyzer/lib/src/util/yaml.dart
index 1696085..98f91e8 100644
--- a/pkg/analyzer/lib/src/util/yaml.dart
+++ b/pkg/analyzer/lib/src/util/yaml.dart
@@ -118,8 +118,12 @@
merged[k] = v;
});
m2.nodes.forEach((k, v) {
+ // TODO(srawlins): The key should always be a [YamlNode], but is not (see
+ // https://pub.dev/documentation/yaml/latest/yaml/YamlMap/nodes.html).
+ // We could write an extension method which does this cast for us.
+ var value = (k as YamlNode).value;
var mergedKey =
- merged.keys.firstWhere((key) => key.value == k.value, orElse: () => k)
+ merged.keys.firstWhere((key) => key.value == value, orElse: () => k)
as YamlScalar;
var o1 = merged[mergedKey];
if (o1 != null) {
diff --git a/pkg/analyzer/lib/src/workspace/package_build.dart b/pkg/analyzer/lib/src/workspace/package_build.dart
index 09a3446..8f09c11 100644
--- a/pkg/analyzer/lib/src/workspace/package_build.dart
+++ b/pkg/analyzer/lib/src/workspace/package_build.dart
@@ -287,7 +287,7 @@
// pubspec, to know the package name that package:build will assume.
if (dartToolBuildDir.exists && pubspec.exists) {
try {
- final yaml = loadYaml(pubspec.readAsStringSync());
+ final yaml = loadYaml(pubspec.readAsStringSync()) as YamlMap;
final packageName = yaml['name'] as String;
final generatedRootPath = provider.pathContext
.joinAll([folder.path, ..._generatedPathParts]);
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 69609aa..a159287 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -11,6 +11,7 @@
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/summary2/reference.dart';
import 'package:analyzer/src/task/inference_error.dart';
import 'package:test/test.dart';
@@ -47,6 +48,7 @@
void checkElementText(
LibraryElement library,
String expected, {
+ bool withAliasElementArguments = false,
bool withCodeRanges = false,
bool withConstElements = true,
bool withExportScope = false,
@@ -59,6 +61,7 @@
}) {
var writer = _ElementWriter(
selfUriStr: '${library.source.uri}',
+ withAliasElementArguments: withAliasElementArguments,
withCodeRanges: withCodeRanges,
withConstElements: withConstElements,
withExportScope: withExportScope,
@@ -129,6 +132,7 @@
/// Writes the canonical text presentation of elements.
class _ElementWriter {
final String? selfUriStr;
+ final bool withAliasElementArguments;
final bool withCodeRanges;
final bool withExportScope;
final bool withFullyResolvedAst;
@@ -144,6 +148,7 @@
_ElementWriter({
this.selfUriStr,
+ this.withAliasElementArguments = false,
this.withCodeRanges = false,
this.withConstElements = true,
this.withExportScope = false,
@@ -1011,6 +1016,17 @@
void writeType(DartType type) {
var typeStr = _typeStr(type);
buffer.write(typeStr);
+
+ if (withAliasElementArguments) {
+ var aliasElement = type.aliasElement;
+ if (aliasElement is TypeAliasElementImpl) {
+ buffer.write('<aliasElement: ');
+ buffer.write(_referenceToString(aliasElement.reference!));
+ var typeArguments = type.aliasArguments!;
+ writeList(', aliasArguments: [', ']', typeArguments, ', ', writeType);
+ buffer.write('>');
+ }
+ }
}
void writeType2(DartType type) {
@@ -1175,6 +1191,25 @@
return components.join(';');
}
+ String _referenceToString(Reference reference) {
+ var parent = reference.parent!;
+ if (parent.parent == null) {
+ var libraryUriStr = reference.name;
+ if (libraryUriStr == selfUriStr) {
+ return 'self';
+ }
+ return libraryUriStr;
+ }
+
+ // Ignore the unit, skip to the library.
+ if (parent.name == '@unit') {
+ return _referenceToString(parent.parent!);
+ }
+
+ var name = reference.name;
+ return _referenceToString(parent) + '::$name';
+ }
+
String? _typeStr(DartType? type) {
return type?.getDisplayString(
withNullability: true,
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 43a2c53..0598c70 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -12425,6 +12425,130 @@
''');
}
+ @FailingTest(
+ issue: 'https://github.com/dart-lang/sdk/issues/45291',
+ reason: 'Type dynamic is special, no support for its aliases yet',
+ )
+ test_typedef_nonFunction_aliasElement_dynamic() async {
+ featureSet = FeatureSets.nonFunctionTypeAliases;
+ var library = await checkLibrary(r'''
+typedef A = dynamic;
+void f(A a) {}
+''');
+
+ checkElementText(
+ library,
+ r'''
+typedef A = dynamic;
+void f(dynamic<aliasElement: self::@typeAlias::A> a) {}
+''',
+ withAliasElementArguments: true);
+ }
+
+ test_typedef_nonFunction_aliasElement_functionType() async {
+ featureSet = FeatureSets.nonFunctionTypeAliases;
+ var library = await checkLibrary(r'''
+typedef A1 = void Function();
+typedef A2<R> = R Function();
+void f1(A1 a) {}
+void f2(A2<int> a) {}
+''');
+
+ checkElementText(
+ library,
+ r'''
+typedef A1 = void Function();
+typedef A2<R> = R Function();
+void f1(void Function()<aliasElement: self::@typeAlias::A1> a) {}
+void f2(int Function()<aliasElement: self::@typeAlias::A2, aliasArguments: [int]> a) {}
+''',
+ withAliasElementArguments: true);
+ }
+
+ test_typedef_nonFunction_aliasElement_interfaceType() async {
+ featureSet = FeatureSets.nonFunctionTypeAliases;
+ var library = await checkLibrary(r'''
+typedef A1 = List<int>;
+typedef A2<T, U> = Map<T, U>;
+void f1(A1 a) {}
+void f2(A2<int, String> a) {}
+''');
+
+ checkElementText(
+ library,
+ r'''
+typedef A1 = List<int>;
+typedef A2<T, U> = Map<T, U>;
+void f1(List<int><aliasElement: self::@typeAlias::A1> a) {}
+void f2(Map<int, String><aliasElement: self::@typeAlias::A2, aliasArguments: [int, String]> a) {}
+''',
+ withAliasElementArguments: true);
+ }
+
+ @FailingTest(
+ issue: 'https://github.com/dart-lang/sdk/issues/45291',
+ reason: 'Type Never is special, no support for its aliases yet',
+ )
+ test_typedef_nonFunction_aliasElement_never() async {
+ featureSet = FeatureSets.nonFunctionTypeAliases;
+ var library = await checkLibrary(r'''
+typedef A1 = Never;
+typedef A2<T> = Never?;
+void f1(A1 a) {}
+void f2(A2<int> a) {}
+''');
+
+ checkElementText(
+ library,
+ r'''
+typedef A1 = Never;
+typedef A2<T> = Never?;
+void f1(Never<aliasElement: self::@typeAlias::A1> a) {}
+void f2(Never?<aliasElement: self::@typeAlias::A2, aliasArguments: [int]> a) {}
+''',
+ withAliasElementArguments: true);
+ }
+
+ @FailingTest(
+ issue: 'https://github.com/dart-lang/sdk/issues/45291',
+ reason: 'Must be implemented',
+ )
+ test_typedef_nonFunction_aliasElement_typeParameterType() async {
+ featureSet = FeatureSets.nonFunctionTypeAliases;
+ var library = await checkLibrary(r'''
+typedef A<T> = T;
+void f<U>(A<U> a) {}
+''');
+
+ checkElementText(
+ library,
+ r'''
+typedef A<T> = T;
+void f<U>(U<aliasElement: self::@typeAlias::A, aliasArguments: [U]> a) {}
+''',
+ withAliasElementArguments: true);
+ }
+
+ @FailingTest(
+ issue: 'https://github.com/dart-lang/sdk/issues/45291',
+ reason: 'Type void is special, no support for its aliases yet',
+ )
+ test_typedef_nonFunction_aliasElement_void() async {
+ featureSet = FeatureSets.nonFunctionTypeAliases;
+ var library = await checkLibrary(r'''
+typedef A = void;
+void f(A a) {}
+''');
+
+ checkElementText(
+ library,
+ r'''
+typedef A = void;
+void f(void<aliasElement: self::@typeAlias::A> a) {}
+''',
+ withAliasElementArguments: true);
+ }
+
test_typedef_nonFunction_asInterfaceType_interfaceType_none() async {
featureSet = FeatureSets.nonFunctionTypeAliases;
var library = await checkLibrary(r'''
diff --git a/pkg/analyzer/tool/experiments/generate.dart b/pkg/analyzer/tool/experiments/generate.dart
index f57961d..3aabe61 100644
--- a/pkg/analyzer/tool/experiments/generate.dart
+++ b/pkg/analyzer/tool/experiments/generate.dart
@@ -68,7 +68,7 @@
features = <String, dynamic>{};
Map yamlFeatures = experimentsYaml['features'];
for (MapEntry entry in yamlFeatures.entries) {
- String category = entry.value['category'] ?? 'language';
+ String category = (entry.value as YamlMap)['category'] ?? 'language';
if (category != "language") {
// Skip a feature with a category that's not language. In the future
// possibly allow e.g. 'analyzer' etc.
diff --git a/pkg/analyzer_cli/bin/analyzer.dart b/pkg/analyzer_cli/bin/analyzer.dart
index 4381de7..e7fa96b 100644
--- a/pkg/analyzer_cli/bin/analyzer.dart
+++ b/pkg/analyzer_cli/bin/analyzer.dart
@@ -3,17 +3,12 @@
// 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 'dart:isolate';
-
import 'package:analyzer_cli/starter.dart';
/// The entry point for the command-line analyzer.
-///
-/// [sendPort] may be passed in when started in an isolate. If provided, it is
-/// used for bazel worker communication instead of stdin/stdout.
-void main(List<String> args, [SendPort sendPort]) async {
+void main(List<String> args) async {
var starter = CommandLineStarter();
// Wait for the starter to complete.
- await starter.start(args, sendPort: sendPort);
+ await starter.start(args);
}
diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart
deleted file mode 100644
index ec18a06..0000000
--- a/pkg/analyzer_cli/lib/src/build_mode.dart
+++ /dev/null
@@ -1,730 +0,0 @@
-// 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 'dart:io' as io;
-import 'dart:isolate';
-import 'dart:typed_data';
-
-import 'package:analyzer/dart/analysis/declared_variables.dart';
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/error/error.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
-import 'package:analyzer/src/context/context.dart';
-import 'package:analyzer/src/context/packages.dart';
-import 'package:analyzer/src/dart/analysis/byte_store.dart';
-import 'package:analyzer/src/dart/analysis/cache.dart';
-import 'package:analyzer/src/dart/analysis/context_root.dart' as api;
-import 'package:analyzer/src/dart/analysis/driver.dart';
-import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart'
- as api;
-import 'package:analyzer/src/dart/analysis/file_state.dart';
-import 'package:analyzer/src/dart/analysis/performance_logger.dart';
-import 'package:analyzer/src/dart/analysis/session.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/source_io.dart';
-import 'package:analyzer/src/source/source_resource.dart';
-import 'package:analyzer/src/summary/package_bundle_reader.dart';
-import 'package:analyzer/src/summary/summary_sdk.dart' show SummaryBasedDartSdk;
-import 'package:analyzer/src/summary2/bundle_reader.dart';
-import 'package:analyzer/src/summary2/link.dart';
-import 'package:analyzer/src/summary2/linked_element_factory.dart';
-import 'package:analyzer/src/summary2/package_bundle_format.dart';
-import 'package:analyzer/src/summary2/reference.dart';
-import 'package:analyzer/src/task/options.dart';
-import 'package:analyzer/src/util/file_paths.dart' as file_paths;
-import 'package:analyzer/src/workspace/bazel.dart';
-import 'package:analyzer_cli/src/driver.dart';
-import 'package:analyzer_cli/src/error_formatter.dart';
-import 'package:analyzer_cli/src/error_severity.dart';
-import 'package:analyzer_cli/src/options.dart';
-import 'package:bazel_worker/bazel_worker.dart';
-import 'package:collection/collection.dart';
-import 'package:convert/convert.dart';
-
-/// Persistent Bazel worker.
-class AnalyzerWorkerLoop extends AsyncWorkerLoop {
- final ResourceProvider resourceProvider;
- final PerformanceLog logger = PerformanceLog(null);
- final String dartSdkPath;
- WorkerPackageBundleCache packageBundleCache;
-
- final StringBuffer errorBuffer = StringBuffer();
- final StringBuffer outBuffer = StringBuffer();
-
- AnalyzerWorkerLoop(this.resourceProvider, AsyncWorkerConnection connection,
- {this.dartSdkPath})
- : super(connection: connection) {
- packageBundleCache =
- WorkerPackageBundleCache(resourceProvider, logger, 256 * 1024 * 1024);
- }
-
- factory AnalyzerWorkerLoop.sendPort(
- ResourceProvider resourceProvider, SendPort sendPort,
- {String dartSdkPath}) {
- AsyncWorkerConnection connection = SendPortAsyncWorkerConnection(sendPort);
- return AnalyzerWorkerLoop(resourceProvider, connection,
- dartSdkPath: dartSdkPath);
- }
-
- factory AnalyzerWorkerLoop.std(ResourceProvider resourceProvider,
- {io.Stdin stdinStream, io.Stdout stdoutStream, String dartSdkPath}) {
- AsyncWorkerConnection connection = StdAsyncWorkerConnection(
- inputStream: stdinStream, outputStream: stdoutStream);
- return AnalyzerWorkerLoop(resourceProvider, connection,
- dartSdkPath: dartSdkPath);
- }
-
- /// Performs analysis with given [options].
- Future<void> analyze(
- CommandLineOptions options, Map<String, WorkerInput> inputs) async {
- var packageBundleProvider =
- WorkerPackageBundleProvider(packageBundleCache, inputs);
- var buildMode = BuildMode(resourceProvider, options, AnalysisStats(),
- logger: logger, packageBundleProvider: packageBundleProvider);
- await buildMode.analyze();
- AnalysisEngine.instance.clearCaches();
- }
-
- /// Perform a single loop step.
- @override
- Future<WorkResponse> performRequest(WorkRequest request) async {
- return logger.runAsync('Perform request', () async {
- errorBuffer.clear();
- outBuffer.clear();
- try {
- // Prepare inputs with their digests.
- var inputs = <String, WorkerInput>{};
- for (var input in request.inputs) {
- inputs[input.path] = WorkerInput(input.path, input.digest);
- }
-
- // Add in the dart-sdk argument if `dartSdkPath` is not null,
- // otherwise it will try to find the currently installed sdk.
- var arguments = request.arguments.toList();
- if (dartSdkPath != null &&
- !arguments.any((arg) => arg.startsWith('--dart-sdk'))) {
- arguments.add('--dart-sdk=$dartSdkPath');
- }
-
- // Prepare options.
- var options = CommandLineOptions.parse(resourceProvider, arguments,
- printAndFail: (String msg) {
- throw ArgumentError(msg);
- });
-
- // Analyze and respond.
- await analyze(options, inputs);
- var msg = _getErrorOutputBuffersText();
- return WorkResponse()
- ..exitCode = EXIT_CODE_OK
- ..output = msg;
- } catch (e, st) {
- var msg = _getErrorOutputBuffersText();
- msg += '$e\n$st';
- return WorkResponse()
- ..exitCode = EXIT_CODE_ERROR
- ..output = msg;
- }
- });
- }
-
- /// Run the worker loop.
- @override
- Future<void> run() async {
- errorSink = errorBuffer;
- outSink = outBuffer;
- exitHandler = (int exitCode) {
- throw StateError('Exit called: $exitCode');
- };
- await super.run();
- }
-
- String _getErrorOutputBuffersText() {
- var msg = '';
- if (errorBuffer.isNotEmpty) {
- msg += errorBuffer.toString() + '\n';
- }
- if (outBuffer.isNotEmpty) {
- msg += outBuffer.toString() + '\n';
- }
- return msg;
- }
-}
-
-/// Analyzer used when the "--build-mode" option is supplied.
-class BuildMode {
- final ResourceProvider resourceProvider;
- final CommandLineOptions options;
- final AnalysisStats stats;
- final PerformanceLog logger;
- final PackageBundleProvider packageBundleProvider;
-
- SummaryDataStore summaryDataStore;
- AnalysisOptionsImpl analysisOptions;
- Map<Uri, File> uriToFileMap;
- final List<Source> explicitSources = <Source>[];
-
- SourceFactory sourceFactory;
- DeclaredVariables declaredVariables;
- AnalysisDriver analysisDriver;
-
- LinkedElementFactory elementFactory;
-
- // May be null.
- final DependencyTracker dependencyTracker;
-
- BuildMode(this.resourceProvider, this.options, this.stats,
- {PerformanceLog logger, PackageBundleProvider packageBundleProvider})
- : logger = logger ?? PerformanceLog(null),
- packageBundleProvider = packageBundleProvider ??
- DirectPackageBundleProvider(resourceProvider),
- dependencyTracker = options.summaryDepsOutput != null
- ? DependencyTracker(options.summaryDepsOutput)
- : null;
-
- bool get _shouldOutputSummary =>
- options.buildSummaryOutput != null ||
- options.buildSummaryOutputSemantic != null;
-
- /// Perform package analysis according to the given [options].
- Future<ErrorSeverity> analyze() async {
- return await logger.runAsync('Analyze', () async {
- // Write initial progress message.
- if (!options.machineFormat) {
- outSink.writeln("Analyzing ${options.sourceFiles.join(', ')}...");
- }
-
- // Create the URI to file map.
- uriToFileMap = _createUriToFileMap(options.sourceFiles);
- if (uriToFileMap == null) {
- io.exitCode = ErrorSeverity.ERROR.ordinal;
- return ErrorSeverity.ERROR;
- }
-
- // BuildMode expects sourceFiles in the format "<uri>|<filepath>",
- // but the rest of the code base does not understand this format.
- // Rewrite sourceFiles, stripping the "<uri>|" prefix, so that it
- // does not cause problems with code that does not expect this format.
- options.rewriteSourceFiles(options.sourceFiles
- .map((String uriPipePath) =>
- uriPipePath.substring(uriPipePath.indexOf('|') + 1))
- .toList());
-
- // Prepare the analysis driver.
- try {
- logger.run('Prepare analysis driver', () {
- _createAnalysisDriver();
- });
- } on ConflictingSummaryException catch (e) {
- errorSink.writeln('$e');
- io.exitCode = ErrorSeverity.ERROR.ordinal;
- return ErrorSeverity.ERROR;
- }
-
- // Add sources.
- for (var uri in uriToFileMap.keys) {
- var file = uriToFileMap[uri];
- if (!file.exists) {
- errorSink.writeln('File not found: ${file.path}');
- io.exitCode = ErrorSeverity.ERROR.ordinal;
- return ErrorSeverity.ERROR;
- }
- Source source = FileSource(file, uri);
- explicitSources.add(source);
- }
-
- // Write summary.
- if (_shouldOutputSummary) {
- await logger.runAsync('Build and write output summary', () async {
- // Build and assemble linked libraries.
- var bytes = _computeLinkedLibraries2();
-
- // Write the whole package bundle.
- // TODO(scheglov) Remove support for `buildSummaryOutput`.
- if (options.buildSummaryOutput != null) {
- var file = io.File(options.buildSummaryOutput);
- file.writeAsBytesSync(bytes, mode: io.FileMode.writeOnly);
- }
- if (options.buildSummaryOutputSemantic != null) {
- var file = io.File(options.buildSummaryOutputSemantic);
- file.writeAsBytesSync(bytes, mode: io.FileMode.writeOnly);
- }
- });
- } else {
- // Build the graph, e.g. associate parts with libraries.
- for (var file in uriToFileMap.values) {
- analysisDriver.fsState.getFileForPath(file.path);
- }
- }
-
- ErrorSeverity severity;
- if (options.buildSummaryOnly) {
- severity = ErrorSeverity.NONE;
- } else {
- // Process errors.
- await _printErrors(outputPath: options.buildAnalysisOutput);
- severity = await _computeMaxSeverity();
- }
-
- if (dependencyTracker != null) {
- var file = io.File(dependencyTracker.outputPath);
- file.writeAsStringSync(dependencyTracker.dependencies.join('\n'));
- }
-
- return severity;
- });
- }
-
- void _applyOptionsFile() {
- analysisOptions = AnalysisOptionsImpl();
-
- var path = options.contextBuilderOptions.defaultAnalysisOptionsFilePath;
- var file = resourceProvider.getFile(path);
- var provider = AnalysisOptionsProvider(sourceFactory);
- var map = provider.getOptionsFromFile(file);
- applyToAnalysisOptions(analysisOptions, map);
- }
-
- /// Use [elementFactory] filled with input summaries, and link libraries
- /// in [explicitSources] to produce linked summary bytes.
- Uint8List _computeLinkedLibraries2() {
- return logger.run('Link output summary2', () {
- var inputLibraries = <LinkInputLibrary>[];
-
- for (var librarySource in explicitSources) {
- var path = librarySource.fullName;
-
- var parseResult = analysisDriver.parseFileSync(path);
- if (parseResult == null) {
- throw ArgumentError('No parsed unit for $path');
- }
-
- var unit = parseResult.unit;
- var isPart = unit.directives.any((d) => d is PartOfDirective);
- if (isPart) {
- continue;
- }
-
- var inputUnits = <LinkInputUnit>[];
- inputUnits.add(
- LinkInputUnit(null, librarySource, false, unit),
- );
-
- for (var directive in unit.directives) {
- if (directive is PartDirective) {
- var partUri = directive.uri.stringValue;
- var partSource = sourceFactory.resolveUri(librarySource, partUri);
-
- // Add empty synthetic units for unresolved `part` URIs.
- if (partSource == null) {
- continue;
- }
-
- var partPath = partSource.fullName;
- var partParseResult = analysisDriver.parseFileSync(partPath);
- if (partParseResult == null) {
- throw ArgumentError('No parsed unit for part $partPath in $path');
- }
- inputUnits.add(
- LinkInputUnit(
- partUri,
- partSource,
- false,
- partParseResult.unit,
- ),
- );
- }
- }
-
- inputLibraries.add(
- LinkInputLibrary(librarySource, inputUnits),
- );
- }
-
- var linkResult = link(elementFactory, inputLibraries, false);
-
- var bundleBuilder = PackageBundleBuilder();
- for (var library in inputLibraries) {
- bundleBuilder.addLibrary(
- library.uriStr,
- library.units.map((e) => e.uriStr).toList(),
- );
- }
- return bundleBuilder.finish(
- astBytes: linkResult.astBytes,
- resolutionBytes: linkResult.resolutionBytes,
- );
- });
- }
-
- Future<ErrorSeverity> _computeMaxSeverity() async {
- var maxSeverity = ErrorSeverity.NONE;
- if (!options.buildSuppressExitCode) {
- for (var source in explicitSources) {
- var result = await analysisDriver.getErrors(source.fullName);
- for (var error in result.errors) {
- var processedSeverity = determineProcessedSeverity(
- error, options, analysisDriver.analysisOptions);
- if (processedSeverity != null) {
- maxSeverity = maxSeverity.max(processedSeverity);
- }
- }
- }
- }
- return maxSeverity;
- }
-
- void _createAnalysisDriver() {
- // Read the summaries.
- summaryDataStore = SummaryDataStore(<String>[]);
-
- // Adds a bundle at `path` to `summaryDataStore`.
- PackageBundleReader addBundle(String path) {
- var bundle = packageBundleProvider.get(path);
- summaryDataStore.addBundle(path, bundle);
- return bundle;
- }
-
- SummaryBasedDartSdk sdk;
- logger.run('Add SDK bundle', () {
- sdk = SummaryBasedDartSdk(options.dartSdkSummaryPath, true);
- summaryDataStore.addBundle(null, sdk.bundle);
- });
-
- var numInputs = options.buildSummaryInputs.length;
- logger.run('Add $numInputs input summaries', () {
- for (var path in options.buildSummaryInputs) {
- addBundle(path);
- }
- });
-
- var rootPath = options.sourceFiles.first;
-
- var packages = _findPackages(rootPath);
-
- sourceFactory = SourceFactory(<UriResolver>[
- DartUriResolver(sdk),
- TrackingInSummaryUriResolver(
- InSummaryUriResolver(resourceProvider, summaryDataStore),
- dependencyTracker),
- ExplicitSourceResolver(uriToFileMap)
- ]);
-
- _applyOptionsFile();
-
- var scheduler = AnalysisDriverScheduler(logger);
- analysisDriver = AnalysisDriver(
- scheduler,
- logger,
- resourceProvider,
- MemoryByteStore(),
- FileContentOverlay(),
- null,
- sourceFactory,
- analysisOptions,
- externalSummaries: summaryDataStore,
- packages: packages,
- );
-
- _setAnalysisDriverAnalysisContext(rootPath);
-
- declaredVariables = DeclaredVariables.fromMap(options.definedVariables);
- analysisDriver.declaredVariables = declaredVariables;
-
- _createLinkedElementFactory();
-
- scheduler.start();
- }
-
- void _createLinkedElementFactory() {
- var analysisContext = AnalysisContextImpl(
- SynchronousSession(analysisOptions, declaredVariables),
- sourceFactory,
- );
-
- elementFactory = LinkedElementFactory(
- analysisContext,
- AnalysisSessionImpl(null),
- Reference.root(),
- );
-
- for (var bundle in summaryDataStore.bundles) {
- elementFactory.addBundle(
- BundleReader(
- elementFactory: elementFactory,
- astBytes: bundle.astBytes,
- resolutionBytes: bundle.resolutionBytes,
- ),
- );
- }
- }
-
- /// Convert [sourceEntities] (a list of file specifications of the form
- /// "$uri|$path") to a map from URI to path. If an error occurs, report the
- /// error and return null.
- Map<Uri, File> _createUriToFileMap(List<String> sourceEntities) {
- var uriToFileMap = <Uri, File>{};
- for (var sourceFile in sourceEntities) {
- var pipeIndex = sourceFile.indexOf('|');
- if (pipeIndex == -1) {
- // TODO(paulberry): add the ability to guess the URI from the path.
- errorSink.writeln(
- 'Illegal input file (must be "\$uri|\$path"): $sourceFile');
- return null;
- }
- var uri = Uri.parse(sourceFile.substring(0, pipeIndex));
- var path = sourceFile.substring(pipeIndex + 1);
- path = resourceProvider.pathContext.absolute(path);
- path = resourceProvider.pathContext.normalize(path);
- uriToFileMap[uri] = resourceProvider.getFile(path);
- }
- return uriToFileMap;
- }
-
- Packages _findPackages(String path) {
- var configPath = options.packageConfigPath;
- if (configPath != null) {
- var configFile = resourceProvider.getFile(configPath);
- return parsePackagesFile(resourceProvider, configFile);
- }
-
- if (path != null) {
- var file = resourceProvider.getFile(path);
- return findPackagesFrom(resourceProvider, file);
- }
-
- return Packages.empty;
- }
-
- /// Print errors for all explicit sources. If [outputPath] is supplied, output
- /// is sent to a new file at that path.
- Future<void> _printErrors({String outputPath}) async {
- await logger.runAsync('Compute and print analysis errors', () async {
- var buffer = StringBuffer();
- var severityProcessor = (AnalysisError error) =>
- determineProcessedSeverity(error, options, analysisOptions);
- var formatter = options.machineFormat
- ? MachineErrorFormatter(buffer, options, stats,
- severityProcessor: severityProcessor)
- : HumanErrorFormatter(buffer, options, stats,
- severityProcessor: severityProcessor);
- for (var source in explicitSources) {
- var result = await analysisDriver.getErrors(source.fullName);
- formatter.formatErrors([result]);
- }
- formatter.flush();
- if (!options.machineFormat) {
- stats.print(buffer);
- }
- if (outputPath == null) {
- var sink = options.machineFormat ? errorSink : outSink;
- sink.write(buffer);
- } else {
- io.File(outputPath).writeAsStringSync(buffer.toString());
- }
- });
- }
-
- void _setAnalysisDriverAnalysisContext(String rootPath) {
- rootPath = file_paths.absoluteNormalized(
- resourceProvider.pathContext,
- rootPath,
- );
-
- var workspace = BazelWorkspace.find(resourceProvider, rootPath);
-
- var contextRoot = api.ContextRootImpl(
- resourceProvider,
- resourceProvider.getFolder(workspace.root),
- workspace,
- );
-
- analysisDriver.configure(
- analysisContext: api.DriverBasedAnalysisContext(
- resourceProvider,
- contextRoot,
- analysisDriver,
- ),
- );
- }
-}
-
-/// Tracks paths to dependencies, really just a thin api around a Set<String>.
-class DependencyTracker {
- final _dependencies = <String>{};
-
- /// The path to the file to create once tracking is done.
- final String outputPath;
-
- DependencyTracker(this.outputPath);
-
- Iterable<String> get dependencies => _dependencies;
-
- void record(String path) => _dependencies.add(path);
-}
-
-/// [PackageBundleProvider] that always reads from the [ResourceProvider].
-class DirectPackageBundleProvider implements PackageBundleProvider {
- final ResourceProvider resourceProvider;
-
- DirectPackageBundleProvider(this.resourceProvider);
-
- @override
- PackageBundleReader get(String path) {
- var bytes = io.File(path).readAsBytesSync();
- return PackageBundleReader(bytes);
- }
-}
-
-/// Instances of the class [ExplicitSourceResolver] map URIs to files on disk
-/// using a fixed mapping provided at construction time.
-class ExplicitSourceResolver extends UriResolver {
- final Map<Uri, File> uriToFileMap;
- final Map<String, Uri> pathToUriMap;
-
- /// Construct an [ExplicitSourceResolver] based on the given [uriToFileMap].
- ExplicitSourceResolver(Map<Uri, File> uriToFileMap)
- : uriToFileMap = uriToFileMap,
- pathToUriMap = _computePathToUriMap(uriToFileMap);
-
- @override
- Source resolveAbsolute(Uri uri, [Uri actualUri]) {
- var file = uriToFileMap[uri];
- actualUri ??= uri;
- if (file == null) {
- return null;
- } else {
- return FileSource(file, actualUri);
- }
- }
-
- @override
- Uri restoreAbsolute(Source source) {
- return pathToUriMap[source.fullName];
- }
-
- /// Build the inverse mapping of [uriToSourceMap].
- static Map<String, Uri> _computePathToUriMap(Map<Uri, File> uriToSourceMap) {
- var pathToUriMap = <String, Uri>{};
- uriToSourceMap.forEach((Uri uri, File file) {
- pathToUriMap[file.path] = uri;
- });
- return pathToUriMap;
- }
-}
-
-/// Provider for [PackageBundleReader]s by file paths.
-abstract class PackageBundleProvider {
- /// Return the [PackageBundleReader] for the file with the given [path].
- PackageBundleReader get(String path);
-}
-
-/// Wrapper for [InSummaryUriResolver] that tracks accesses to summaries.
-class TrackingInSummaryUriResolver extends UriResolver {
- // May be null.
- final DependencyTracker dependencyTracker;
- final InSummaryUriResolver inSummaryUriResolver;
-
- TrackingInSummaryUriResolver(
- this.inSummaryUriResolver, this.dependencyTracker);
-
- @override
- Source resolveAbsolute(Uri uri) {
- var source = inSummaryUriResolver.resolveAbsolute(uri);
- if (dependencyTracker != null &&
- source != null &&
- source is InSummarySource) {
- dependencyTracker.record(source.summaryPath);
- }
- return source;
- }
-}
-
-/// Worker input.
-///
-/// Bazel does not specify the format of the digest, so we cannot assume that
-/// the digest itself is enough to uniquely identify inputs. So, we use a pair
-/// of path + digest.
-class WorkerInput {
- static const _digestEquality = ListEquality<int>();
-
- final String path;
- final List<int> digest;
-
- WorkerInput(this.path, this.digest);
-
- @override
- int get hashCode => _digestEquality.hash(digest);
-
- @override
- bool operator ==(Object other) {
- return other is WorkerInput &&
- other.path == path &&
- _digestEquality.equals(other.digest, digest);
- }
-
- @override
- String toString() => '$path @ ${hex.encode(digest)}';
-}
-
-/// Value object for [WorkerPackageBundleCache].
-class WorkerPackageBundle {
- final List<int> bytes;
- final PackageBundleReader bundle;
-
- WorkerPackageBundle(this.bytes, this.bundle);
-
- /// Approximation of a bundle size in memory.
- int get size => bytes.length * 3;
-}
-
-/// Cache of [PackageBundleReader]s.
-class WorkerPackageBundleCache {
- final ResourceProvider resourceProvider;
- final PerformanceLog logger;
- final Cache<WorkerInput, WorkerPackageBundle> _cache;
-
- WorkerPackageBundleCache(this.resourceProvider, this.logger, int maxSizeBytes)
- : _cache = Cache<WorkerInput, WorkerPackageBundle>(
- maxSizeBytes, (value) => value.size);
-
- /// Get the [PackageBundleReader] from the file with the given [path] in the context
- /// of the given worker [inputs].
- PackageBundleReader get(Map<String, WorkerInput> inputs, String path) {
- var input = inputs[path];
-
- // The input must be not null, otherwise we're not expected to read
- // this file, but we check anyway to be safe.
- if (input == null) {
- logger.writeln('Read $path outside of the inputs.');
- var file = resourceProvider.getFile(path);
- var bytes = file.readAsBytesSync() as Uint8List;
- return PackageBundleReader(bytes);
- }
-
- return _cache.get(input, () {
- logger.writeln('Read $input.');
- var file = resourceProvider.getFile(path);
- var bytes = file.readAsBytesSync() as Uint8List;
- var bundle = PackageBundleReader(bytes);
- return WorkerPackageBundle(bytes, bundle);
- }).bundle;
- }
-}
-
-/// [PackageBundleProvider] that reads from [WorkerPackageBundleCache] using
-/// the request specific [inputs].
-class WorkerPackageBundleProvider implements PackageBundleProvider {
- final WorkerPackageBundleCache cache;
- final Map<String, WorkerInput> inputs;
-
- WorkerPackageBundleProvider(this.cache, this.inputs);
-
- @override
- PackageBundleReader get(String path) {
- return cache.get(inputs, path);
- }
-}
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index 3d94108..357b5d7 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
import 'dart:io' as io;
-import 'dart:isolate';
import 'package:analyzer/dart/sdk/build_sdk_summary.dart';
import 'package:analyzer/error/error.dart';
@@ -31,7 +30,6 @@
import 'package:analyzer/src/util/yaml.dart';
import 'package:analyzer_cli/src/analyzer_impl.dart';
import 'package:analyzer_cli/src/batch_mode.dart';
-import 'package:analyzer_cli/src/build_mode.dart';
import 'package:analyzer_cli/src/error_formatter.dart';
import 'package:analyzer_cli/src/error_severity.dart';
import 'package:analyzer_cli/src/options.dart';
@@ -89,7 +87,7 @@
}
@override
- Future<void> start(List<String> args, {SendPort sendPort}) async {
+ Future<void> start(List<String> args) async {
if (analysisDriver != null) {
throw StateError('start() can only be called once');
}
@@ -105,13 +103,7 @@
_analysisContextProvider = _AnalysisContextProvider(resourceProvider);
// Do analysis.
- if (options.buildMode) {
- var severity = await _buildModeAnalyze(options, sendPort);
- // Propagate issues to the exit code.
- if (_shouldBeFatal(severity, options)) {
- io.exitCode = severity.ordinal;
- }
- } else if (options.batchMode) {
+ if (options.batchMode) {
var batchRunner = BatchRunner(outSink, errorSink);
batchRunner.runAsBatch(args, (List<String> args) async {
var options = CommandLineOptions.parse(resourceProvider, args);
@@ -375,25 +367,6 @@
return allResult;
}
- /// Perform analysis in build mode according to the given [options].
- ///
- /// If [sendPort] is provided it is used for bazel worker communication
- /// instead of stdin/stdout.
- Future<ErrorSeverity> _buildModeAnalyze(
- CommandLineOptions options, SendPort sendPort) async {
- if (options.buildModePersistentWorker) {
- var workerLoop = sendPort == null
- ? AnalyzerWorkerLoop.std(resourceProvider,
- dartSdkPath: options.dartSdkPath)
- : AnalyzerWorkerLoop.sendPort(resourceProvider, sendPort,
- dartSdkPath: options.dartSdkPath);
- await workerLoop.run();
- return ErrorSeverity.NONE;
- } else {
- return await BuildMode(resourceProvider, options, stats).analyze();
- }
- }
-
/// Collect all analyzable files at [filePath], recursively if it's a
/// directory, ignoring links.
Iterable<io.File> _collectFiles(String filePath, AnalysisOptions options) {
@@ -475,8 +448,6 @@
previous.showPackageWarningsPrefix &&
newOptions.showSdkWarnings == previous.showSdkWarnings &&
newOptions.lints == previous.lints &&
- _equalLists(
- newOptions.buildSummaryInputs, previous.buildSummaryInputs) &&
newOptions.defaultLanguageVersion == previous.defaultLanguageVersion &&
newOptions.disableCacheFlushing == previous.disableCacheFlushing &&
_equalLists(newOptions.enabledExperiments, previous.enabledExperiments);
diff --git a/pkg/analyzer_cli/lib/src/options.dart b/pkg/analyzer_cli/lib/src/options.dart
index 08897e3..56d8ee4 100644
--- a/pkg/analyzer_cli/lib/src/options.dart
+++ b/pkg/analyzer_cli/lib/src/options.dart
@@ -6,7 +6,6 @@
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer/src/context/builder.dart';
import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
@@ -29,7 +28,6 @@
const _noImplicitDynamicFlag = 'no-implicit-dynamic';
const _packagesOption = 'packages';
const _sdkPathOption = 'dart-sdk';
-const _sdkSummaryPathOption = 'dart-sdk-summary';
/// Shared exit handler.
///
@@ -53,40 +51,12 @@
class CommandLineOptions {
final ArgResults _argResults;
- /// The path to output analysis results when in build mode.
- final String buildAnalysisOutput;
-
- /// Whether to use build mode.
- final bool buildMode;
-
- /// Whether to use build mode as a Bazel persistent worker.
- final bool buildModePersistentWorker;
-
- /// List of summary file paths to use in build mode.
- final List<String> buildSummaryInputs;
-
- /// Whether to skip analysis when creating summaries in build mode.
- final bool buildSummaryOnly;
-
- /// The path to output the summary when creating summaries in build mode.
- final String buildSummaryOutput;
-
- /// The path to output the semantic-only summary when creating summaries in
- /// build mode.
- final String buildSummaryOutputSemantic;
-
- /// Whether to suppress a nonzero exit code in build mode.
- final bool buildSuppressExitCode;
-
/// The options defining the context in which analysis is performed.
final ContextBuilderOptions contextBuilderOptions;
/// The path to the dart SDK.
String dartSdkPath;
- /// The path to the dart SDK summary file.
- final String dartSdkSummaryPath;
-
/// Whether to disable cache flushing. This option can improve analysis
/// speed at the expense of memory usage. It may also be useful for working
/// around bugs.
@@ -124,7 +94,7 @@
final bool showSdkWarnings;
/// The source files to analyze
- List<String> _sourceFiles;
+ final List<String> sourceFiles;
/// Whether to treat warnings as fatal
final bool warningsAreFatal;
@@ -146,31 +116,16 @@
/// Dart analyzer snapshot.
final bool trainSnapshot;
- /// Path to a file to dump summary dependency information to for any given
- /// build.
- final String summaryDepsOutput;
-
/// Initialize options from the given parsed [args].
CommandLineOptions._fromArgs(
ResourceProvider resourceProvider,
ArgResults args,
) : _argResults = args,
- buildAnalysisOutput = cast(args['build-analysis-output']),
- buildMode = cast(args['build-mode']),
- buildModePersistentWorker = cast(args['persistent_worker']),
- buildSummaryInputs =
- (args['build-summary-input'] as List).cast<String>(),
- buildSummaryOnly = cast(args['build-summary-only']),
- buildSummaryOutput = cast(args['build-summary-output']),
- buildSummaryOutputSemantic =
- cast(args['build-summary-output-semantic']),
- buildSuppressExitCode = cast(args['build-suppress-exit-code']),
contextBuilderOptions = _createContextBuilderOptions(
resourceProvider,
args,
),
dartSdkPath = cast(args[_sdkPathOption]),
- dartSdkSummaryPath = cast(args[_sdkSummaryPathOption]),
disableCacheFlushing = cast(args['disable-cache-flushing']),
disableHints = cast(args['no-hints']),
displayVersion = cast(args['version']),
@@ -184,14 +139,13 @@
args['x-package-warnings-prefix'] != null,
showPackageWarningsPrefix = cast(args['x-package-warnings-prefix']),
showSdkWarnings = cast(args['sdk-warnings']),
- _sourceFiles = args.rest,
+ sourceFiles = args.rest,
infosAreFatal = cast(args['fatal-infos']) || cast(args['fatal-hints']),
warningsAreFatal = cast(args['fatal-warnings']),
lintsAreFatal = cast(args['fatal-lints']),
trainSnapshot = cast(args['train-snapshot']),
verbose = cast(args['verbose']),
- color = cast(args['color']),
- summaryDepsOutput = cast(args['summary-deps-output']);
+ color = cast(args['color']);
/// The path to an analysis options file
String get analysisOptionsFile =>
@@ -221,14 +175,6 @@
/// The path to a `.packages` configuration file
String get packageConfigPath => contextBuilderOptions.defaultPackageFilePath;
- /// The source files to analyze
- List<String> get sourceFiles => _sourceFiles;
-
- /// Replace the sourceFiles parsed from the command line.
- void rewriteSourceFiles(List<String> newSourceFiles) {
- _sourceFiles = newSourceFiles;
- }
-
/// Update the [analysisOptions] with flags that the user specified
/// explicitly. The [analysisOptions] are usually loaded from one of
/// `analysis_options.yaml` files, possibly with includes. We consider
@@ -336,7 +282,7 @@
}
// Check SDK.
- if (!options.buildModePersistentWorker) {
+ {
var sdkPath = options.dartSdkPath;
// Check that SDK is existing directory.
@@ -354,60 +300,9 @@
options.dartSdkPath = file_paths.absoluteNormalized(pathContext, sdkPath);
}
- // Build mode.
- if (options.buildMode) {
- if (options.dartSdkSummaryPath == null) {
- // It is OK to not specify when persistent worker.
- // We will be given another set of options with each request.
- if (!options.buildModePersistentWorker) {
- printAndFail(
- 'The option --build-mode also requires --dart-sdk-summary '
- 'to be specified.',
- );
- return null; // Only reachable in testing.
- }
- }
- } else {
- if (options.buildModePersistentWorker) {
- printAndFail(
- 'The option --persistent_worker can be used only '
- 'together with --build-mode.',
- );
- return null; // Only reachable in testing.
- }
- }
-
return options;
}
- /// Preprocess the given list of command line [args].
- /// If the final arg is `@file_path` (Bazel worker mode),
- /// then read in all the lines of that file and add those as args.
- /// Always returns a new modifiable list.
- static List<String> preprocessArgs(
- ResourceProvider provider, List<String> args) {
- args = List.from(args);
- if (args.isEmpty) {
- return args;
- }
- var lastArg = args.last;
- if (lastArg.startsWith('@')) {
- var argsFile = provider.getFile(lastArg.substring(1));
- try {
- args.removeLast();
- args.addAll(argsFile
- .readAsStringSync()
- .replaceAll('\r\n', '\n')
- .replaceAll('\r', '\n')
- .split('\n')
- .where((String line) => line.isNotEmpty));
- } on FileSystemException catch (e) {
- throw Exception('Failed to read file specified by $lastArg : $e');
- }
- }
- return args;
- }
-
/// Use the command-line [args] to create a context builder options.
static ContextBuilderOptions _createContextBuilderOptions(
ResourceProvider resourceProvider,
@@ -428,9 +323,6 @@
//
// File locations.
//
- builderOptions.dartSdkSummaryPath = absoluteNormalizedPath(
- cast(args[_sdkSummaryPathOption]),
- );
builderOptions.defaultAnalysisOptionsFilePath = absoluteNormalizedPath(
cast(args[_analysisOptionsFileOption]),
);
@@ -515,8 +407,6 @@
help: 'The path to the package resolution configuration file, which '
'supplies a mapping of package names\nto paths.',
hide: ddc);
- parser.addOption(_sdkSummaryPathOption,
- help: 'The path to the Dart SDK summary file.', hide: hide);
parser.addFlag(_enableInitializingFormalAccessFlag,
help:
'Enable support for allowing access to field formal parameters in a '
@@ -547,8 +437,6 @@
ResourceProvider resourceProvider,
List<String> args,
) {
- args = preprocessArgs(PhysicalResourceProvider.INSTANCE, args);
-
var verbose = args.contains('-v') || args.contains('--verbose');
var hide = !verbose;
@@ -593,56 +481,10 @@
help: 'Verbose output.',
negatable: false);
- // Build mode options.
- if (!hide) {
- parser.addSeparator('Build mode flags:');
- }
-
- parser
- ..addFlag('persistent_worker',
- help: 'Enable Bazel persistent worker mode.',
- defaultsTo: false,
- negatable: false,
- hide: hide)
- ..addOption('build-analysis-output',
- help: 'Specifies the path to the file where analysis results should '
- 'be written.',
- hide: hide)
- ..addFlag('build-mode',
- help: 'Run in build mode; '
- 'this is used to generate analyzer summaries for build systems.',
- defaultsTo: false,
- negatable: false,
- hide: hide)
- ..addMultiOption('build-summary-input',
- help: 'Path to a linked summary file that contains information from '
- 'a previous analysis run; may be specified multiple times.',
- hide: hide)
- ..addOption('build-summary-output',
- help: 'Specifies the path to the file where the full summary '
- 'information should be written.',
- hide: hide)
- ..addOption('build-summary-output-semantic',
- help: 'Specifies the path to the file where the semantic summary '
- 'information should be written.',
- hide: hide)
- ..addFlag('build-summary-only',
- help: 'Disable analysis (only generate summaries).',
- defaultsTo: false,
- negatable: false,
- hide: hide)
- ..addFlag('build-suppress-exit-code',
- help: 'Exit with code 0 even if errors are found.',
- defaultsTo: false,
- negatable: false,
- hide: hide)
- ..addFlag('color',
- help: 'Use ansi colors when printing messages.',
- defaultsTo: ansi.terminalSupportsAnsi(),
- hide: hide)
- ..addOption('summary-deps-output',
- help: 'Path to a file to dump summary dependency info to.',
- hide: hide);
+ parser.addFlag('color',
+ help: 'Use ansi colors when printing messages.',
+ defaultsTo: ansi.terminalSupportsAnsi(),
+ hide: hide);
// Hidden flags.
if (!hide) {
@@ -736,21 +578,6 @@
}
var results = parser.parse(args);
- // Persistent worker.
- if (args.contains('--persistent_worker')) {
- var hasBuildMode = args.contains('--build-mode');
- var onlyDartSdkArg = args.length == 2 ||
- (args.length == 3 && args.any((a) => a.startsWith('--dart-sdk'))) ||
- (args.length == 4 && args.contains('--dart-sdk'));
- if (!(hasBuildMode && onlyDartSdkArg)) {
- printAndFail('The --persistent_worker flag should be used with and '
- 'only with the --build-mode flag, and possibly the --dart-sdk '
- 'option. Got: $args');
- return null; // Only reachable in testing.
- }
- return CommandLineOptions._fromArgs(resourceProvider, results);
- }
-
// Help requests.
if (cast(results['help'])) {
_showUsage(parser, fromHelp: true);
@@ -766,20 +593,12 @@
exitHandler(15);
return null; // Only reachable in testing.
}
- } else if (cast(results['persistent_worker'])) {
- if (results.rest.isNotEmpty) {
- errorSink.writeln(
- 'No source files expected in the persistent worker mode.');
- _showUsage(parser);
- exitHandler(15);
- return null; // Only reachable in testing.
- }
} else if (cast(results['version'])) {
outSink.writeln('$_binaryName version ${_getVersion()}');
exitHandler(0);
return null; // Only reachable in testing.
} else {
- if (results.rest.isEmpty && !cast<bool>(results['build-mode'])) {
+ if (results.rest.isEmpty) {
_showUsage(parser, fromHelp: true);
exitHandler(15);
return null; // Only reachable in testing.
diff --git a/pkg/analyzer_cli/lib/starter.dart b/pkg/analyzer_cli/lib/starter.dart
index ad8e268..4f04f28 100644
--- a/pkg/analyzer_cli/lib/starter.dart
+++ b/pkg/analyzer_cli/lib/starter.dart
@@ -2,8 +2,6 @@
// 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 'dart:isolate';
-
import 'package:analyzer_cli/src/driver.dart';
/// An object that can be used to start a command-line analysis. This class
@@ -16,8 +14,5 @@
factory CommandLineStarter() = Driver;
/// Use the given command-line [arguments] to start this analyzer.
- ///
- /// If [sendPort] is provided it is used for bazel worker communication
- /// instead of stdin/stdout.
- Future<void> start(List<String> arguments, {SendPort sendPort});
+ Future<void> start(List<String> arguments);
}
diff --git a/pkg/analyzer_cli/pubspec.yaml b/pkg/analyzer_cli/pubspec.yaml
index da7989b..9ad9601 100644
--- a/pkg/analyzer_cli/pubspec.yaml
+++ b/pkg/analyzer_cli/pubspec.yaml
@@ -11,9 +11,6 @@
analyzer:
path: ../analyzer
args: '>=0.13.0 <2.0.0'
- bazel_worker: ^0.1.0
- collection: ^1.14.1
- convert: any
linter: ^0.1.16
meta:
path: ../meta
@@ -23,6 +20,5 @@
dev_dependencies:
pedantic: ^1.9.0
- protobuf: ^0.13.0
test_reflective_loader: ^0.1.8
test: ^1.0.0
diff --git a/pkg/analyzer_cli/test/all.dart b/pkg/analyzer_cli/test/all.dart
index 55beb94..c56ee1b 100644
--- a/pkg/analyzer_cli/test/all.dart
+++ b/pkg/analyzer_cli/test/all.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
import 'analysis_options_test.dart' as analysis_options;
-import 'build_mode_test.dart' as build_mode;
import 'driver_test.dart' as driver;
import 'embedder_test.dart' as embedder;
import 'errors_reported_once_test.dart' as errors_reported_once;
@@ -16,7 +15,6 @@
void main() {
analysis_options.main();
- build_mode.main();
driver.main();
embedder.main();
errors_reported_once.main();
diff --git a/pkg/analyzer_cli/test/build_mode_test.dart b/pkg/analyzer_cli/test/build_mode_test.dart
deleted file mode 100644
index 5027e1f..0000000
--- a/pkg/analyzer_cli/test/build_mode_test.dart
+++ /dev/null
@@ -1,139 +0,0 @@
-// 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.
-
-import 'package:analyzer/file_system/memory_file_system.dart';
-import 'package:analyzer_cli/src/build_mode.dart';
-import 'package:analyzer_cli/src/driver.dart';
-import 'package:analyzer_cli/src/options.dart';
-import 'package:bazel_worker/bazel_worker.dart';
-import 'package:bazel_worker/testing.dart';
-import 'package:protobuf/protobuf.dart';
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-void main() {
- defineReflectiveTests(WorkerLoopTest);
-}
-
-typedef _TestWorkerLoopAnalyze = void Function(CommandLineOptions options);
-
-/// [AnalyzerWorkerLoop] for testing.
-class TestAnalyzerWorkerLoop extends AnalyzerWorkerLoop {
- final _TestWorkerLoopAnalyze _analyze;
-
- TestAnalyzerWorkerLoop(AsyncWorkerConnection connection, [this._analyze])
- : super(MemoryResourceProvider(), connection);
-
- @override
- Future<void> analyze(
- CommandLineOptions options, Map<String, WorkerInput> inputs) async {
- if (_analyze != null) {
- _analyze(options);
- }
- }
-}
-
-@reflectiveTest
-class WorkerLoopTest {
- final TestStdinAsync stdinStream = TestStdinAsync();
- final TestStdoutStream stdoutStream = TestStdoutStream();
- TestAsyncWorkerConnection connection;
-
- WorkerLoopTest() {
- connection = TestAsyncWorkerConnection(stdinStream, stdoutStream);
- }
-
- void setUp() {}
-
- Future<void> test_run() async {
- var request = WorkRequest();
- request.arguments.addAll([
- '--build-summary-input=/tmp/1.sum',
- '--build-summary-input=/tmp/2.sum',
- 'package:foo/foo.dart|/inputs/foo/lib/foo.dart',
- 'package:foo/bar.dart|/inputs/foo/lib/bar.dart',
- ]);
- stdinStream.addInputBytes(_serializeProto(request));
- stdinStream.close();
-
- await TestAnalyzerWorkerLoop(connection, (CommandLineOptions options) {
- expect(options.buildSummaryInputs,
- unorderedEquals(['/tmp/1.sum', '/tmp/2.sum']));
- expect(
- options.sourceFiles,
- unorderedEquals([
- 'package:foo/foo.dart|/inputs/foo/lib/foo.dart',
- 'package:foo/bar.dart|/inputs/foo/lib/bar.dart'
- ]));
- outSink.writeln('outSink a');
- errorSink.writeln('errorSink a');
- outSink.writeln('outSink b');
- errorSink.writeln('errorSink b');
- }).run();
- expect(connection.responses, hasLength(1));
-
- var response = connection.responses[0];
- expect(response.exitCode, EXIT_CODE_OK, reason: response.output);
- expect(
- response.output,
- allOf(contains('errorSink a'), contains('errorSink a'),
- contains('outSink a'), contains('outSink b')));
-
- // Check that a serialized version was written to std out.
- expect(stdoutStream.writes, hasLength(1));
- expect(stdoutStream.writes[0], _serializeProto(response));
- }
-
- Future<void> test_run_invalidOptions() async {
- var request = WorkRequest();
- request.arguments.addAll(['--unknown-option', '/foo.dart', '/bar.dart']);
- stdinStream.addInputBytes(_serializeProto(request));
- stdinStream.close();
- await TestAnalyzerWorkerLoop(connection).run();
- expect(connection.responses, hasLength(1));
-
- var response = connection.responses[0];
- expect(response.exitCode, EXIT_CODE_ERROR);
- expect(response.output, anything);
- }
-
- Future<void> test_run_invalidRequest_noArgumentsInputs() async {
- stdinStream.addInputBytes(_serializeProto(WorkRequest()));
- stdinStream.close();
-
- await TestAnalyzerWorkerLoop(connection).run();
- expect(connection.responses, hasLength(1));
-
- var response = connection.responses[0];
- expect(response.exitCode, EXIT_CODE_ERROR);
- expect(response.output, anything);
- }
-
- Future<void> test_run_invalidRequest_randomBytes() async {
- stdinStream.addInputBytes([1, 2, 3]);
- stdinStream.close();
- await TestAnalyzerWorkerLoop(connection).run();
- expect(connection.responses, hasLength(1));
-
- var response = connection.responses[0];
- expect(response.exitCode, EXIT_CODE_ERROR);
- expect(response.output, anything);
- }
-
- Future<void> test_run_stopAtEOF() async {
- stdinStream.close();
- await TestAnalyzerWorkerLoop(connection).run();
- }
-
- List<int> _serializeProto(GeneratedMessage message) {
- var buffer = message.writeToBuffer();
- var writer = CodedBufferWriter();
- writer.writeInt32NoTag(buffer.length);
-
- var result = <int>[];
- result.addAll(writer.toBuffer());
- result.addAll(buffer);
- return result;
- }
-}
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index 9cdec75..d2a575b 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -10,7 +10,6 @@
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/summary2/package_bundle_format.dart';
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
import 'package:analyzer/src/util/sdk.dart';
import 'package:analyzer_cli/src/ansi.dart' as ansi;
@@ -25,8 +24,6 @@
void main() {
defineReflectiveSuite(() {
- defineReflectiveTests(BuildModeTest);
- defineReflectiveTests(BuildModeSummaryDependenciesTest);
defineReflectiveTests(ExitCodesTest);
defineReflectiveTests(LinterTest);
defineReflectiveTests(NonDartFilesTest);
@@ -34,52 +31,6 @@
}, name: 'Driver');
}
-class AbstractBuildModeTest extends BaseTest {
- List<String> get _sdkSummaryArguments {
- var sdkPath = path.dirname(
- path.dirname(
- Platform.resolvedExecutable,
- ),
- );
-
- var dartSdkSummaryPath = path.join(
- sdkPath,
- 'lib',
- '_internal',
- 'strong.sum',
- );
-
- return ['--dart-sdk-summary', dartSdkSummaryPath];
- }
-
- Future<void> _doDrive(
- String filePath, {
- String sourceArgument,
- String fileUri,
- List<String> additionalArgs = const [],
- }) async {
- filePath = _posixToPlatformPath(filePath);
-
- var options = _posixToPlatformPath(
- 'data/options_tests_project/' + file_paths.analysisOptionsYaml,
- );
-
- var args = <String>[];
- args.add('--build-mode');
- args.add('--format=machine');
-
- args.addAll(_sdkSummaryArguments);
- args.addAll(additionalArgs);
-
- if (sourceArgument == null) {
- fileUri ??= 'file:///test_file.dart';
- sourceArgument = '$fileUri|$filePath';
- }
-
- await drive(sourceArgument, args: args, options: options);
- }
-}
-
class BaseTest {
static const emptyOptionsFile = 'data/empty_options.yaml';
@@ -174,597 +125,6 @@
}
@reflectiveTest
-class BuildModeSummaryDependenciesTest extends AbstractBuildModeTest {
- String tempDir;
-
- /// Any direct export is a dependency.
- Future<void> test_export_direct() async {
- await _withTempDir(() async {
- var a = await _buildPackage('a', [], 'class A {}');
- await _assertDependencies('c', [a], '''
-export 'package:a/a.dart';
-''', [a]);
- });
- }
-
- /// Imports of dependencies are not necessary dependencies.
- /// Here our dependency does not use its dependency.
- Future<void> test_import2_notUsed() async {
- await _withTempDir(() async {
- var a = await _buildPackage('a', [], '');
- var b = await _buildPackage('b', [a], '''
-import 'package:a/a.dart';
-''');
- await _assertDependencies('c', [a, b], '''
-import 'package:b/b.dart';
-''', [b]);
- });
- }
-
- Future<void> test_import2_usedAsFieldType() async {
- await _withTempDir(() async {
- var a = await _buildPackage('a', [], 'class A {}');
- var b = await _buildPackage('b', [a], '''
-import 'package:a/a.dart';
-class B {
- A f;
-}
-''');
-
- // We don't use `f`, so don't depend on "a".
- await _assertDependencies('c', [a, b], '''
-import 'package:b/b.dart';
-var x = B();
-''', [b]);
-
- // We use `f` for type inference.
- // So, dependency on "a".
- await _assertDependencies('c', [a, b], '''
-import 'package:b/b.dart';
-var x = B().f;
-''', [a, b]);
-
- // We reference `f` in initializer, but not for type inference.
- // So, no dependency on "a".
- await _assertDependencies('c', [a, b], '''
-import 'package:b/b.dart';
-Object x = B().f;
-''', [b]);
-
- // We perform full analysis, so request the type of `f`;
- // So, dependency on "a".
- await _assertDependencies(
- 'c',
- [a, b],
- '''
-import 'package:b/b.dart';
-Object x = B().f;
-''',
- [a, b],
- summaryOnly: false,
- );
- });
- }
-
- Future<void> test_import2_usedAsSupertype() async {
- await _withTempDir(() async {
- var a = await _buildPackage('a', [], 'class A {}');
- var b = await _buildPackage('b', [], 'class B {}');
- var c = await _buildPackage('c', [a], '''
-import 'package:a/a.dart';
-import 'package:b/b.dart';
-class C1 extends A {}
-class C2 extends B {}
-''');
-
- // When we instantiate `C1`, we ask `C1` for its type parameters.
- // So, we apply resolution to the whole `C1` header (not members).
- // So, we request `A` that is the superclass of `C1`.
- // So, dependency on "a".
- //
- // But we don't access `C2`, so don't use its supertype `B`.
- // So, no dependency on "b".
- await _assertDependencies('d', [a, b, c], '''
-import 'package:c/c.dart';
-C1 x;
-''', [a, c]);
- });
- }
-
- Future<void> test_import2_usedAsTopLevelVariableType() async {
- await _withTempDir(() async {
- var a = await _buildPackage('a', [], 'class A {}');
- var b = await _buildPackage('b', [a], '''
-import 'package:a/a.dart';
-A v;
-''');
-
- // We don't use `v`.
- // So, no dependency on "a".
- await _assertDependencies('c', [a, b], '''
-import 'package:b/b.dart';
-''', [b]);
-
- // We use `v` for type inference.
- // So, dependency on "a".
- await _assertDependencies('c', [a, b], '''
-import 'package:b/b.dart';
-var x = v;
-''', [a, b]);
-
- // We don't use `v` for type inference.
- // So, no dependency on "a".
- await _assertDependencies('c', [a, b], '''
-import 'package:b/b.dart';
-Object x = v;
-''', [b]);
-
- // We perform full analysis, and request the type of `v`.
- // So, dependency on "a".
- await _assertDependencies(
- 'c',
- [a, b],
- '''
-import 'package:b/b.dart';
-Object x = v;
-''',
- [a, b],
- summaryOnly: false,
- );
-
- // We use `v` in a method body.
- // So, no dependency on "a".
- await _assertDependencies('c', [a, b], '''
-import 'package:b/b.dart';
-main() {
- v;
-}
-''', [b]);
-
- // We perform full analysis, so ask for the type of `v`.
- // So, dependency on "a".
- await _assertDependencies(
- 'c',
- [a, b],
- '''
-import 'package:b/b.dart';
-main() {
- v;
-}
-''',
- [a, b],
- summaryOnly: false,
- );
- });
- }
-
- /// Any direct import is a dependency.
- Future<void> test_import_direct() async {
- await _withTempDir(() async {
- var a = await _buildPackage('a', [], '');
- var b = await _buildPackage('b', [], '');
- await _assertDependencies('c', [a, b], '''
-import 'package:a/a.dart';
-import 'package:b/b.dart';
-''', [a, b]);
- });
- }
-
- /// Exports of dependencies are dependencies.
- Future<void> test_import_export() async {
- await _withTempDir(() async {
- var a = await _buildPackage('a', [], 'class A {}');
- var b = await _buildPackage('b', [a], '''
-export 'package:a/a.dart';
-''');
- await _assertDependencies('c', [a, b], '''
-import 'package:b/b.dart';
-''', [a, b]);
- });
- }
-
- Future<void> _assertDependencies(
- String name,
- List<_DependencyPackage> inputPackages,
- String content,
- List<_DependencyPackage> expectedPackages, {
- bool summaryOnly = true,
- }) async {
- var pkg = await _buildPackage(name, inputPackages, content,
- summaryOnly: summaryOnly);
-
- var depString = File(pkg.dep).readAsStringSync();
- var expectedList = expectedPackages.map((p) => p.sum).toList();
- expect(depString.split('\n'), unorderedEquals(expectedList));
- }
-
- Future<_DependencyPackage> _buildPackage(
- String name,
- List<_DependencyPackage> inputPackages,
- String content, {
- bool summaryOnly = true,
- }) async {
- var filePath = path.join(tempDir, '$name.dart');
- File(filePath).writeAsStringSync(content);
- var pkg = _DependencyPackage(
- name: name,
- path: filePath,
- uri: 'package:$name/$name.dart',
- sum: path.join(tempDir, '$name.sum'),
- dep: path.join(tempDir, '$name.dep'),
- );
-
- var args = <String>[];
- if (summaryOnly) {
- args.add('--build-summary-only');
- }
- for (var input in inputPackages) {
- args.add('--build-summary-input=${input.sum}');
- }
- args.add('--build-summary-output=${pkg.sum}');
- args.add('--summary-deps-output=${pkg.dep}');
-
- await _doDrive(pkg.path, fileUri: pkg.uri, additionalArgs: args);
- expect(exitCode, 0);
-
- return pkg;
- }
-
- Future<void> _withTempDir(Future<void> Function() f) async {
- await withTempDirAsync((tempDir) async {
- this.tempDir = tempDir;
- File(path.join(tempDir, 'WORKSPACE')).writeAsStringSync('');
- await f();
- });
- }
-}
-
-@reflectiveTest
-class BuildModeTest extends AbstractBuildModeTest {
- Future<void> test_buildLinked() async {
- await withTempDirAsync((tempDir) async {
- File(path.join(tempDir, 'WORKSPACE')).writeAsStringSync('');
-
- var inputUri = 'package:dart.my/a.dart';
- var inputPath = path.join(tempDir, 'dart', 'my', 'lib', 'a.dart');
- (File(inputPath)..parent.createSync(recursive: true))
- .writeAsStringSync('');
-
- var outputPath = path.join(tempDir, 'test_file.dart.sum');
- await _doDrive(inputPath, fileUri: inputUri, additionalArgs: [
- '--build-summary-only',
- '--build-summary-output=$outputPath'
- ]);
-
- var output = File(outputPath);
- expect(output.existsSync(), isTrue);
- var bundle = PackageBundleReader(await output.readAsBytes());
-
- expect(_linkedLibraryUriList(bundle), [inputUri]);
- expect(
- _linkedLibraryUnitUriList(bundle, inputUri),
- [inputUri],
- );
-
- expect(exitCode, 0);
- });
- }
-
- Future<void> test_buildLinked_invalidPartUri() async {
- await withTempDirAsync((tempDir) async {
- File(path.join(tempDir, 'WORKSPACE')).writeAsStringSync('');
- var aDart = path.join(tempDir, 'a.dart');
-
- var aUri = 'package:aaa/a.dart';
-
- var aSum = path.join(tempDir, 'a.sum');
-
- File(aDart).writeAsStringSync('''
-part '[invalid]';
-''');
-
- await _doDrive(aDart,
- fileUri: aUri, additionalArgs: ['--build-summary-output=$aSum']);
- expect(exitCode, ErrorSeverity.ERROR.ordinal);
- var bytes = File(aSum).readAsBytesSync();
- var bundle = PackageBundleReader(bytes);
- expect(_linkedLibraryUriList(bundle), [aUri]);
- expect(_linkedLibraryUnitUriList(bundle, aUri), [aUri]);
- });
- }
-
- Future<void> test_buildSuppressExitCode_fail_whenFileNotFound() async {
- await withTempDirAsync((tempDir) async {
- File(path.join(tempDir, 'WORKSPACE')).writeAsStringSync('');
-
- await _doDrive(path.join(tempDir, 'non_existent_file.dart'),
- additionalArgs: ['--build-suppress-exit-code']);
- expect(exitCode, isNot(0));
- });
- }
-
- Future<void> test_buildSuppressExitCode_success_evenIfHasError() async {
- await withTempDirAsync((tempDir) async {
- File(path.join(tempDir, 'WORKSPACE')).writeAsStringSync('');
-
- var inputUri = 'package:dart.my/a.dart';
- var inputPath = path.join(tempDir, 'dart', 'my', 'lib', 'a.dart');
- (File(inputPath)..parent.createSync(recursive: true))
- .writeAsStringSync('error');
-
- await _doDrive(inputPath, fileUri: inputUri, additionalArgs: [
- '--build-suppress-exit-code',
- ]);
- expect(exitCode, 0);
- });
- }
-
- Future<void> test_consumeLinked() async {
- await withTempDirAsync((tempDir) async {
- File(path.join(tempDir, 'WORKSPACE')).writeAsStringSync('');
-
- var aDart = path.join(tempDir, 'a.dart');
- var bDart = path.join(tempDir, 'b.dart');
- var cDart = path.join(tempDir, 'c.dart');
-
- var aUri = 'package:aaa/a.dart';
- var bUri = 'package:bbb/b.dart';
- var cUri = 'package:ccc/c.dart';
-
- var aSum = path.join(tempDir, 'a.sum');
- var bSum = path.join(tempDir, 'b.sum');
- var cSum = path.join(tempDir, 'c.sum');
-
- File(aDart).writeAsStringSync('class A {}');
- File(bDart).writeAsStringSync('''
-export 'package:aaa/a.dart';
-class B {}
-''');
- File(cDart).writeAsStringSync('''
-import 'package:bbb/b.dart';
-var a = new A();
-var b = new B();
-''');
-
- // Analyze package:aaa/a.dart and compute summary.
- {
- await _doDrive(aDart,
- fileUri: aUri, additionalArgs: ['--build-summary-output=$aSum']);
- expect(exitCode, 0);
- var bytes = File(aSum).readAsBytesSync();
- var bundle = PackageBundleReader(bytes);
- expect(_linkedLibraryUriList(bundle), [aUri]);
- expect(_linkedLibraryUnitUriList(bundle, aUri), [aUri]);
- }
-
- // Analyze package:bbb/b.dart and compute summary.
- {
- await _doDrive(bDart, fileUri: bUri, additionalArgs: [
- '--build-summary-input=$aSum',
- '--build-summary-output=$bSum'
- ]);
- expect(exitCode, 0);
- var bytes = File(bSum).readAsBytesSync();
- var bundle = PackageBundleReader(bytes);
- expect(_linkedLibraryUriList(bundle), [bUri]);
- expect(_linkedLibraryUnitUriList(bundle, bUri), [bUri]);
- }
-
- // Analyze package:ccc/c.dart and compute summary.
- {
- await _doDrive(cDart, fileUri: cUri, additionalArgs: [
- '--build-summary-input=$aSum,$bSum',
- '--build-summary-output=$cSum'
- ]);
- expect(exitCode, 0);
- var bytes = File(cSum).readAsBytesSync();
- var bundle = PackageBundleReader(bytes);
- expect(_linkedLibraryUriList(bundle), [cUri]);
- expect(_linkedLibraryUnitUriList(bundle, cUri), [cUri]);
- }
- });
- }
-
- Future<void> test_error_notUriPipePath() async {
- await withTempDirAsync((tempDir) async {
- File(path.join(tempDir, 'WORKSPACE')).writeAsStringSync('');
-
- var testDart = path.join(tempDir, 'test.dart');
- File(testDart).writeAsStringSync('var v = 42;');
-
- // We pass just path, not "uri|path", this is a fatal error.
- await _doDrive(
- testDart,
- additionalArgs: ['--build-mode', '--format=machine'],
- sourceArgument: testDart,
- );
- expect(exitCode, ErrorSeverity.ERROR.ordinal);
- });
- }
-
- Future<void> test_fail_whenHasError() async {
- await withTempDirAsync((tempDir) async {
- File(path.join(tempDir, 'WORKSPACE')).writeAsStringSync('');
-
- var inputUri = 'package:my/with_error.dart';
- var inputPath = path.join(tempDir, 'my', 'lib', 'with_error.dart');
- (File(inputPath)..parent.createSync(recursive: true))
- .writeAsStringSync('error');
-
- await _doDrive(inputPath, fileUri: inputUri);
- expect(exitCode, isNot(0));
- });
- }
-
- @FailingTest(reason: 'Why do we support this case?')
- Future<void> test_noInputs() async {
- await withTempDirAsync((tempDir) async {
- var outputPath = path.join(tempDir, 'test.sum');
-
- await driveMany([], args: [
- '--build-mode',
- '--format=machine',
- ..._sdkSummaryArguments,
- '--build-summary-only',
- '--build-summary-output=$outputPath',
- ]);
-
- var output = File(outputPath);
- expect(output.existsSync(), isTrue);
-
- expect(exitCode, 0);
- });
- }
-
- Future<void> test_noStatistics() async {
- await withTempDirAsync((tempDir) async {
- File(path.join(tempDir, 'WORKSPACE')).writeAsStringSync('');
-
- var inputUri = 'package:my/a.dart';
- var inputPath = path.join(tempDir, 'my', 'lib', 'a.dart');
- (File(inputPath)..parent.createSync(recursive: true))
- .writeAsStringSync('class A {}');
-
- await _doDrive(inputPath, fileUri: inputUri);
-
- // Should not print statistics summary.
- expect(outSink.toString(), isEmpty);
- expect(errorSink.toString(), isEmpty);
- expect(exitCode, 0);
- });
- }
-
- Future<void> test_onlyErrors_partFirst() async {
- await withTempDirAsync((tempDir) async {
- File(path.join(tempDir, 'WORKSPACE')).writeAsStringSync('');
-
- var aDart = path.join(tempDir, 'a.dart');
- var bDart = path.join(tempDir, 'b.dart');
-
- var aUri = 'package:aaa/a.dart';
- var bUri = 'package:aaa/b.dart';
-
- File(aDart).writeAsStringSync(r'''
-library lib;
-part 'b.dart';
-class A {}
-''');
- File(bDart).writeAsStringSync('''
-part of lib;
-class B {}
-var a = new A();
-var b = new B();
-''');
-
- // Analyze b.dart (part) and then a.dart (its library).
- // No errors should be reported - the part should know its library.
- await _doDrive(bDart, fileUri: bUri, additionalArgs: ['$aUri|$aDart']);
- expect(errorSink, isEmpty);
- });
- }
-
- Future<void> test_packageConfig_packagesOptions() async {
- await withTempDirAsync((tempDir) async {
- File(path.join(tempDir, 'WORKSPACE')).writeAsStringSync('');
-
- var packagesPath = path.join(tempDir, 'aaa.packages');
-
- var aaaRoot = path.join(tempDir, 'packages', 'aaa');
- var aPath = path.join(aaaRoot, 'lib', 'a.dart');
-
- var aUri = 'package:aaa/a.dart';
-
- File(packagesPath).createSync(recursive: true);
- File(packagesPath).writeAsStringSync('''
-{
- "configVersion": 2,
- "packages": [
- {
- "name": "aaa",
- "rootUri": "${path.toUri(aaaRoot)}",
- "packageUri": "lib/",
- "languageVersion": "2.4"
- }
- ]
-}
-''');
-
- File(aPath).createSync(recursive: true);
- File(aPath).writeAsStringSync(r'''
-extension E on int {}
-''');
-
- // Analyze package:aaa/a.dart and compute errors.
- await _doDrive(
- aPath,
- fileUri: aUri,
- additionalArgs: [
- '--packages=$packagesPath',
- ],
- );
- expect(exitCode, ErrorSeverity.ERROR.ordinal);
- expect(errorSink.toString(), contains('extension-methods'));
- });
- }
-
- Future<void> test_packageConfig_relativeToFile() async {
- await withTempDirAsync((tempDir) async {
- File(path.join(tempDir, 'WORKSPACE')).writeAsStringSync('');
-
- var packagesPath = path.join(tempDir, '.dart_tool/package_config.json');
-
- var aaaRoot = path.join(tempDir, 'packages', 'aaa');
- var aPath = path.join(aaaRoot, 'lib', 'a.dart');
-
- var aUri = 'package:aaa/a.dart';
-
- File(packagesPath).createSync(recursive: true);
- File(packagesPath).writeAsStringSync('''
-{
- "configVersion": 2,
- "packages": [
- {
- "name": "aaa",
- "rootUri": "${path.toUri(aaaRoot)}",
- "packageUri": "lib/",
- "languageVersion": "2.4"
- }
- ]
-}
-''');
-
- File(aPath).createSync(recursive: true);
- File(aPath).writeAsStringSync(r'''
-extension E on int {}
-''');
-
- // Analyze package:aaa/a.dart and compute errors.
- await _doDrive(
- aPath,
- fileUri: aUri,
- additionalArgs: [],
- );
- expect(exitCode, ErrorSeverity.ERROR.ordinal);
- expect(errorSink.toString(), contains('extension-methods'));
- });
- }
-
- Iterable<String> _linkedLibraryUnitUriList(
- PackageBundleReader bundle,
- String libraryUriStr,
- ) {
- var libraries = bundle.libraries;
- var library = libraries.singleWhere((l) => l.uriStr == libraryUriStr);
- return library.units.map((u) => u.uriStr).toList();
- }
-
- Iterable<String> _linkedLibraryUriList(PackageBundleReader bundle) {
- var libraries = bundle.libraries;
- return libraries.map((l) => l.uriStr).toList();
- }
-}
-
-@reflectiveTest
class ExitCodesTest extends BaseTest {
@SkippedTest(reason: 'Fails on bots, passes locally. Do not know why.')
Future<void> test_bazelWorkspace_relativePath() async {
@@ -1145,13 +505,3 @@
@override
dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
-
-class _DependencyPackage {
- final String name;
- final String path;
- final String uri;
- final String sum;
- final String dep;
-
- _DependencyPackage({this.name, this.path, this.uri, this.sum, this.dep});
-}
diff --git a/pkg/analyzer_cli/test/options_test.dart b/pkg/analyzer_cli/test/options_test.dart
index 3085269..10ab651 100644
--- a/pkg/analyzer_cli/test/options_test.dart
+++ b/pkg/analyzer_cli/test/options_test.dart
@@ -55,13 +55,6 @@
test('defaults', () {
var options = parse(['--dart-sdk', '.', 'foo.dart']);
expect(options, isNotNull);
- expect(options.buildMode, isFalse);
- expect(options.buildAnalysisOutput, isNull);
- expect(options.buildSummaryInputs, isEmpty);
- expect(options.buildSummaryOnly, isFalse);
- expect(options.buildSummaryOutput, isNull);
- expect(options.buildSummaryOutputSemantic, isNull);
- expect(options.buildSuppressExitCode, isFalse);
expect(options.dartSdkPath, isNotNull);
expect(options.disableCacheFlushing, isFalse);
expect(options.disableHints, isFalse);
@@ -270,37 +263,7 @@
});
});
});
- defineReflectiveTests(CommandLineOptions_BuildMode_Test);
-}
-
-@reflectiveTest
-class AbstractStatusTest {
- int lastExitHandlerCode;
- StringBuffer outStringBuffer = StringBuffer();
- StringBuffer errorStringBuffer = StringBuffer();
-
- StringSink savedOutSink, savedErrorSink;
- int savedExitCode;
- ExitHandler savedExitHandler;
-
- void setUp() {
- savedOutSink = outSink;
- savedErrorSink = errorSink;
- savedExitHandler = exitHandler;
- savedExitCode = exitCode;
- exitHandler = (int code) {
- lastExitHandlerCode = code;
- };
- outSink = outStringBuffer;
- errorSink = errorStringBuffer;
- }
-
- void tearDown() {
- outSink = savedOutSink;
- errorSink = savedErrorSink;
- exitCode = savedExitCode;
- exitHandler = savedExitHandler;
- }
+ defineReflectiveTests(ArgumentsTest);
}
@reflectiveTest
@@ -308,17 +271,6 @@
CommandLineOptions commandLineOptions;
String failureMessage;
- void test_dartSdkSummaryPath() {
- var expected = 'my_sdk.summary';
- _parse(['--dart-sdk-summary=$expected', 'a.dart']);
-
- var builderOptions = commandLineOptions.contextBuilderOptions;
- expect(
- builderOptions.dartSdkSummaryPath,
- endsWith(expected),
- );
- }
-
void test_declaredVariables() {
_parse(['-Da=0', '-Db=', 'a.dart']);
@@ -376,46 +328,6 @@
);
}
- void test_preprocessArgs_noReplacement() {
- var original = <String>['--xx' '--yy' 'baz'];
- var result = CommandLineOptions.preprocessArgs(resourceProvider, original);
- expect(result, orderedEquals(original));
- expect(identical(original, result), isFalse);
- }
-
- void test_preprocessArgs_replacement_exists() {
- var filePath = convertPath('/args.txt');
- newFile(filePath, content: '''
--a
---xx
-
-foo
-bar
-''');
- var result = CommandLineOptions.preprocessArgs(
- resourceProvider, ['--preserved', '@$filePath']);
- expect(result, orderedEquals(['--preserved', '-a', '--xx', 'foo', 'bar']));
- }
-
- void test_preprocessArgs_replacement_nonexistent() {
- var filePath = convertPath('/args.txt');
- var args = <String>['ignored', '@$filePath'];
- try {
- CommandLineOptions.preprocessArgs(resourceProvider, args);
- fail('Expect exception');
- } on Exception catch (e) {
- expect(e.toString(), contains('Failed to read file'));
- expect(e.toString(), contains('@$filePath'));
- }
- }
-
- void test_preprocessArgs_replacement_notLast() {
- var filePath = convertPath('/args.txt');
- var args = <String>['a', '@$filePath', 'b'];
- var result = CommandLineOptions.preprocessArgs(resourceProvider, args);
- expect(result, orderedEquals(args));
- }
-
void test_updateAnalysisOptions_defaultLanguageVersion() {
_applyAnalysisOptions(
['a.dart'],
@@ -656,140 +568,3 @@
);
}
}
-
-@reflectiveTest
-class CommandLineOptions_BuildMode_Test extends AbstractStatusTest {
- CommandLineOptions options;
- String failureMessage;
-
- void test_buildAnalysisOutput() {
- _parseBuildMode([
- '--build-analysis-output=//path/to/output.analysis',
- 'package:p/foo.dart|/path/to/p/lib/foo.dart',
- ]);
- expect(options.buildMode, isTrue);
- expect(options.buildAnalysisOutput, '//path/to/output.analysis');
- }
-
- void test_buildMode() {
- _parseBuildMode([
- 'package:p/foo.dart|/path/to/p/lib/foo.dart',
- ]);
- expect(options.buildMode, isTrue);
- }
-
- void test_buildMode_allowsEmptyFileList() {
- _parseBuildMode([]);
- expect(options.buildMode, isTrue);
- expect(options.sourceFiles, isEmpty);
- }
-
- void test_buildMode_noDartSdkSummary() {
- _parseBuildMode(
- ['package:aaa/a.dart|/aaa/lib/a.dart'],
- withDartSdkSummary: false,
- );
- expect(options, isNull);
- expect(failureMessage, contains('--dart-sdk-summary'));
- }
-
- void test_buildSummaryInputs_commaSeparated() {
- _parseBuildMode([
- '--build-summary-input=/path/to/aaa.sum,/path/to/bbb.sum',
- 'package:p/foo.dart|/path/to/p/lib/foo.dart',
- ]);
- expect(options.buildMode, isTrue);
- expect(
- options.buildSummaryInputs, ['/path/to/aaa.sum', '/path/to/bbb.sum']);
- }
-
- void test_buildSummaryInputs_commaSeparated_normalMode() {
- _parse([
- '--build-summary-input=/path/to/aaa.sum,/path/to/bbb.sum',
- '/path/to/p/lib/foo.dart',
- ]);
- expect(options.buildMode, isFalse);
- expect(
- options.buildSummaryInputs, ['/path/to/aaa.sum', '/path/to/bbb.sum']);
- }
-
- void test_buildSummaryInputs_separateFlags() {
- _parseBuildMode([
- '--build-summary-input=/path/to/aaa.sum',
- '--build-summary-input=/path/to/bbb.sum',
- 'package:p/foo.dart|/path/to/p/lib/foo.dart',
- ]);
- expect(options.buildMode, isTrue);
- expect(
- options.buildSummaryInputs, ['/path/to/aaa.sum', '/path/to/bbb.sum']);
- }
-
- void test_buildSummaryInputs_separateFlags_normalMode() {
- _parse([
- '--build-summary-input=/path/to/aaa.sum',
- '--build-summary-input=/path/to/bbb.sum',
- 'package:p/foo.dart|/path/to/p/lib/foo.dart',
- ]);
- expect(options.buildMode, isFalse);
- expect(
- options.buildSummaryInputs, ['/path/to/aaa.sum', '/path/to/bbb.sum']);
- }
-
- void test_buildSummaryOnly() {
- _parseBuildMode([
- '--build-summary-output=/path/to/aaa.sum',
- '--build-summary-only',
- 'package:p/foo.dart|/path/to/p/lib/foo.dart',
- ]);
- expect(options.buildMode, isTrue);
- expect(options.buildSummaryOnly, isTrue);
- }
-
- void test_buildSummaryOutput() {
- _parseBuildMode([
- '--build-summary-output=//path/to/output.sum',
- 'package:p/foo.dart|/path/to/p/lib/foo.dart',
- ]);
- expect(options.buildMode, isTrue);
- expect(options.buildSummaryOutput, '//path/to/output.sum');
- }
-
- void test_buildSummaryOutputSemantic() {
- _parseBuildMode([
- '--build-summary-output-semantic=//path/to/output.sum',
- 'package:p/foo.dart|/path/to/p/lib/foo.dart',
- ]);
- expect(options.buildMode, isTrue);
- expect(options.buildSummaryOutputSemantic, '//path/to/output.sum');
- }
-
- void test_buildSuppressExitCode() {
- _parseBuildMode([
- '--build-suppress-exit-code',
- 'package:p/foo.dart|/path/to/p/lib/foo.dart',
- ]);
- expect(options.buildMode, isTrue);
- expect(options.buildSuppressExitCode, isTrue);
- }
-
- void _parse(List<String> args) {
- var resourceProvider = PhysicalResourceProvider.INSTANCE;
- options =
- CommandLineOptions.parse(resourceProvider, args, printAndFail: (msg) {
- failureMessage = msg;
- });
- }
-
- void _parseBuildMode(List<String> specificArguments,
- {bool withDartSdkSummary = true}) {
- var args = [
- '--build-mode',
- if (withDartSdkSummary) ...[
- '--dart-sdk-summary',
- '/sdk/lib/strong.sum',
- ],
- ...specificArguments
- ];
- _parse(args);
- }
-}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_block.dart b/pkg/front_end/testcases/const_functions/const_functions_block.dart
index d7a303c..067a7c4 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_block.dart
+++ b/pkg/front_end/testcases/const_functions/const_functions_block.dart
@@ -4,8 +4,6 @@
// Tests blocks and scope with const functions.
-// SharedOptions=--enable-experiment=const-functions
-
import "package:expect/expect.dart";
void blockTest() {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart b/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart
index 7d2caf5..47dd6a1 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart
+++ b/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart
@@ -4,8 +4,6 @@
// Tests local function usage, some having references to other constant values.
-// SharedOptions=--enable-experiment=const-functions
-
import "package:expect/expect.dart";
int function1() {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart b/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart
index 3a3fc6f..345e14c 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart
@@ -4,8 +4,6 @@
// Tests variable assignments for const functions.
-// SharedOptions=--enable-experiment=const-functions
-
import "package:expect/expect.dart";
const var1 = varAssignmentTest(1);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart
index 691f46f..4cbaa94 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart
@@ -4,8 +4,6 @@
// Tests creating new local variables within const functions.
-// SharedOptions=--enable-experiment=const-functions
-
import "package:expect/expect.dart";
const var1 = function1(1, 2);
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.strong.transformed.expect
index cf33701..de3ed54 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.strong.transformed.expect
@@ -48,5 +48,5 @@
}
Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_variable_declarations.dart:48:23 -> IntConstant(-2)
+Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_variable_declarations.dart:46:23 -> IntConstant(-2)
Extra constant evaluation: evaluated: 20, effectively constant: 1
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.transformed.expect
index cf33701..de3ed54 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.transformed.expect
@@ -48,5 +48,5 @@
}
Extra constant evaluation status:
-Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_variable_declarations.dart:48:23 -> IntConstant(-2)
+Evaluated: MethodInvocation @ org-dartlang-testcase:///const_functions_variable_declarations.dart:46:23 -> IntConstant(-2)
Extra constant evaluation: evaluated: 20, effectively constant: 1
diff --git a/tools/VERSION b/tools/VERSION
index d465aa8..529971b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 13
PATCH 0
-PRERELEASE 133
+PRERELEASE 134
PRERELEASE_PATCH 0
\ No newline at end of file