mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 21:01:20 +00:00
[cfe] Add symbolic language versions for testing
Change-Id: I0f8bb91d30fac442d781710b24908cd933d86388 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/365142 Reviewed-by: Jens Johansen <jensj@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
parent
36fb02deca
commit
3c9d05f255
|
@ -6,6 +6,8 @@ import 'package:_fe_analyzer_shared/src/testing/annotated_code_helper.dart';
|
||||||
import 'package:_fe_analyzer_shared/src/testing/id.dart';
|
import 'package:_fe_analyzer_shared/src/testing/id.dart';
|
||||||
import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
|
import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
|
||||||
|
|
||||||
|
String _noProcessing(String text) => text;
|
||||||
|
|
||||||
Map<Uri, List<Annotation>> computeAnnotationsPerUri<T>(
|
Map<Uri, List<Annotation>> computeAnnotationsPerUri<T>(
|
||||||
Map<Uri, AnnotatedCode> annotatedCode,
|
Map<Uri, AnnotatedCode> annotatedCode,
|
||||||
Map<String, MemberAnnotations<IdValue>> expectedMaps,
|
Map<String, MemberAnnotations<IdValue>> expectedMaps,
|
||||||
|
@ -13,7 +15,8 @@ Map<Uri, List<Annotation>> computeAnnotationsPerUri<T>(
|
||||||
Map<String, Map<Uri, Map<Id, ActualData<T>>>> actualData,
|
Map<String, Map<Uri, Map<Id, ActualData<T>>>> actualData,
|
||||||
DataInterpreter<T> dataInterpreter,
|
DataInterpreter<T> dataInterpreter,
|
||||||
{Annotation? Function(Annotation? expected, Annotation? actual)? createDiff,
|
{Annotation? Function(Annotation? expected, Annotation? actual)? createDiff,
|
||||||
bool forceUpdate = false}) {
|
bool forceUpdate = false,
|
||||||
|
String Function(String) postProcessData = _noProcessing}) {
|
||||||
Set<Uri> uriSet = {};
|
Set<Uri> uriSet = {};
|
||||||
Set<String> actualMarkers = actualData.keys.toSet();
|
Set<String> actualMarkers = actualData.keys.toSet();
|
||||||
Map<Uri, Map<Id, Map<String, IdValue>>> idValuePerUri = {};
|
Map<Uri, Map<Id, Map<String, IdValue>>> idValuePerUri = {};
|
||||||
|
@ -64,7 +67,10 @@ Map<Uri, List<Annotation>> computeAnnotationsPerUri<T>(
|
||||||
// Annotations are not computed from synthesized code.
|
// Annotations are not computed from synthesized code.
|
||||||
result[uri] = _computeAnnotations(code, expectedMaps.keys, actualMarkers,
|
result[uri] = _computeAnnotations(code, expectedMaps.keys, actualMarkers,
|
||||||
idValuePerId, actualDataPerId, dataInterpreter,
|
idValuePerId, actualDataPerId, dataInterpreter,
|
||||||
sortMarkers: false, createDiff: createDiff, forceUpdate: forceUpdate);
|
sortMarkers: false,
|
||||||
|
createDiff: createDiff,
|
||||||
|
forceUpdate: forceUpdate,
|
||||||
|
postProcessData: postProcessData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -81,7 +87,8 @@ List<Annotation> _computeAnnotations<T>(
|
||||||
String defaultSuffix = '*/',
|
String defaultSuffix = '*/',
|
||||||
bool sortMarkers = true,
|
bool sortMarkers = true,
|
||||||
Annotation? Function(Annotation? expected, Annotation? actual)? createDiff,
|
Annotation? Function(Annotation? expected, Annotation? actual)? createDiff,
|
||||||
bool forceUpdate = false}) {
|
bool forceUpdate = false,
|
||||||
|
required String Function(String) postProcessData}) {
|
||||||
Annotation createAnnotationFromData(
|
Annotation createAnnotationFromData(
|
||||||
ActualData<T> actualData, Annotation? annotation) {
|
ActualData<T> actualData, Annotation? annotation) {
|
||||||
String getIndentationFromOffset(int offset) {
|
String getIndentationFromOffset(int offset) {
|
||||||
|
@ -142,8 +149,10 @@ List<Annotation> _computeAnnotations<T>(
|
||||||
annotation?.columnNo ?? -1,
|
annotation?.columnNo ?? -1,
|
||||||
offset,
|
offset,
|
||||||
prefix,
|
prefix,
|
||||||
IdValue.idToString(actualData.id,
|
IdValue.idToString(
|
||||||
dataInterpreter.getText(actualData.value, indentation)),
|
actualData.id,
|
||||||
|
postProcessData(
|
||||||
|
dataInterpreter.getText(actualData.value, indentation))),
|
||||||
suffix);
|
suffix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -263,6 +263,7 @@ TestData computeTestData(FileSystemEntity testFile,
|
||||||
{required Iterable<String> supportedMarkers,
|
{required Iterable<String> supportedMarkers,
|
||||||
required Uri createTestUri(Uri uri, String fileName),
|
required Uri createTestUri(Uri uri, String fileName),
|
||||||
required void onFailure(String message),
|
required void onFailure(String message),
|
||||||
|
String Function(String) preprocessFile = _noProcessing,
|
||||||
bool preserveWhitespaceInAnnotations = false,
|
bool preserveWhitespaceInAnnotations = false,
|
||||||
bool preserveInfixWhitespaceInAnnotations = false}) {
|
bool preserveInfixWhitespaceInAnnotations = false}) {
|
||||||
Uri? entryPoint;
|
Uri? entryPoint;
|
||||||
|
@ -296,7 +297,8 @@ TestData computeTestData(FileSystemEntity testFile,
|
||||||
throw new UnimplementedError();
|
throw new UnimplementedError();
|
||||||
}
|
}
|
||||||
|
|
||||||
String annotatedCode = new File.fromUri(mainTestFile!.uri).readAsStringSync();
|
String annotatedCode =
|
||||||
|
preprocessFile(new File.fromUri(mainTestFile!.uri).readAsStringSync());
|
||||||
Map<Uri, AnnotatedCode> code = {
|
Map<Uri, AnnotatedCode> code = {
|
||||||
entryPoint!:
|
entryPoint!:
|
||||||
new AnnotatedCode.fromText(annotatedCode, commentStart, commentEnd)
|
new AnnotatedCode.fromText(annotatedCode, commentStart, commentEnd)
|
||||||
|
@ -320,7 +322,7 @@ TestData computeTestData(FileSystemEntity testFile,
|
||||||
String libFileName = additionalFileData.key;
|
String libFileName = additionalFileData.key;
|
||||||
File libEntity = additionalFileData.value;
|
File libEntity = additionalFileData.value;
|
||||||
Uri libFileUri = createTestUri(libEntity.uri, libFileName);
|
Uri libFileUri = createTestUri(libEntity.uri, libFileName);
|
||||||
String libCode = libEntity.readAsStringSync();
|
String libCode = preprocessFile(libEntity.readAsStringSync());
|
||||||
AnnotatedCode annotatedLibCode =
|
AnnotatedCode annotatedLibCode =
|
||||||
new AnnotatedCode.fromText(libCode, commentStart, commentEnd);
|
new AnnotatedCode.fromText(libCode, commentStart, commentEnd);
|
||||||
memorySourceFiles[libFileUri.path] = annotatedLibCode.sourceCode;
|
memorySourceFiles[libFileUri.path] = annotatedLibCode.sourceCode;
|
||||||
|
@ -820,6 +822,8 @@ const List<Option> idTestOptions = [
|
||||||
Options.forceUpdate,
|
Options.forceUpdate,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
String _noProcessing(String s) => s;
|
||||||
|
|
||||||
/// Check code for all tests in [dataDir] using [runTest].
|
/// Check code for all tests in [dataDir] using [runTest].
|
||||||
Future<void> runTests<T>(Directory dataDir,
|
Future<void> runTests<T>(Directory dataDir,
|
||||||
{List<String> args = const <String>[],
|
{List<String> args = const <String>[],
|
||||||
|
@ -832,7 +836,9 @@ Future<void> runTests<T>(Directory dataDir,
|
||||||
List<String>? skipList,
|
List<String>? skipList,
|
||||||
Map<String, List<String>>? skipMap,
|
Map<String, List<String>>? skipMap,
|
||||||
bool preserveWhitespaceInAnnotations = false,
|
bool preserveWhitespaceInAnnotations = false,
|
||||||
bool preserveInfixWhitespaceInAnnotations = false}) async {
|
bool preserveInfixWhitespaceInAnnotations = false,
|
||||||
|
String Function(String) preprocessFile = _noProcessing,
|
||||||
|
String Function(String) postProcessData = _noProcessing}) async {
|
||||||
ParsedOptions parsedOptions = ParsedOptions.parse(args, idTestOptions);
|
ParsedOptions parsedOptions = ParsedOptions.parse(args, idTestOptions);
|
||||||
MarkerOptions markerOptions =
|
MarkerOptions markerOptions =
|
||||||
new MarkerOptions.fromDataDir(dataDir, shouldFindScript: shards == 1);
|
new MarkerOptions.fromDataDir(dataDir, shouldFindScript: shards == 1);
|
||||||
|
@ -903,7 +909,8 @@ Future<void> runTests<T>(Directory dataDir,
|
||||||
onFailure: onFailure,
|
onFailure: onFailure,
|
||||||
preserveWhitespaceInAnnotations: preserveWhitespaceInAnnotations,
|
preserveWhitespaceInAnnotations: preserveWhitespaceInAnnotations,
|
||||||
preserveInfixWhitespaceInAnnotations:
|
preserveInfixWhitespaceInAnnotations:
|
||||||
preserveInfixWhitespaceInAnnotations);
|
preserveInfixWhitespaceInAnnotations,
|
||||||
|
preprocessFile: preprocessFile);
|
||||||
print('Test: ${testData.testFileUri}');
|
print('Test: ${testData.testFileUri}');
|
||||||
|
|
||||||
Map<String, TestResult<T>> results = await runTest(markerOptions, testData,
|
Map<String, TestResult<T>> results = await runTest(markerOptions, testData,
|
||||||
|
@ -966,7 +973,8 @@ Future<void> runTests<T>(Directory dataDir,
|
||||||
testData.entryPoint,
|
testData.entryPoint,
|
||||||
actualData,
|
actualData,
|
||||||
dataInterpreter!,
|
dataInterpreter!,
|
||||||
forceUpdate: forceUpdate);
|
forceUpdate: forceUpdate,
|
||||||
|
postProcessData: postProcessData);
|
||||||
annotations.forEach((Uri uri, List<Annotation> annotations) {
|
annotations.forEach((Uri uri, List<Annotation> annotations) {
|
||||||
AnnotatedCode? code = testData.code[uri];
|
AnnotatedCode? code = testData.code[uri];
|
||||||
assert(code != null,
|
assert(code != null,
|
||||||
|
|
|
@ -74,6 +74,7 @@ import "incremental_utils.dart" as util;
|
||||||
import 'test_utils.dart';
|
import 'test_utils.dart';
|
||||||
import 'testing_utils.dart' show checkEnvironment;
|
import 'testing_utils.dart' show checkEnvironment;
|
||||||
import 'utils/io_utils.dart' show computeRepoDir;
|
import 'utils/io_utils.dart' show computeRepoDir;
|
||||||
|
import 'utils/symbolic_language_versions.dart';
|
||||||
import 'utils/values.dart';
|
import 'utils/values.dart';
|
||||||
|
|
||||||
void main([List<String> arguments = const []]) => internalMain(createContext,
|
void main([List<String> arguments = const []]) => internalMain(createContext,
|
||||||
|
@ -772,14 +773,6 @@ Future<Map<String, List<int>>> createModules(
|
||||||
return moduleResult;
|
return moduleResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
String doStringReplacements(String input) {
|
|
||||||
Version enableNonNullableVersion =
|
|
||||||
ExperimentalFlag.nonNullable.experimentEnabledVersion;
|
|
||||||
String output = input.replaceAll("%NNBD_VERSION_MARKER%",
|
|
||||||
"${enableNonNullableVersion.major}.${enableNonNullableVersion.minor}");
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
class ExpressionCompilation {
|
class ExpressionCompilation {
|
||||||
final bool errors;
|
final bool errors;
|
||||||
final bool warnings;
|
final bool warnings;
|
||||||
|
@ -1250,7 +1243,7 @@ class NewWorldTest {
|
||||||
packagesUri = uri;
|
packagesUri = uri;
|
||||||
}
|
}
|
||||||
if (world.enableStringReplacement) {
|
if (world.enableStringReplacement) {
|
||||||
data = doStringReplacements(data);
|
data = replaceMarkersWithVersions(data);
|
||||||
}
|
}
|
||||||
fs.entityForUri(uri).writeAsStringSync(data);
|
fs.entityForUri(uri).writeAsStringSync(data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library:
|
/*library:
|
||||||
languageVersion=2.8,
|
languageVersion=%CURRENT_VERSION_MARKER%,
|
||||||
packageUri=package:collection
|
packageUri=package:collection
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,6 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
method2() {}
|
method2() {}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library:
|
/*library:
|
||||||
languageVersion=2.8,
|
languageVersion=%CURRENT_VERSION_MARKER%,
|
||||||
packageUri=package:collection
|
packageUri=package:collection
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
import 'foo/bin/bin_file.dart';
|
import 'foo/bin/bin_file.dart';
|
||||||
import 'foo/test/test_file.dart';
|
import 'foo/test/test_file.dart';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
String foo() {
|
String foo() {
|
||||||
return "42";
|
return "42";
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
var result = foo();
|
var result = foo();
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
{
|
{
|
||||||
"name": "pack",
|
"name": "pack",
|
||||||
"rootUri": "../pack/lib/",
|
"rootUri": "../pack/lib/",
|
||||||
"languageVersion": "2.7"
|
"languageVersion": "%VERSION_MARKER2%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -1,3 +1,3 @@
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
import 'pack/web/pack.dart';
|
import 'pack/web/pack.dart';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
library pack;
|
library pack;
|
||||||
|
|
||||||
part /*error: errors=LanguageVersionMismatchInPart*/ 'package:pack/src/part.dart';
|
part /*error: errors=LanguageVersionMismatchInPart*/ 'package:pack/src/part.dart';
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"name": "pack",
|
"name": "pack",
|
||||||
"rootUri": "../",
|
"rootUri": "../",
|
||||||
"packageUri": "lib/",
|
"packageUri": "lib/",
|
||||||
"languageVersion": "2.7"
|
"languageVersion": "%VERSION_MARKER2%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
/*library:
|
/*library:
|
||||||
languageVersion=2.7,
|
languageVersion=%VERSION_MARKER2%,
|
||||||
packageUri=package:pack
|
packageUri=package:pack
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*library:
|
/*library:
|
||||||
languageVersion=2.7,
|
languageVersion=%VERSION_MARKER2%,
|
||||||
packageUri=package:pack
|
packageUri=package:pack
|
||||||
*/
|
*/
|
||||||
library pack;
|
library pack;
|
||||||
|
|
|
@ -3,11 +3,10 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*error: errors=LanguageVersionTooHigh*/
|
/*error: errors=LanguageVersionTooHigh*/
|
||||||
// @dart = 3.5
|
// @dart = %TOO_HIGH_VERSION_MARKER%
|
||||||
|
|
||||||
// If no valid language version is specified, we default to the most reason one.
|
// If no valid language version is specified, we default to the most recent one.
|
||||||
// In the tests this is hard-coded to 2.8.
|
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
main() {}
|
main() {}
|
||||||
|
|
|
@ -3,13 +3,13 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*error: errors=LanguageVersionTooHigh*/
|
/*error: errors=LanguageVersionTooHigh*/
|
||||||
// @dart = 3.5
|
// @dart = %TOO_HIGH_VERSION_MARKER%
|
||||||
|
|
||||||
// @dart = 2.5
|
// @dart = %VERSION_MARKER1%
|
||||||
|
|
||||||
// If the first language version specified is not a valid language version,
|
// If the first language version specified is not a valid language version,
|
||||||
// we default to the most reason one. In the tests this is hard-coded to 2.8.
|
// we default to the most recent one.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
main() {}
|
main() {}
|
||||||
|
|
|
@ -3,9 +3,8 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// If no language version is specified, and none if given in a
|
// If no language version is specified, and none if given in a
|
||||||
// .dart_tool/package_config.json file,
|
// .dart_tool/package_config.json file, we default to the most recent one.
|
||||||
// we default to the most reason one. In the tests this is hard-coded to 2.8.
|
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
main() {}
|
main() {}
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
|
|
||||||
// With several valid versions the first one wins.
|
// With several valid versions the first one wins.
|
||||||
|
|
||||||
// @dart = 2.5
|
// @dart = %VERSION_MARKER1%
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
main() {}
|
main() {}
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
|
|
||||||
// With several versions where the first one is valid, the first one wins.
|
// With several versions where the first one is valid, the first one wins.
|
||||||
|
|
||||||
// @dart = 2.5
|
// @dart = %VERSION_MARKER1%
|
||||||
// @dart = 42.5
|
// @dart = %TOO_HIGH_VERSION_MARKER%
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
main() {}
|
main() {}
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {}
|
main() {}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
{
|
{
|
||||||
"name": "foo",
|
"name": "foo",
|
||||||
"rootUri": "../lib/",
|
"rootUri": "../lib/",
|
||||||
"languageVersion": "2.5"
|
"languageVersion": "%VERSION_MARKER1%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
import 'foo2.dart';
|
import 'foo2.dart';
|
||||||
import 'foo3.dart';
|
import 'foo3.dart';
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
foo2() {
|
foo2() {
|
||||||
print("Hello from foo2!");
|
print("Hello from foo2!");
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// .dart_tool/package_config.json specifies 2.5, this library tries to go above
|
// .dart_tool/package_config.json specifies %VERSION_MARKER1%, this library
|
||||||
// that, which is fine.
|
// tries to go above that, which is fine.
|
||||||
|
|
||||||
// @dart = 2.6
|
// @dart = %VERSION_MARKER2%
|
||||||
|
|
||||||
/*library: languageVersion=2.6*/
|
/*library: languageVersion=%VERSION_MARKER2%*/
|
||||||
|
|
||||||
foo3() {
|
foo3() {
|
||||||
print("Hello from foo3!");
|
print("Hello from foo3!");
|
||||||
|
|
|
@ -2,15 +2,15 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// .dart_tool/package_config.json specifies 2.5, this library tries to go above
|
// .dart_tool/package_config.json specifies %VERSION_MARKER1%, this library
|
||||||
// that, which is fine, except it still has to be within the range of the sdk.
|
// tries to go above that, which is fine, except it still has to be within the
|
||||||
// The library stays on the .dart_tool/package_config.json specified one (2.5)
|
// range of the sdk. The library stays on the .dart_tool/package_config.json
|
||||||
// and an error is issued.
|
// specified one (%VERSION_MARKER1%) and an error is issued.
|
||||||
|
|
||||||
/*error: errors=LanguageVersionTooHigh*/
|
/*error: errors=LanguageVersionTooHigh*/
|
||||||
// @dart = 2.9
|
// @dart = %TOO_HIGH_VERSION_MARKER%
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
foo4() {
|
foo4() {
|
||||||
print("Hello from foo4!");
|
print("Hello from foo4!");
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
part 'foos_part.dart';
|
part 'foos_part.dart';
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,12 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
import 'package:foo/foo_with_part.dart';
|
import 'package:foo/foo_with_part.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
foo();
|
foo();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
import 'foo2.dart';
|
import 'foo2.dart';
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
foo2() {
|
foo2() {
|
||||||
print("Hello from foo2!");
|
print("Hello from foo2!");
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
foo();
|
foo();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
import 'foo2.dart';
|
import 'foo2.dart';
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
foo2() {
|
foo2() {
|
||||||
print("Hello from foo2!");
|
print("Hello from foo2!");
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
foo();
|
foo();
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"name": "foo",
|
"name": "foo",
|
||||||
"rootUri": "../lib/",
|
"rootUri": "../lib/",
|
||||||
"languageVersion": "arglebargle",
|
"languageVersion": "arglebargle",
|
||||||
"languageVersion": "2.5"
|
"languageVersion": "%VERSION_MARKER1%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
import 'foo2.dart';
|
import 'foo2.dart';
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
foo2() {
|
foo2() {
|
||||||
print("Hello from foo2!");
|
print("Hello from foo2!");
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
foo();
|
foo();
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
{
|
{
|
||||||
"name": "foo",
|
"name": "foo",
|
||||||
"rootUri": "../lib/",
|
"rootUri": "../lib/",
|
||||||
"languageVersion": "2.5",
|
"languageVersion": "%VERSION_MARKER1%",
|
||||||
"languageVersion": "arglebargle"
|
"languageVersion": "arglebargle"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
import 'foo2.dart';
|
import 'foo2.dart';
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
foo2() {
|
foo2() {
|
||||||
print("Hello from foo2!");
|
print("Hello from foo2!");
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
foo();
|
foo();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
import 'foo2.dart';
|
import 'foo2.dart';
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
foo2() {
|
foo2() {
|
||||||
print("Hello from foo2!");
|
print("Hello from foo2!");
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
foo();
|
foo();
|
||||||
|
|
|
@ -3,10 +3,9 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// If no language version is specified, and none if given in a
|
// If no language version is specified, and none if given in a
|
||||||
// .dart_tool/package_config.json file,
|
// .dart_tool/package_config.json file, we default to the most recent one.
|
||||||
// we default to the most reason one. In the tests this is hard-coded to 2.8.
|
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
foo() {
|
foo() {
|
||||||
print("Hello from foo!");
|
print("Hello from foo!");
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.5
|
// @dart = %VERSION_MARKER1%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
foo();
|
foo();
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"name": "foo",
|
"name": "foo",
|
||||||
"rootUri": "../",
|
"rootUri": "../",
|
||||||
"packageUri": "lib/",
|
"packageUri": "lib/",
|
||||||
"languageVersion": "2.5"
|
"languageVersion": "%VERSION_MARKER1%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
foo() {
|
foo() {
|
||||||
print("Hello from foo!");
|
print("Hello from foo!");
|
||||||
|
|
|
@ -7,7 +7,7 @@ import 'package:foo/foo.dart';
|
||||||
// Version comes from the package foo having this file in it's root uri.
|
// Version comes from the package foo having this file in it's root uri.
|
||||||
|
|
||||||
/*library:
|
/*library:
|
||||||
languageVersion=2.5,
|
languageVersion=%VERSION_MARKER1%,
|
||||||
packageUri=package:foo
|
packageUri=package:foo
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
{
|
{
|
||||||
"name": "foo",
|
"name": "foo",
|
||||||
"rootUri": "../lib/",
|
"rootUri": "../lib/",
|
||||||
"languageVersion": "2.5"
|
"languageVersion": "%VERSION_MARKER1%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
foo() {
|
foo() {
|
||||||
print("Hello from foo!");
|
print("Hello from foo!");
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
foo();
|
foo();
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
{
|
{
|
||||||
"name": "foo",
|
"name": "foo",
|
||||||
"rootUri": "../lib/",
|
"rootUri": "../lib/",
|
||||||
"languageVersion": "2.9"
|
"languageVersion": "%TOO_HIGH_VERSION_MARKER%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
import 'foo2.dart';
|
import 'foo2.dart';
|
||||||
import 'foo3.dart';
|
import 'foo3.dart';
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*error: errors=LanguageVersionTooHigh*/
|
/*error: errors=LanguageVersionTooHigh*/
|
||||||
// @dart = 2.9
|
// @dart = %TOO_HIGH_VERSION_MARKER%
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
foo2() {
|
foo2() {
|
||||||
print("Hello from foo2!");
|
print("Hello from foo2!");
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.7
|
// @dart = %VERSION_MARKER2%
|
||||||
|
|
||||||
/*library: languageVersion=2.7*/
|
/*library: languageVersion=%VERSION_MARKER2%*/
|
||||||
|
|
||||||
foo3() {
|
foo3() {
|
||||||
print("Hello from foo3!");
|
print("Hello from foo3!");
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
foo();
|
foo();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library:
|
/*library:
|
||||||
languageVersion=2.8,
|
languageVersion=%CURRENT_VERSION_MARKER%,
|
||||||
packageUri=package:foo
|
packageUri=package:foo
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,6 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
method2() {}
|
method2() {}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library:
|
/*library:
|
||||||
languageVersion=2.8,
|
languageVersion=%CURRENT_VERSION_MARKER%,
|
||||||
packageUri=package:foo
|
packageUri=package:foo
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
// Test that bin and test files within the root folder of a package are
|
// Test that bin and test files within the root folder of a package are
|
||||||
// associated with the package.
|
// associated with the package.
|
||||||
|
|
|
@ -2,6 +2,6 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
method1() {}
|
method1() {}
|
||||||
|
|
|
@ -2,6 +2,6 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
method2() {}
|
method2() {}
|
||||||
|
|
|
@ -2,6 +2,6 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
method3() {}
|
method3() {}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
// Test that bin and test files within the root folder of a package are
|
// Test that bin and test files within the root folder of a package are
|
||||||
// associated with the package.
|
// associated with the package.
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.5
|
// @dart = %VERSION_MARKER1%
|
||||||
|
|
||||||
part 'part.dart';
|
part 'part.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
// foo();
|
// foo();
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.5
|
// @dart = %VERSION_MARKER1%
|
||||||
|
|
||||||
part of 'main.dart';
|
part of 'main.dart';
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.5
|
// @dart = %VERSION_MARKER1%
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
part 'part.dart';
|
part 'part.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
// foo();
|
// foo();
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.5
|
// @dart = %VERSION_MARKER1%
|
||||||
|
|
||||||
part of 'main.dart';
|
part of 'main.dart';
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.5
|
// @dart = %VERSION_MARKER1%
|
||||||
|
|
||||||
part /*error: errors=LanguageVersionMismatchInPart*/ 'part.dart';
|
part /*error: errors=LanguageVersionMismatchInPart*/ 'part.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
foo();
|
foo();
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
part of 'main.dart';
|
part of 'main.dart';
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
{
|
{
|
||||||
"name": "foo",
|
"name": "foo",
|
||||||
"rootUri": "../lib/",
|
"rootUri": "../lib/",
|
||||||
"languageVersion": "2.5"
|
"languageVersion": "%VERSION_MARKER1%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,14 +2,15 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// The library and its part is both technically at language version 2.5,
|
// The library and its part is both technically at language version
|
||||||
// but one is explicitly set, the other is not. That's an error.
|
// %VERSION_MARKER1%, but one is explicitly set, the other is not. That's an
|
||||||
|
// error.
|
||||||
|
|
||||||
// @dart = 2.5
|
// @dart = %VERSION_MARKER1%
|
||||||
|
|
||||||
part /*error: errors=LanguageVersionMismatchInPart*/ 'part.dart';
|
part /*error: errors=LanguageVersionMismatchInPart*/ 'part.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
foo() {
|
foo() {
|
||||||
bar();
|
bar();
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
main();
|
main();
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
{
|
{
|
||||||
"name": "foo",
|
"name": "foo",
|
||||||
"rootUri": "../lib/",
|
"rootUri": "../lib/",
|
||||||
"languageVersion": "2.5"
|
"languageVersion": "%VERSION_MARKER1%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,12 +2,13 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// The library and its part is both technically at language version 2.5,
|
// The library and its part is both technically at language version
|
||||||
// but one is explicitly set, the other is not. That's an error.
|
// %VERSION_MARKER1%, but one is explicitly set, the other is not. That's an
|
||||||
|
// error.
|
||||||
|
|
||||||
part /*error: errors=LanguageVersionMismatchInPart*/ 'part.dart';
|
part /*error: errors=LanguageVersionMismatchInPart*/ 'part.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.5*/
|
/*library: languageVersion=%VERSION_MARKER1%*/
|
||||||
|
|
||||||
foo() {
|
foo() {
|
||||||
bar();
|
bar();
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart = 2.5
|
// @dart = %VERSION_MARKER1%
|
||||||
|
|
||||||
part of 'foo.dart';
|
part of 'foo.dart';
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
main();
|
main();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
String foo() {
|
String foo() {
|
||||||
return "42";
|
return "42";
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
var result = foo();
|
var result = foo();
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import /*error: errors=UntranslatableUri*/ 'package:foo/foo.dart';
|
import /*error: errors=UntranslatableUri*/ 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
var result = /*error: errors=MethodNotFound*/ notNamedFoo();
|
var result = /*error: errors=MethodNotFound*/ notNamedFoo();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/*library: languageVersion=2.8*/
|
/*library: languageVersion=%CURRENT_VERSION_MARKER%*/
|
||||||
|
|
||||||
String foo() {
|
String foo() {
|
||||||
return "42";
|
return "42";
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import 'package:foo/foo.dart';
|
import 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
var result = foo();
|
var result = foo();
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Set version of this file (not technically in package) explicitly to test as
|
// Set version of this file (not technically in package) explicitly to test as
|
||||||
// much as possibly separately.
|
// much as possibly separately.
|
||||||
|
|
||||||
// @dart = 2.4
|
// @dart = %VERSION_MARKER0%
|
||||||
|
|
||||||
import /*error: errors=UntranslatableUri*/ 'package:foo/foo.dart';
|
import /*error: errors=UntranslatableUri*/ 'package:foo/foo.dart';
|
||||||
|
|
||||||
/*library: languageVersion=2.4*/
|
/*library: languageVersion=%VERSION_MARKER0%*/
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
var result = /*error: errors=MethodNotFound*/ notNamedFoo();
|
var result = /*error: errors=MethodNotFound*/ notNamedFoo();
|
||||||
|
|
|
@ -25,6 +25,8 @@ import 'package:front_end/src/testing/id_testing_helper.dart'
|
||||||
import 'package:front_end/src/testing/id_testing_utils.dart';
|
import 'package:front_end/src/testing/id_testing_utils.dart';
|
||||||
import 'package:kernel/ast.dart' show Component, Library, Version;
|
import 'package:kernel/ast.dart' show Component, Library, Version;
|
||||||
|
|
||||||
|
import '../utils/symbolic_language_versions.dart';
|
||||||
|
|
||||||
Future<void> main(List<String> args) async {
|
Future<void> main(List<String> args) async {
|
||||||
// Fix default/max major and minor version so we can test it.
|
// Fix default/max major and minor version so we can test it.
|
||||||
// This config sets it to 2.8.
|
// This config sets it to 2.8.
|
||||||
|
@ -40,7 +42,9 @@ Future<void> main(List<String> args) async {
|
||||||
skipList: [
|
skipList: [
|
||||||
// Two language versions specified, the last one is ok and is used here.
|
// Two language versions specified, the last one is ok and is used here.
|
||||||
"package_default_version_is_wrong_2",
|
"package_default_version_is_wrong_2",
|
||||||
]);
|
],
|
||||||
|
preprocessFile: replaceMarkersWithVersions,
|
||||||
|
postProcessData: replaceVersionsWithMarkers);
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestConfigWithLanguageVersion extends CfeTestConfig {
|
class TestConfigWithLanguageVersion extends CfeTestConfig {
|
||||||
|
@ -50,7 +54,8 @@ class TestConfigWithLanguageVersion extends CfeTestConfig {
|
||||||
@override
|
@override
|
||||||
CompilerOptions customizeCompilerOptions(
|
CompilerOptions customizeCompilerOptions(
|
||||||
CompilerOptions options, TestData testData) {
|
CompilerOptions options, TestData testData) {
|
||||||
options.currentSdkVersion = "2.8";
|
options.currentSdkVersion =
|
||||||
|
SymbolicLanguageVersion.currentVersion.version.toText();
|
||||||
|
|
||||||
File f = new File.fromUri(testData.testFileUri.resolve("test.options"));
|
File f = new File.fromUri(testData.testFileUri.resolve("test.options"));
|
||||||
if (f.existsSync()) {
|
if (f.existsSync()) {
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
|
|
||||||
/*cfe:nnbd.library: nnbd=true*/
|
/*cfe:nnbd.library: nnbd=true*/
|
||||||
|
|
||||||
// @dart=2.9999
|
// @dart=%NNBD_VERSION_MARKER%
|
||||||
|
|
||||||
external int method(int? i);
|
external int method(int? i);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart=2.9999
|
// @dart=%NNBD_VERSION_MARKER%
|
||||||
|
|
||||||
// ignore: import_internal_library
|
// ignore: import_internal_library
|
||||||
import 'dart:_internal';
|
import 'dart:_internal';
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
|
|
||||||
/*cfe:nnbd.library: nnbd=false*/
|
/*cfe:nnbd.library: nnbd=false*/
|
||||||
|
|
||||||
// @dart=2.6
|
// @dart=%LEGACY_VERSION_MARKER%
|
||||||
|
|
||||||
external int method(int i);
|
external int method(int i);
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*cfe:nnbd.error: message=The language version override has to be the same in the library and its patch(es).*/
|
/*cfe:nnbd.error: message=The language version override has to be the same in the library and its patch(es).*/
|
||||||
// @dart=2.9999
|
// @dart=%NNBD_VERSION_MARKER%
|
||||||
|
|
||||||
// ignore: import_internal_library
|
// ignore: import_internal_library
|
||||||
import 'dart:_internal';
|
import 'dart:_internal';
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
|
|
||||||
/*cfe:nnbd.library: nnbd=false*/
|
/*cfe:nnbd.library: nnbd=false*/
|
||||||
|
|
||||||
// @dart=2.6
|
// @dart=%LEGACY_VERSION_MARKER%
|
||||||
|
|
||||||
external int method();
|
external int method();
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// for details. All rights reserved. Use of this source code is governed by a
|
// 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.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// @dart=2.6
|
// @dart=%LEGACY_VERSION_MARKER%
|
||||||
|
|
||||||
// ignore: import_internal_library
|
// ignore: import_internal_library
|
||||||
import 'dart:_internal';
|
import 'dart:_internal';
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
|
|
||||||
/*cfe:nnbd.library: nnbd=true*/
|
/*cfe:nnbd.library: nnbd=true*/
|
||||||
|
|
||||||
// @dart=2.9999
|
// @dart=%NNBD_VERSION_MARKER%
|
||||||
|
|
||||||
external int method();
|
external int method();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// BSD-style license that can be found in the LICENSE file.
|
// BSD-style license that can be found in the LICENSE file.
|
||||||
|
|
||||||
/*cfe:nnbd.error: message=The language version override has to be the same in the library and its patch(es).*/
|
/*cfe:nnbd.error: message=The language version override has to be the same in the library and its patch(es).*/
|
||||||
// @dart=2.6
|
// @dart=%LEGACY_VERSION_MARKER%
|
||||||
|
|
||||||
// ignore: import_internal_library
|
// ignore: import_internal_library
|
||||||
import 'dart:_internal';
|
import 'dart:_internal';
|
||||||
|
|
|
@ -20,6 +20,7 @@ import 'package:front_end/src/fasta/scope.dart';
|
||||||
import 'package:front_end/src/testing/id_testing_helper.dart';
|
import 'package:front_end/src/testing/id_testing_helper.dart';
|
||||||
import 'package:front_end/src/testing/id_testing_utils.dart';
|
import 'package:front_end/src/testing/id_testing_utils.dart';
|
||||||
import 'package:kernel/ast.dart';
|
import 'package:kernel/ast.dart';
|
||||||
|
import '../utils/symbolic_language_versions.dart';
|
||||||
|
|
||||||
Future<void> main(List<String> args) async {
|
Future<void> main(List<String> args) async {
|
||||||
Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
|
Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
|
||||||
|
@ -46,7 +47,9 @@ Future<void> main(List<String> args) async {
|
||||||
'opt_out',
|
'opt_out',
|
||||||
'opt_out_patch',
|
'opt_out_patch',
|
||||||
]
|
]
|
||||||
});
|
},
|
||||||
|
preprocessFile: replaceMarkersWithVersions,
|
||||||
|
postProcessData: replaceVersionsWithMarkers);
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestConfigWithLanguageVersion extends CfeTestConfig {
|
class TestConfigWithLanguageVersion extends CfeTestConfig {
|
||||||
|
@ -61,7 +64,8 @@ class TestConfigWithLanguageVersion extends CfeTestConfig {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void customizeCompilerOptions(CompilerOptions options, TestData testData) {
|
void customizeCompilerOptions(CompilerOptions options, TestData testData) {
|
||||||
options.currentSdkVersion = "2.9999";
|
options.currentSdkVersion =
|
||||||
|
SymbolicLanguageVersion.nnbdVersion.version.toText();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
87
pkg/front_end/test/utils/symbolic_language_versions.dart
Normal file
87
pkg/front_end/test/utils/symbolic_language_versions.dart
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
// Copyright (c) 2024, 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:kernel/ast.dart';
|
||||||
|
|
||||||
|
/// Symbolic language versions for use in testing.
|
||||||
|
enum SymbolicLanguageVersion {
|
||||||
|
/// A valid language version the opts out of null safety.
|
||||||
|
legacyVersion("%LEGACY_VERSION_MARKER%", const Version(2, 6)),
|
||||||
|
|
||||||
|
/// A valid language version the opts in to null safety.
|
||||||
|
nnbdVersion("%NNBD_VERSION_MARKER%", const Version(2, 12)),
|
||||||
|
|
||||||
|
/// An invalid language version that is lower than [lowestVersion].
|
||||||
|
// TODO(johnniwinther): Report error on this.
|
||||||
|
tooLowVersion("%TOO_LOW_VERSION_MARKER%", const Version(1, 0)),
|
||||||
|
|
||||||
|
/// The lowest supported language version.
|
||||||
|
lowestVersion("%LOWEST_VERSION_MARKER%", const Version(2, 0)),
|
||||||
|
|
||||||
|
/// A valid language version larger than [lowestVersion] and lower than
|
||||||
|
/// [version1].
|
||||||
|
version0("%VERSION_MARKER0%", const Version(2, 4)),
|
||||||
|
|
||||||
|
/// A valid language version larger than [version0] and lower than
|
||||||
|
/// [version2].
|
||||||
|
version1("%VERSION_MARKER1%", const Version(2, 5)),
|
||||||
|
|
||||||
|
/// A valid language version larger than [version1] and lower than
|
||||||
|
/// [currentVersion].
|
||||||
|
version2("%VERSION_MARKER2%", const Version(2, 6)),
|
||||||
|
|
||||||
|
/// The current language version. This is also the highest supported version.
|
||||||
|
currentVersion("%CURRENT_VERSION_MARKER%", const Version(2, 8)),
|
||||||
|
|
||||||
|
/// An invalid language version that is higher than [currentVersion].
|
||||||
|
tooHighVersion("%TOO_HIGH_VERSION_MARKER%", const Version(2, 9999));
|
||||||
|
|
||||||
|
final String marker;
|
||||||
|
final Version version;
|
||||||
|
|
||||||
|
const SymbolicLanguageVersion(this.marker, this.version);
|
||||||
|
}
|
||||||
|
|
||||||
|
late final bool _validMarkers = _checkMarkers();
|
||||||
|
|
||||||
|
bool _checkMarkers() {
|
||||||
|
return SymbolicLanguageVersion.tooLowVersion.version <
|
||||||
|
SymbolicLanguageVersion.lowestVersion.version &&
|
||||||
|
SymbolicLanguageVersion.lowestVersion.version <
|
||||||
|
SymbolicLanguageVersion.version0.version &&
|
||||||
|
SymbolicLanguageVersion.version0.version <
|
||||||
|
SymbolicLanguageVersion.version1.version &&
|
||||||
|
SymbolicLanguageVersion.version1.version <
|
||||||
|
SymbolicLanguageVersion.version2.version &&
|
||||||
|
SymbolicLanguageVersion.version2.version <
|
||||||
|
SymbolicLanguageVersion.currentVersion.version &&
|
||||||
|
SymbolicLanguageVersion.currentVersion.version <
|
||||||
|
SymbolicLanguageVersion.tooHighVersion.version;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Replaces all occurrences of symbolic language markers in [text] with their
|
||||||
|
/// corresponding version as text.
|
||||||
|
String replaceMarkersWithVersions(String text) {
|
||||||
|
assert(_validMarkers);
|
||||||
|
for (SymbolicLanguageVersion symbolicVersion
|
||||||
|
in SymbolicLanguageVersion.values) {
|
||||||
|
String marker = symbolicVersion.marker;
|
||||||
|
Version version = symbolicVersion.version;
|
||||||
|
text = text.replaceAll(marker, version.toText());
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Replaces all occurrences language versions as text in [text] with the
|
||||||
|
/// corresponding symbolic language markers.
|
||||||
|
String replaceVersionsWithMarkers(String text) {
|
||||||
|
assert(_validMarkers);
|
||||||
|
for (SymbolicLanguageVersion symbolicVersion
|
||||||
|
in SymbolicLanguageVersion.values) {
|
||||||
|
String marker = symbolicVersion.marker;
|
||||||
|
Version version = symbolicVersion.version;
|
||||||
|
text = text.replaceAll(version.toText(), marker);
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
}
|
Loading…
Reference in a new issue