Skip to content

Commit

Permalink
[_js_interop_checks] Migrate pkg/_js_interop_checks to null safety
Browse files Browse the repository at this point in the history
Closes dart-lang#46621

Change-Id: I1f60dc3e0341e564f8caa48551d8ec5f4308f2b3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/207131
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
  • Loading branch information
johnniwinther authored and commit-bot@chromium.org committed Jul 20, 2021
1 parent 970ea21 commit 5db640f
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 36 deletions.
4 changes: 2 additions & 2 deletions .dart_tool/package_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"constraint, update this by running tools/generate_package_config.dart."
],
"configVersion": 2,
"generated": "2021-07-19T10:44:52.605499",
"generated": "2021-07-20T10:43:52.568177",
"generator": "tools/generate_package_config.dart",
"packages": [
{
Expand Down Expand Up @@ -64,7 +64,7 @@
"name": "_js_interop_checks",
"rootUri": "../pkg/_js_interop_checks",
"packageUri": "lib/",
"languageVersion": "2.7"
"languageVersion": "2.12"
},
{
"name": "analysis_server",
Expand Down
39 changes: 19 additions & 20 deletions pkg/_js_interop_checks/lib/js_interop_checks.dart
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,14 @@ class JsInteropChecks extends RecursiveVisitor {
cls.name, superclass.name),
cls.fileOffset,
cls.name.length,
cls.location.file);
cls.fileUri);
} else if (!_classHasJSAnnotation && superHasJSAnnotation) {
_diagnosticsReporter.report(
templateJsInteropDartClassExtendsJSClass.withArguments(
cls.name, superclass.name),
cls.fileOffset,
cls.name.length,
cls.location.file);
cls.fileUri);
}
}
// Since this is a breaking check, it is language-versioned.
Expand All @@ -129,18 +129,18 @@ class JsInteropChecks extends RecursiveVisitor {
// a value for `className` that doesn't start with 'self.' or 'window.'.
var classRegexp = new RegExp(r'^((self|window)\.)*(?<className>.*)$');
var matches = classRegexp.allMatches(jsClass);
jsClass = matches.first.namedGroup('className');
jsClass = matches.first.namedGroup('className')!;
}
if (_nativeClasses.containsKey(jsClass)) {
var nativeClass = _nativeClasses[jsClass];
var nativeClass = _nativeClasses[jsClass];
if (nativeClass != null) {
_diagnosticsReporter.report(
templateJsInteropNativeClassInAnnotation.withArguments(
cls.name,
nativeClass.name,
nativeClass.enclosingLibrary.importUri.toString()),
cls.fileOffset,
cls.name.length,
cls.location.file);
cls.fileUri);
}
}
super.visitClass(cls);
Expand Down Expand Up @@ -180,32 +180,30 @@ class JsInteropChecks extends RecursiveVisitor {
messageJsInteropNonExternalMember,
procedure.fileOffset,
procedure.name.text.length,
procedure.location.file);
procedure.fileUri);
}
}
if (!_isJSInteropMember(procedure)) return;

if (!procedure.isStatic &&
(procedure.name.text == '[]=' || procedure.name.text == '[]')) {
_diagnosticsReporter.report(
messageJsInteropIndexNotSupported,
procedure.fileOffset,
procedure.name.text.length,
procedure.location.file);
_diagnosticsReporter.report(messageJsInteropIndexNotSupported,
procedure.fileOffset, procedure.name.text.length, procedure.fileUri);
}

var isAnonymousFactory =
_classHasAnonymousAnnotation && procedure.isFactory;

if (isAnonymousFactory) {
// ignore: unnecessary_null_comparison
if (procedure.function != null &&
!procedure.function.positionalParameters.isEmpty) {
var firstPositionalParam = procedure.function.positionalParameters[0];
_diagnosticsReporter.report(
messageJsInteropAnonymousFactoryPositionalParameters,
firstPositionalParam.fileOffset,
firstPositionalParam.name.length,
firstPositionalParam.location.file);
firstPositionalParam.name!.length,
firstPositionalParam.location!.file);
}
} else {
// Only factory constructors for anonymous classes are allowed to have
Expand All @@ -225,7 +223,7 @@ class JsInteropChecks extends RecursiveVisitor {
messageJsInteropNonExternalConstructor,
constructor.fileOffset,
constructor.name.text.length,
constructor.location.file);
constructor.fileUri);
}
if (!_isJSInteropMember(constructor)) return;

Expand All @@ -234,13 +232,14 @@ class JsInteropChecks extends RecursiveVisitor {

/// Reports an error if [functionNode] has named parameters.
void _checkNoNamedParameters(FunctionNode functionNode) {
// ignore: unnecessary_null_comparison
if (functionNode != null && !functionNode.namedParameters.isEmpty) {
var firstNamedParam = functionNode.namedParameters[0];
_diagnosticsReporter.report(
messageJsInteropNamedParameters,
firstNamedParam.fileOffset,
firstNamedParam.name.length,
firstNamedParam.location.file);
firstNamedParam.name!.length,
firstNamedParam.location!.file);
}
}

Expand All @@ -255,10 +254,10 @@ class JsInteropChecks extends RecursiveVisitor {
// If in a class that is not JS interop, this member is not allowed to be
// JS interop.
_diagnosticsReporter.report(messageJsInteropEnclosingClassJSAnnotation,
member.fileOffset, member.name.text.length, member.location.file,
member.fileOffset, member.name.text.length, member.fileUri,
context: <LocatedMessage>[
messageJsInteropEnclosingClassJSAnnotationContext.withLocation(
enclosingClass.location.file,
enclosingClass.fileUri,
enclosingClass.fileOffset,
enclosingClass.name.length)
]);
Expand All @@ -274,7 +273,7 @@ class JsInteropChecks extends RecursiveVisitor {
messageJsInteropExternalMemberNotJSAnnotated,
member.fileOffset,
member.name.text.length,
member.location.file);
member.fileUri);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/_js_interop_checks/lib/src/js_interop.dart
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ bool _isNativeAnnotation(Expression value) {
///
/// This function works regardless of whether the CFE is evaluating constants,
/// or whether the constant is a field reference (such as "anonymous" above).
Class _annotationClass(Expression node) {
Class? _annotationClass(Expression node) {
if (node is ConstantExpression) {
var constant = node.constant;
if (constant is InstanceConstant) return constant.classNode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,26 +36,26 @@ class JsUtilOptimizer extends Transformer {

JsUtilOptimizer(this._coreTypes, ClassHierarchy hierarchy)
: _jsTarget =
_coreTypes.index.getTopLevelMember('dart:_foreign_helper', 'JS'),
_coreTypes.index.getTopLevelProcedure('dart:_foreign_helper', 'JS'),
_callMethodTarget =
_coreTypes.index.getTopLevelMember('dart:js_util', 'callMethod'),
_coreTypes.index.getTopLevelProcedure('dart:js_util', 'callMethod'),
_callMethodUncheckedTargets = List<Procedure>.generate(
5,
(i) => _coreTypes.index
.getTopLevelMember('dart:js_util', '_callMethodUnchecked$i')),
_getPropertyTarget =
_coreTypes.index.getTopLevelMember('dart:js_util', 'getProperty'),
_setPropertyTarget =
_coreTypes.index.getTopLevelMember('dart:js_util', 'setProperty'),
(i) => _coreTypes.index.getTopLevelProcedure(
'dart:js_util', '_callMethodUnchecked$i')),
_getPropertyTarget = _coreTypes.index
.getTopLevelProcedure('dart:js_util', 'getProperty'),
_setPropertyTarget = _coreTypes.index
.getTopLevelProcedure('dart:js_util', 'setProperty'),
_setPropertyUncheckedTarget = _coreTypes.index
.getTopLevelMember('dart:js_util', '_setPropertyUnchecked'),
.getTopLevelProcedure('dart:js_util', '_setPropertyUnchecked'),
_allowInteropTarget =
_coreTypes.index.getTopLevelMember('dart:js', 'allowInterop'),
_coreTypes.index.getTopLevelProcedure('dart:js', 'allowInterop'),
_allowedInteropJsUtilTargets = _allowedInteropJsUtilMembers.map(
(member) =>
_coreTypes.index.getTopLevelMember('dart:js_util', member)),
_coreTypes.index.getTopLevelProcedure('dart:js_util', member)),
_listEmptyFactory =
_coreTypes.index.getMember('dart:core', 'List', 'empty'),
_coreTypes.index.getProcedure('dart:core', 'List', 'empty'),
_staticTypeContext = StatefulStaticTypeContext.stacked(
TypeEnvironment(_coreTypes, hierarchy)) {}

Expand Down
2 changes: 1 addition & 1 deletion pkg/_js_interop_checks/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: _js_interop_checks
publish_to: none

environment:
sdk: '>=2.7.0 <3.0.0'
sdk: '>=2.12.0 <3.0.0'

dependencies:
_fe_analyzer_shared:
Expand Down

0 comments on commit 5db640f

Please sign in to comment.