Skip to content

Commit

Permalink
Enabled allowed experiments for the whole package, including bin/ and…
Browse files Browse the repository at this point in the history
… test/.

Change-Id: I617b80f0ea6a182d6e48eeb731c89cd5659cb567
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/152180
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
  • Loading branch information
scheglov authored and commit-bot@chromium.org committed Jun 23, 2020
1 parent 4d2b3b9 commit 6b630c3
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 16 deletions.
16 changes: 5 additions & 11 deletions pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
Expand Up @@ -44,19 +44,13 @@ class FeatureSetProvider {
}
}

if (uri.isScheme('package')) {
var pathSegments = uri.pathSegments;
if (pathSegments.isNotEmpty) {
var packageName = pathSegments.first;
var experiments = _allowedExperiments.forPackage(packageName);
if (experiments != null) {
return FeatureSet.fromEnableFlags(experiments);
}
}
}

var package = _packages.packageForPath(path);
if (package != null) {
var experiments = _allowedExperiments.forPackage(package.name);
if (experiments != null) {
return FeatureSet.fromEnableFlags(experiments);
}

return _packageDefaultFeatureSet;
}

Expand Down
Expand Up @@ -85,8 +85,12 @@ class FeatureSetProviderTest with ResourceProviderMixin {
);

_assertNonNullableForPath('/packages/aaa/lib/a.dart', true);
_assertNonNullableForPath('/packages/aaa/bin/b.dart', true);
_assertNonNullableForPath('/packages/aaa/test/c.dart', true);

_assertNonNullableForPath('/packages/bbb/lib/b.dart', false);
_assertNonNullableForPath('/packages/bbb/lib/a.dart', false);
_assertNonNullableForPath('/packages/bbb/bin/b.dart', false);
_assertNonNullableForPath('/packages/bbb/test/c.dart', false);

_assertNonNullableForPath('/other/file.dart', false);
}
Expand Down
85 changes: 81 additions & 4 deletions pkg/analyzer/test/src/dart/resolution/language_version_test.dart
Expand Up @@ -8,6 +8,8 @@ import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer/src/dart/error/syntactic_errors.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/test_utilities/find_element.dart';
import 'package:analyzer/src/test_utilities/find_node.dart';
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';

Expand Down Expand Up @@ -115,7 +117,40 @@ class NullSafetyUsingAllowedExperimentsTest extends _FeaturesTest {
@override
bool get typeToStringWithNullability => true;

test_jsonConfig_disable() async {
test_jsonConfig_disable_bin() async {
_configureAllowedExperimentsTestNullSafety();

_configureTestWithJsonConfig('''
{
"configVersion": 2,
"packages": [
{
"name": "test",
"rootUri": "../",
"packageUri": "lib/",
"languageVersion": "2.8"
}
]
}
''');

var path = convertPath('/test/bin/a.dart');
await _resolveFile(path, r'''
var x = 0;
''');
assertErrorsInList(result.errors, []);
assertType(findElement.topVar('x').type, 'int*');

// Upgrade the language version to `2.9`, so enabled Null Safety.
driver.changeFile(path);
await _resolveFile(path, r'''
// @dart = 2.9
var x = 0;
''');
assertType(findElement.topVar('x').type, 'int');
}

test_jsonConfig_disable_lib() async {
_configureAllowedExperimentsTestNullSafety();

_configureTestWithJsonConfig('''
Expand Down Expand Up @@ -146,7 +181,39 @@ var x = 0;
assertType(findElement.topVar('x').type, 'int');
}

test_jsonConfig_enable() async {
test_jsonConfig_enable_bin() async {
_configureAllowedExperimentsTestNullSafety();

_configureTestWithJsonConfig('''
{
"configVersion": 2,
"packages": [
{
"name": "test",
"rootUri": "../",
"packageUri": "lib/"
}
]
}
''');

var path = convertPath('/test/bin/a.dart');
await _resolveFile(path, r'''
var x = 0;
''');
assertErrorsInList(result.errors, []);
assertType(findElement.topVar('x').type, 'int');

// Downgrade the version to `2.8`, so disable Null Safety.
driver.changeFile(path);
await _resolveFile(path, r'''
// @dart = 2.8
var x = 0;
''');
assertType(findElement.topVar('x').type, 'int*');
}

test_jsonConfig_enable_lib() async {
_configureAllowedExperimentsTestNullSafety();

_configureTestWithJsonConfig('''
Expand Down Expand Up @@ -203,8 +270,18 @@ var x = 0;
}

void _newSdkExperimentsFile(String content) {
newFile('$sdkRoot/lib/_internal/allowed_experiments.json',
content: content);
newFile(
'$sdkRoot/lib/_internal/allowed_experiments.json',
content: content,
);
}

Future<void> _resolveFile(String path, String content) async {
newFile(path, content: content);
result = await resolveFile(path);

findNode = FindNode(result.content, result.unit);
findElement = FindElement(result.unit);
}
}

Expand Down

0 comments on commit 6b630c3

Please sign in to comment.