Version 2.19.0-275.0.dev
Merge 15be61ed9a0bdd88f6cf3718d51db1e20444116c into dev
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
index 4940609..bade581 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
@@ -393,8 +393,8 @@
}
}
} else if (node is CatchClause) {
- if (node.exceptionParameter2?.declaredElement == variable ||
- node.stackTraceParameter2?.declaredElement == variable) {
+ if (node.exceptionParameter?.declaredElement == variable ||
+ node.stackTraceParameter?.declaredElement == variable) {
return distance;
}
}
diff --git a/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart b/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
index 8c0782b..f3531f1 100644
--- a/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
+++ b/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
@@ -1013,7 +1013,7 @@
var struct = _KeywordConditionBlockStructure(
catchKeyword,
catchNode.leftParenthesis!,
- catchNode.exceptionParameter2!,
+ catchNode.exceptionParameter!,
catchNode.rightParenthesis!,
catchNode.body);
if (sb != null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_on_type.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_on_type.dart
index b2429f7..94f3b64 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_on_type.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_on_type.dart
@@ -26,12 +26,12 @@
var rightParenthesis = catchClause.rightParenthesis;
if (catchKeyword != null &&
catchClause.exceptionType == null &&
- catchClause.exceptionParameter2 == exceptionParameter &&
+ catchClause.exceptionParameter == exceptionParameter &&
rightParenthesis != null) {
var exceptionTypeName = exceptionParameter.name;
fixArguments.add(exceptionTypeName);
await builder.addDartFileEdit(file, (builder) {
- var stackTraceParameter = catchClause.stackTraceParameter2;
+ var stackTraceParameter = catchClause.stackTraceParameter;
if (stackTraceParameter != null) {
builder.addSimpleReplacement(
range.startStart(catchKeyword, stackTraceParameter),
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_clause.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_clause.dart
index a9117b9..f23d474 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_clause.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_clause.dart
@@ -39,7 +39,7 @@
return;
}
- if (catchClause.exceptionParameter2 == exceptionParameter) {
+ if (catchClause.exceptionParameter == exceptionParameter) {
await builder.addDartFileEdit(file, (builder) {
builder.addDeletion(range.startStart(catchKeyword, catchClause.body));
});
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_stack.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_stack.dart
index f1ca983..578ee6d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_stack.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_catch_stack.dart
@@ -34,12 +34,12 @@
return;
}
- final exceptionParameter = catchClause.exceptionParameter2;
+ final exceptionParameter = catchClause.exceptionParameter;
if (exceptionParameter == null) {
return;
}
- if (catchClause.stackTraceParameter2 == stackTraceParameter) {
+ if (catchClause.stackTraceParameter == stackTraceParameter) {
await builder.addDartFileEdit(file, (builder) {
builder.addDeletion(
range.endEnd(exceptionParameter, stackTraceParameter),
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
index c662700..7f084dc 100644
--- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
+++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
@@ -28,7 +28,7 @@
# - 206 for ParserErrorCodes.
# - 68 "needsFix"
# - 287 "hasFix"
-# - 57 "noFix"
+# - 55 "noFix"
AnalysisOptionsErrorCode.INCLUDED_FILE_PARSE_ERROR:
status: noFix
@@ -2599,14 +2599,6 @@
status: hasFix
StaticWarningCode.INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT:
status: hasFix
-StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED:
- status: noFix
- notes: |-
- This is a pre-null safety code. No need to add a fix.
-StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL:
- status: noFix
- notes: |-
- This is a pre-null safety code. No need to add a fix.
StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH:
status: hasFix
StaticWarningCode.UNNECESSARY_NON_NULL_ASSERTION:
diff --git a/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart b/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
index 293ec6c..59d04bd 100644
--- a/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
@@ -157,7 +157,7 @@
for (var catchClause in catchClauses) {
if (firstSelectedNode == catchClause ||
firstSelectedNode == catchClause.body ||
- firstSelectedNode == catchClause.exceptionParameter2) {
+ firstSelectedNode == catchClause.exceptionParameter) {
invalidSelection(
'Selection must either cover whole try statement or parts of try, catch, or finally block.');
}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/visible_ranges_computer.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/visible_ranges_computer.dart
index 6e8b38e..05b9fa7 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/visible_ranges_computer.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/visible_ranges_computer.dart
@@ -14,8 +14,8 @@
@override
void visitCatchClause(CatchClause node) {
- _addLocalVariable(node, node.exceptionParameter2?.declaredElement);
- _addLocalVariable(node, node.stackTraceParameter2?.declaredElement);
+ _addLocalVariable(node, node.exceptionParameter?.declaredElement);
+ _addLocalVariable(node, node.stackTraceParameter?.declaredElement);
node.body.accept(this);
}
diff --git a/pkg/analysis_server/tool/code_completion/code_metrics.dart b/pkg/analysis_server/tool/code_completion/code_metrics.dart
index 5aeddc0..6c5b6ad 100644
--- a/pkg/analysis_server/tool/code_completion/code_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/code_metrics.dart
@@ -294,8 +294,8 @@
void visitCatchClause(CatchClause node) {
_visitChildren(node, {
'exceptionType': node.exceptionType,
- 'exceptionParameter': node.exceptionParameter2,
- 'stackTraceParameter': node.stackTraceParameter2,
+ 'exceptionParameter': node.exceptionParameter,
+ 'stackTraceParameter': node.stackTraceParameter,
'body': node.body,
});
super.visitCatchClause(node);
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 2b96844..d025623 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,6 +1,8 @@
## 5.2.0-dev
* Deprecated `Element.enclosingElement3`, use `enclosingElement` instead.
* Deprecated `Directive.element2`, use `element` instead.
+* Deprecated `CatchClause.exceptionParameter2`, use `exceptionParameter` instead.
+* Deprecated `CatchClause.stackTraceParameter2`, use `stackTraceParameter` instead.
## 5.1.0
* Deprecated `AstNode.name2`, use `name` instead.
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 2debd2e..1d6aacc 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -924,6 +924,11 @@
/// Return the parameter whose value will be the exception that was thrown, or
/// `null` if there is no 'catch' keyword.
+ CatchClauseParameter? get exceptionParameter;
+
+ /// Return the parameter whose value will be the exception that was thrown, or
+ /// `null` if there is no 'catch' keyword.
+ @Deprecated('Use exceptionParameter instead')
CatchClauseParameter? get exceptionParameter2;
/// Return the type of exceptions caught by this catch clause, or `null` if
@@ -942,6 +947,11 @@
/// Return the parameter whose value will be the stack trace associated with
/// the exception, or `null` if there is no stack trace parameter.
+ CatchClauseParameter? get stackTraceParameter;
+
+ /// Return the parameter whose value will be the stack trace associated with
+ /// the exception, or `null` if there is no stack trace parameter.
+ @Deprecated('Use stackTraceParameter instead')
CatchClauseParameter? get stackTraceParameter2;
}
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index cfaaff0..7eae7fa 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -953,8 +953,6 @@
StaticWarningCode.DEAD_NULL_AWARE_EXPRESSION,
StaticWarningCode.INVALID_NULL_AWARE_OPERATOR,
StaticWarningCode.INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT,
- StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
- StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
StaticWarningCode.UNNECESSARY_NON_NULL_ASSERTION,
TodoCode.TODO,
diff --git a/pkg/analyzer/lib/src/clients/dart_style/rewrite_cascade.dart b/pkg/analyzer/lib/src/clients/dart_style/rewrite_cascade.dart
index 718a838..b33788c 100644
--- a/pkg/analyzer/lib/src/clients/dart_style/rewrite_cascade.dart
+++ b/pkg/analyzer/lib/src/clients/dart_style/rewrite_cascade.dart
@@ -36,24 +36,27 @@
/// Recursively insert [cascadeTarget] (the LHS of the cascade) into the
/// LHS of the assignment expression that used to be the cascade's RHS.
-Expression insertCascadeTargetIntoExpression({
+ExpressionImpl insertCascadeTargetIntoExpression({
required Expression expression,
required Expression cascadeTarget,
}) {
+ expression as ExpressionImpl;
+ cascadeTarget as ExpressionImpl;
+
// Base case: We've recursed as deep as possible.
if (expression == cascadeTarget) return cascadeTarget;
// Otherwise, copy `expression` and recurse into its LHS.
- if (expression is AssignmentExpression) {
+ if (expression is AssignmentExpressionImpl) {
return AssignmentExpressionImpl(
leftHandSide: insertCascadeTargetIntoExpression(
expression: expression.leftHandSide,
cascadeTarget: cascadeTarget,
- ) as ExpressionImpl,
+ ),
operator: expression.operator,
- rightHandSide: expression.rightHandSide as ExpressionImpl,
+ rightHandSide: expression.rightHandSide,
);
- } else if (expression is IndexExpression) {
+ } else if (expression is IndexExpressionImpl) {
var expressionTarget = expression.realTarget;
var question = expression.question;
@@ -63,7 +66,7 @@
question = _synthesizeToken(TokenType.QUESTION, expression.period!);
}
- return astFactory.indexExpressionForTarget2(
+ return IndexExpressionImpl.forTarget(
target: insertCascadeTargetIntoExpression(
expression: expressionTarget,
cascadeTarget: cascadeTarget,
@@ -79,7 +82,7 @@
target: insertCascadeTargetIntoExpression(
expression: expressionTarget,
cascadeTarget: cascadeTarget,
- ) as ExpressionImpl,
+ ),
// If we've reached the end, replace the `..` operator with `.`
operator: expressionTarget == cascadeTarget
? _synthesizeToken(TokenType.PERIOD, expression.operator!)
@@ -88,7 +91,7 @@
typeArguments: expression.typeArguments,
argumentList: expression.argumentList,
);
- } else if (expression is PropertyAccess) {
+ } else if (expression is PropertyAccessImpl) {
var expressionTarget = expression.realTarget;
return astFactory.propertyAccess(
insertCascadeTargetIntoExpression(
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index efb2984..ae640e2 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -1654,15 +1654,21 @@
Token get endToken => _body.endToken;
@override
- CatchClauseParameterImpl? get exceptionParameter2 {
+ CatchClauseParameterImpl? get exceptionParameter {
return _exceptionParameter;
}
- set exceptionParameter2(CatchClauseParameterImpl? parameter) {
+ set exceptionParameter(CatchClauseParameterImpl? parameter) {
_exceptionParameter = parameter;
_becomeParentOf(parameter);
}
+ @Deprecated('Use exceptionParameter instead')
+ @override
+ CatchClauseParameterImpl? get exceptionParameter2 {
+ return exceptionParameter;
+ }
+
@override
TypeAnnotationImpl? get exceptionType => _exceptionType;
@@ -1671,24 +1677,30 @@
}
@override
- CatchClauseParameterImpl? get stackTraceParameter2 {
+ CatchClauseParameterImpl? get stackTraceParameter {
return _stackTraceParameter;
}
- set stackTraceParameter2(CatchClauseParameterImpl? parameter) {
+ set stackTraceParameter(CatchClauseParameterImpl? parameter) {
_stackTraceParameter = parameter;
_becomeParentOf(parameter);
}
+ @Deprecated('Use stackTraceParameter instead')
+ @override
+ CatchClauseParameterImpl? get stackTraceParameter2 {
+ return stackTraceParameter;
+ }
+
@override
ChildEntities get _childEntities => ChildEntities()
..addToken('onKeyword', onKeyword)
..addNode('exceptionType', exceptionType)
..addToken('catchKeyword', catchKeyword)
..addToken('leftParenthesis', leftParenthesis)
- ..addNode('exceptionParameter', exceptionParameter2)
+ ..addNode('exceptionParameter', exceptionParameter)
..addToken('comma', comma)
- ..addNode('stackTraceParameter', stackTraceParameter2)
+ ..addNode('stackTraceParameter', stackTraceParameter)
..addToken('rightParenthesis', rightParenthesis)
..addNode('body', body);
@@ -2771,8 +2783,9 @@
Token get endToken => expression.endToken;
@override
- ChildEntities get _childEntities =>
- super._childEntities..addNode('expression', expression);
+ ChildEntities get _childEntities => super._childEntities
+ ..addToken('const', constKeyword)
+ ..addNode('expression', expression);
@override
E? accept<E>(AstVisitor<E> visitor) => visitor.visitConstantPattern(this);
@@ -4881,20 +4894,22 @@
/// [period] can be `null` if the keyword 'this' was not provided. The
/// [parameters] can be `null` if this is not a function-typed field formal
/// parameter.
- FieldFormalParameterImpl(
- CommentImpl? comment,
- List<Annotation>? metadata,
- Token? covariantKeyword,
- Token? requiredKeyword,
- this.keyword,
- this._type,
- this.thisKeyword,
- this.period,
- Token name,
- this._typeParameters,
- this._parameters,
- this.question)
- : super(comment, metadata, covariantKeyword, requiredKeyword, name) {
+ FieldFormalParameterImpl({
+ required super.comment,
+ required super.metadata,
+ required super.covariantKeyword,
+ required super.requiredKeyword,
+ required this.keyword,
+ required TypeAnnotationImpl? type,
+ required this.thisKeyword,
+ required this.period,
+ required super.name,
+ required TypeParameterListImpl? typeParameters,
+ required FormalParameterListImpl? parameters,
+ required this.question,
+ }) : _type = type,
+ _typeParameters = typeParameters,
+ _parameters = parameters {
_becomeParentOf(_type);
_becomeParentOf(_typeParameters);
_becomeParentOf(_parameters);
@@ -6203,17 +6218,19 @@
/// [comment] and [metadata] can be `null` if the parameter does not have the
/// corresponding attribute. The [returnType] can be `null` if no return type
/// was specified.
- FunctionTypedFormalParameterImpl(
- CommentImpl? comment,
- List<Annotation>? metadata,
- Token? covariantKeyword,
- Token? requiredKeyword,
- this._returnType,
- Token name,
- this._typeParameters,
- this._parameters,
- this.question)
- : super(comment, metadata, covariantKeyword, requiredKeyword, name) {
+ FunctionTypedFormalParameterImpl({
+ required super.comment,
+ required super.metadata,
+ required super.covariantKeyword,
+ required super.requiredKeyword,
+ required TypeAnnotationImpl? returnType,
+ required super.name,
+ required TypeParameterListImpl? typeParameters,
+ required FormalParameterListImpl parameters,
+ required this.question,
+ }) : _returnType = returnType,
+ _typeParameters = typeParameters,
+ _parameters = parameters {
_becomeParentOf(_returnType);
_becomeParentOf(_typeParameters);
_becomeParentOf(_parameters);
@@ -7095,15 +7112,26 @@
/// Initialize a newly created index expression that is a child of a cascade
/// expression.
- IndexExpressionImpl.forCascade(this.period, this.question, this.leftBracket,
- this._index, this.rightBracket) {
+ IndexExpressionImpl.forCascade({
+ required this.period,
+ required this.question,
+ required this.leftBracket,
+ required ExpressionImpl index,
+ required this.rightBracket,
+ }) : _index = index {
_becomeParentOf(_index);
}
/// Initialize a newly created index expression that is not a child of a
/// cascade expression.
- IndexExpressionImpl.forTarget(this._target, this.question, this.leftBracket,
- this._index, this.rightBracket) {
+ IndexExpressionImpl.forTarget({
+ required ExpressionImpl? target,
+ required this.question,
+ required this.leftBracket,
+ required ExpressionImpl index,
+ required this.rightBracket,
+ }) : _target = target,
+ _index = index {
_becomeParentOf(_target);
_becomeParentOf(_index);
}
@@ -9258,8 +9286,13 @@
/// Initialize a newly created formal parameter. Either or both of the
/// [comment] and [metadata] can be `null` if the parameter does not have the
/// corresponding attribute.
- NormalFormalParameterImpl(this._comment, List<Annotation>? metadata,
- this.covariantKeyword, this.requiredKeyword, this.name) {
+ NormalFormalParameterImpl({
+ required CommentImpl? comment,
+ required List<Annotation>? metadata,
+ required this.covariantKeyword,
+ required this.requiredKeyword,
+ required this.name,
+ }) : _comment = comment {
_becomeParentOf(_comment);
_metadata._initialize(this, metadata);
}
@@ -11155,15 +11188,15 @@
/// [comment] and [metadata] can be `null` if the parameter does not have the
/// corresponding attribute. The [keyword] can be `null` if a type was
/// specified. The [type] must be `null` if the keyword is 'var'.
- SimpleFormalParameterImpl(
- CommentImpl? comment,
- List<Annotation>? metadata,
- Token? covariantKeyword,
- Token? requiredKeyword,
- this.keyword,
- this._type,
- Token? name)
- : super(comment, metadata, covariantKeyword, requiredKeyword, name) {
+ SimpleFormalParameterImpl({
+ required super.comment,
+ required super.metadata,
+ required super.covariantKeyword,
+ required super.requiredKeyword,
+ required this.keyword,
+ required TypeAnnotationImpl? type,
+ required super.name,
+ }) : _type = type {
_becomeParentOf(_type);
}
@@ -11960,20 +11993,22 @@
/// [period] can be `null` if the keyword 'this' was not provided. The
/// [parameters] can be `null` if this is not a function-typed field formal
/// parameter.
- SuperFormalParameterImpl(
- CommentImpl? comment,
- List<Annotation>? metadata,
- Token? covariantKeyword,
- Token? requiredKeyword,
- this.keyword,
- this._type,
- this.superKeyword,
- this.period,
- Token name,
- this._typeParameters,
- this._parameters,
- this.question)
- : super(comment, metadata, covariantKeyword, requiredKeyword, name) {
+ SuperFormalParameterImpl({
+ required super.comment,
+ required super.metadata,
+ required super.covariantKeyword,
+ required super.requiredKeyword,
+ required this.keyword,
+ required TypeAnnotationImpl? type,
+ required this.superKeyword,
+ required this.period,
+ required super.name,
+ required TypeParameterListImpl? typeParameters,
+ required FormalParameterListImpl? parameters,
+ required this.question,
+ }) : _type = type,
+ _typeParameters = typeParameters,
+ _parameters = parameters {
_becomeParentOf(_type);
_becomeParentOf(_typeParameters);
_becomeParentOf(_parameters);
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index cff2f3e..675ac91 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -49,33 +49,6 @@
typeArguments as TypeArgumentListImpl?,
argumentList as ArgumentListImpl);
- FieldFormalParameterImpl fieldFormalParameter2(
- {Comment? comment,
- List<Annotation>? metadata,
- Token? covariantKeyword,
- Token? requiredKeyword,
- Token? keyword,
- TypeAnnotation? type,
- required Token thisKeyword,
- required Token period,
- required Token name,
- TypeParameterList? typeParameters,
- FormalParameterList? parameters,
- Token? question}) =>
- FieldFormalParameterImpl(
- comment as CommentImpl?,
- metadata,
- covariantKeyword,
- requiredKeyword,
- keyword,
- type as TypeAnnotationImpl?,
- thisKeyword,
- period,
- name,
- typeParameters as TypeParameterListImpl?,
- parameters as FormalParameterListImpl?,
- question);
-
FormalParameterListImpl formalParameterList(
Token leftParenthesis,
List<FormalParameter> parameters,
@@ -85,27 +58,6 @@
FormalParameterListImpl(leftParenthesis, parameters, leftDelimiter,
rightDelimiter, rightParenthesis);
- FunctionTypedFormalParameterImpl functionTypedFormalParameter2(
- {Comment? comment,
- List<Annotation>? metadata,
- Token? covariantKeyword,
- Token? requiredKeyword,
- TypeAnnotation? returnType,
- required Token name,
- TypeParameterList? typeParameters,
- required FormalParameterList parameters,
- Token? question}) =>
- FunctionTypedFormalParameterImpl(
- comment as CommentImpl?,
- metadata,
- covariantKeyword,
- requiredKeyword,
- returnType as TypeAnnotationImpl?,
- name,
- typeParameters as TypeParameterListImpl?,
- parameters as FormalParameterListImpl,
- question);
-
ImplicitCallReferenceImpl implicitCallReference({
required Expression expression,
required MethodElement staticElement,
@@ -117,24 +69,6 @@
typeArguments: typeArguments as TypeArgumentListImpl?,
typeArgumentTypes: typeArgumentTypes);
- IndexExpressionImpl indexExpressionForCascade2(
- {required Token period,
- Token? question,
- required Token leftBracket,
- required Expression index,
- required Token rightBracket}) =>
- IndexExpressionImpl.forCascade(
- period, question, leftBracket, index as ExpressionImpl, rightBracket);
-
- IndexExpressionImpl indexExpressionForTarget2(
- {required Expression target,
- Token? question,
- required Token leftBracket,
- required Expression index,
- required Token rightBracket}) =>
- IndexExpressionImpl.forTarget(target as ExpressionImpl, question,
- leftBracket, index as ExpressionImpl, rightBracket);
-
InstanceCreationExpressionImpl instanceCreationExpression(Token? keyword,
ConstructorName constructorName, ArgumentList argumentList,
{TypeArgumentList? typeArguments}) =>
@@ -251,23 +185,6 @@
{required Token? modifier, required SimpleIdentifier name}) =>
ShowHideElementImpl(modifier, name);
- SimpleFormalParameterImpl simpleFormalParameter2(
- {Comment? comment,
- List<Annotation>? metadata,
- Token? covariantKeyword,
- Token? requiredKeyword,
- Token? keyword,
- TypeAnnotation? type,
- required Token? name}) =>
- SimpleFormalParameterImpl(
- comment as CommentImpl?,
- metadata,
- covariantKeyword,
- requiredKeyword,
- keyword,
- type as TypeAnnotationImpl?,
- name);
-
SimpleIdentifierImpl simpleIdentifier(Token token,
{bool isDeclaration = false}) {
if (isDeclaration) {
@@ -301,33 +218,6 @@
SuperExpressionImpl superExpression(Token superKeyword) =>
SuperExpressionImpl(superKeyword);
- SuperFormalParameterImpl superFormalParameter(
- {Comment? comment,
- List<Annotation>? metadata,
- Token? covariantKeyword,
- Token? requiredKeyword,
- Token? keyword,
- TypeAnnotation? type,
- required Token superKeyword,
- required Token period,
- required Token name,
- TypeParameterList? typeParameters,
- FormalParameterList? parameters,
- Token? question}) =>
- SuperFormalParameterImpl(
- comment as CommentImpl?,
- metadata,
- covariantKeyword,
- requiredKeyword,
- keyword,
- type as TypeAnnotationImpl?,
- superKeyword,
- period,
- name,
- typeParameters as TypeParameterListImpl?,
- parameters as FormalParameterListImpl?,
- question);
-
SwitchCaseImpl switchCase(List<Label> labels, Token keyword,
Expression expression, Token colon, List<Statement> statements) =>
SwitchCaseImpl(
diff --git a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
index 0a135e4..9cee45b 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -169,8 +169,8 @@
sink.write(' ');
}
sink.write('catch (');
- _visitNode(node.exceptionParameter2);
- _visitNode(node.stackTraceParameter2, prefix: ', ');
+ _visitNode(node.exceptionParameter);
+ _visitNode(node.stackTraceParameter, prefix: ', ');
sink.write(') ');
} else {
sink.write(' ');
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 896ce40..a6acffd 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -252,9 +252,9 @@
isEqualNodes(node.exceptionType, other.exceptionType) &&
isEqualTokens(node.catchKeyword, other.catchKeyword) &&
isEqualTokens(node.leftParenthesis, other.leftParenthesis) &&
- isEqualNodes(node.exceptionParameter2, other.exceptionParameter2) &&
+ isEqualNodes(node.exceptionParameter, other.exceptionParameter) &&
isEqualTokens(node.comma, other.comma) &&
- isEqualNodes(node.stackTraceParameter2, other.stackTraceParameter2) &&
+ isEqualNodes(node.stackTraceParameter, other.stackTraceParameter) &&
isEqualTokens(node.rightParenthesis, other.rightParenthesis) &&
isEqualNodes(node.body, other.body);
}
@@ -2127,11 +2127,11 @@
if (identical(node.exceptionType, _oldNode)) {
node.exceptionType = _newNode as TypeAnnotation;
return true;
- } else if (identical(node.exceptionParameter2, _oldNode)) {
- node.exceptionParameter2 = _newNode as CatchClauseParameterImpl;
+ } else if (identical(node.exceptionParameter, _oldNode)) {
+ node.exceptionParameter = _newNode as CatchClauseParameterImpl;
return true;
- } else if (identical(node.stackTraceParameter2, _oldNode)) {
- node.stackTraceParameter2 = _newNode as CatchClauseParameterImpl;
+ } else if (identical(node.stackTraceParameter, _oldNode)) {
+ node.stackTraceParameter = _newNode as CatchClauseParameterImpl;
return true;
} else if (identical(node.body, _oldNode)) {
node.body = _newNode as Block;
@@ -3512,8 +3512,8 @@
@override
void visitCatchClause(CatchClause node) {
- _addToScope(node.exceptionParameter2?.name);
- _addToScope(node.stackTraceParameter2?.name);
+ _addToScope(node.exceptionParameter?.name);
+ _addToScope(node.stackTraceParameter?.name);
super.visitCatchClause(node);
}
diff --git a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
index cc11d1b..ecbb405 100644
--- a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
@@ -501,8 +501,8 @@
@override
void visitCatchClause(CatchClause node) {
for (var identifier in [
- node.exceptionParameter2,
- node.stackTraceParameter2,
+ node.exceptionParameter,
+ node.stackTraceParameter,
]) {
if (identifier != null) {
assignedVariables.declare(identifier.declaredElement!);
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 96c8798..3d8d487 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -221,7 +221,7 @@
exceptionTypeNode?.accept(this);
_withNameScope(() {
- var exceptionNode = node.exceptionParameter2;
+ var exceptionNode = node.exceptionParameter;
if (exceptionNode != null) {
var element = LocalVariableElementImpl(
exceptionNode.name.lexeme,
@@ -248,7 +248,7 @@
);
}
- var stackTraceNode = node.stackTraceParameter2;
+ var stackTraceNode = node.stackTraceParameter;
if (stackTraceNode != null) {
var element = LocalVariableElementImpl(
stackTraceNode.name.lexeme,
diff --git a/pkg/analyzer/lib/src/error/codes.g.dart b/pkg/analyzer/lib/src/error/codes.g.dart
index 88b7648..5b9e3bb 100644
--- a/pkg/analyzer/lib/src/error/codes.g.dart
+++ b/pkg/analyzer/lib/src/error/codes.g.dart
@@ -5213,40 +5213,6 @@
uniqueName: 'INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT',
);
- /// 7.1 Instance Methods: It is a static warning if an instance method
- /// <i>m1</i> overrides an instance member <i>m2</i>, the signature of
- /// <i>m2</i> explicitly specifies a default value for a formal parameter
- /// <i>p</i> and the signature of <i>m1</i> specifies a different default value
- /// for <i>p</i>.
- ///
- /// Parameters:
- /// 0: the name of the super class
- /// 1: the name of the super method
- /// 2: the name of the overriding method
- static const StaticWarningCode
- INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED = StaticWarningCode(
- 'INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED',
- "Parameters can't override default values, this method overrides '{0}.{1}' "
- "where '{2}' has a different value.",
- correctionMessage: "Try using the same default value in both methods.",
- );
-
- /// 7.1 Instance Methods: It is a static warning if an instance method
- /// <i>m1</i> overrides an instance member <i>m2</i>, the signature of
- /// <i>m2</i> explicitly specifies a default value for a formal parameter
- /// <i>p</i> and the signature of <i>m1</i> specifies a different default value
- /// for <i>p</i>.
- /// Parameters:
- /// 0: the name of the super class
- /// 1: the name of the super method
- static const StaticWarningCode
- INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL = StaticWarningCode(
- 'INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL',
- "Parameters can't override default values, this method overrides '{0}.{1}' "
- "where this positional parameter has a different value.",
- correctionMessage: "Try using the same default value in both methods.",
- );
-
/// Parameters:
/// 0: the name of the constant that is missing
static const StaticWarningCode MISSING_ENUM_CONSTANT_IN_SWITCH =
diff --git a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
index dd5b5de..7f2db11 100644
--- a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
+++ b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
@@ -28,8 +28,8 @@
/// Check that the exception and stack trace parameters have different names.
void checkCatchClause(CatchClause node) {
- var exceptionParameter = node.exceptionParameter2;
- var stackTraceParameter = node.stackTraceParameter2;
+ var exceptionParameter = node.exceptionParameter;
+ var stackTraceParameter = node.stackTraceParameter;
if (exceptionParameter != null && stackTraceParameter != null) {
String exceptionName = exceptionParameter.name.lexeme;
if (exceptionName == stackTraceParameter.name.lexeme) {
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index 6e1b65c..1dba8ec 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -6,7 +6,6 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/syntactic_entity.dart';
import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/dart/constant/value.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_provider.dart';
@@ -355,17 +354,6 @@
errorReporter: reporter,
errorNode: node,
);
-
- if (!_isNonNullableByDefault &&
- superMember is MethodElement &&
- member is MethodElement &&
- methodParameterNodes != null) {
- _checkForOptionalParametersDifferentDefaultValues(
- superMember,
- member,
- methodParameterNodes,
- );
- }
}
if (mixinIndex == -1) {
@@ -504,98 +492,6 @@
return true;
}
- void _checkForOptionalParametersDifferentDefaultValues(
- MethodElement baseExecutable,
- MethodElement derivedExecutable,
- List<FormalParameter> derivedParameterNodes,
- ) {
- var derivedIsAbstract = derivedExecutable.isAbstract;
- var derivedOptionalNodes = <FormalParameter>[];
- var derivedOptionalElements = <ParameterElementImpl>[];
- var derivedParameterElements = derivedExecutable.parameters;
- for (var i = 0; i < derivedParameterElements.length; i++) {
- var parameterElement =
- derivedParameterElements[i] as ParameterElementImpl;
- if (parameterElement.isOptional) {
- derivedOptionalNodes.add(derivedParameterNodes[i]);
- derivedOptionalElements.add(parameterElement);
- }
- }
-
- var baseOptionalElements = <ParameterElementImpl>[];
- var baseParameterElements = baseExecutable.parameters;
- for (var i = 0; i < baseParameterElements.length; ++i) {
- var baseParameter = baseParameterElements[i];
- if (baseParameter.isOptional) {
- baseOptionalElements
- .add(baseParameter.declaration as ParameterElementImpl);
- }
- }
-
- // Stop if no optional parameters.
- if (baseOptionalElements.isEmpty || derivedOptionalElements.isEmpty) {
- return;
- }
-
- if (derivedOptionalElements[0].isNamed) {
- for (int i = 0; i < derivedOptionalElements.length; i++) {
- var derivedElement = derivedOptionalElements[i];
- if (_isNonNullableByDefault &&
- derivedIsAbstract &&
- !derivedElement.hasDefaultValue) {
- continue;
- }
- var name = derivedElement.name;
- for (var j = 0; j < baseOptionalElements.length; j++) {
- var baseParameter = baseOptionalElements[j];
- if (name == baseParameter.name && baseParameter.hasDefaultValue) {
- var baseValue = baseParameter.computeConstantValue();
- var derivedResult = derivedElement.evaluationResult!;
- if (!_constantValuesEqual(derivedResult.value, baseValue)) {
- reporter.reportErrorForNode(
- StaticWarningCode
- .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
- derivedOptionalNodes[i],
- [
- baseExecutable.enclosingElement.displayName,
- baseExecutable.displayName,
- name
- ],
- );
- }
- }
- }
- }
- } else {
- for (var i = 0;
- i < derivedOptionalElements.length && i < baseOptionalElements.length;
- i++) {
- var derivedElement = derivedOptionalElements[i];
- if (_isNonNullableByDefault &&
- derivedIsAbstract &&
- !derivedElement.hasDefaultValue) {
- continue;
- }
- var baseElement = baseOptionalElements[i];
- if (baseElement.hasDefaultValue) {
- var baseValue = baseElement.computeConstantValue();
- var derivedResult = derivedElement.evaluationResult!;
- if (!_constantValuesEqual(derivedResult.value, baseValue)) {
- reporter.reportErrorForNode(
- StaticWarningCode
- .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
- derivedOptionalNodes[i],
- [
- baseExecutable.enclosingElement.displayName,
- baseExecutable.displayName
- ],
- );
- }
- }
- }
- }
- }
-
/// Check that [classElement] is not a superinterface to itself.
/// The [path] is a list containing the potentially cyclic implements path.
///
@@ -1030,12 +926,4 @@
);
}
}
-
- static bool _constantValuesEqual(DartObject? x, DartObject? y) {
- // If either constant value couldn't be computed due to an error, the
- // corresponding DartObject will be `null`. Since an error has already been
- // reported, there's no need to report another.
- if (x == null || y == null) return true;
- return x == y;
- }
}
diff --git a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
index fcbbb32..c665b30 100644
--- a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
+++ b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
@@ -52,8 +52,8 @@
@override
void visitCatchClause(CatchClause node) {
- var exceptionParameter = node.exceptionParameter2;
- var stackTraceParameter = node.stackTraceParameter2;
+ var exceptionParameter = node.exceptionParameter;
+ var stackTraceParameter = node.stackTraceParameter;
if (exceptionParameter != null) {
var element = exceptionParameter.declaredElement;
usedElements.addCatchException(element);
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index d62971d..d31654b 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -1680,47 +1680,52 @@
if (superKeyword != null) {
assert(thisKeyword == null,
"Can't have both 'this' and 'super' in a parameter.");
- node = ast.superFormalParameter(
- name: name!.token,
- comment: comment,
- metadata: metadata,
- covariantKeyword: covariantKeyword,
- requiredKeyword: requiredKeyword,
- type: typeOrFunctionTypedParameter.returnType,
- superKeyword: superKeyword,
- period: periodAfterThisOrSuper!,
- typeParameters: typeOrFunctionTypedParameter.typeParameters,
- parameters: typeOrFunctionTypedParameter.parameters,
- question: typeOrFunctionTypedParameter.question);
+ node = SuperFormalParameterImpl(
+ name: name!.token,
+ comment: comment,
+ metadata: metadata,
+ covariantKeyword: covariantKeyword,
+ keyword: keyword,
+ requiredKeyword: requiredKeyword,
+ type: typeOrFunctionTypedParameter.returnType,
+ superKeyword: superKeyword,
+ period: periodAfterThisOrSuper!,
+ typeParameters: typeOrFunctionTypedParameter.typeParameters,
+ parameters: typeOrFunctionTypedParameter.parameters,
+ question: typeOrFunctionTypedParameter.question,
+ );
} else if (thisKeyword != null) {
assert(superKeyword == null,
"Can't have both 'this' and 'super' in a parameter.");
- node = ast.fieldFormalParameter2(
- name: name!.token,
- comment: comment,
- metadata: metadata,
- covariantKeyword: covariantKeyword,
- requiredKeyword: requiredKeyword,
- type: typeOrFunctionTypedParameter.returnType,
- thisKeyword: thisKeyword,
- period: periodAfterThisOrSuper!,
- typeParameters: typeOrFunctionTypedParameter.typeParameters,
- parameters: typeOrFunctionTypedParameter.parameters,
- question: typeOrFunctionTypedParameter.question);
+ node = FieldFormalParameterImpl(
+ name: name!.token,
+ comment: comment,
+ metadata: metadata,
+ covariantKeyword: covariantKeyword,
+ keyword: keyword,
+ requiredKeyword: requiredKeyword,
+ type: typeOrFunctionTypedParameter.returnType,
+ thisKeyword: thisKeyword,
+ period: periodAfterThisOrSuper!,
+ typeParameters: typeOrFunctionTypedParameter.typeParameters,
+ parameters: typeOrFunctionTypedParameter.parameters,
+ question: typeOrFunctionTypedParameter.question,
+ );
} else {
- node = ast.functionTypedFormalParameter2(
- name: name!.token,
- comment: comment,
- metadata: metadata,
- covariantKeyword: covariantKeyword,
- requiredKeyword: requiredKeyword,
- returnType: typeOrFunctionTypedParameter.returnType,
- typeParameters: typeOrFunctionTypedParameter.typeParameters,
- parameters: typeOrFunctionTypedParameter.parameters,
- question: typeOrFunctionTypedParameter.question);
+ node = FunctionTypedFormalParameterImpl(
+ name: name!.token,
+ comment: comment,
+ metadata: metadata,
+ covariantKeyword: covariantKeyword,
+ requiredKeyword: requiredKeyword,
+ returnType: typeOrFunctionTypedParameter.returnType,
+ typeParameters: typeOrFunctionTypedParameter.typeParameters,
+ parameters: typeOrFunctionTypedParameter.parameters,
+ question: typeOrFunctionTypedParameter.question,
+ );
}
} else {
- var type = typeOrFunctionTypedParameter as TypeAnnotation?;
+ var type = typeOrFunctionTypedParameter as TypeAnnotationImpl?;
if (superKeyword != null) {
assert(thisKeyword == null,
"Can't have both 'this' and 'super' in a parameter.");
@@ -1731,38 +1736,47 @@
keyword,
);
}
- node = ast.superFormalParameter(
- comment: comment,
- metadata: metadata,
- covariantKeyword: covariantKeyword,
- requiredKeyword: requiredKeyword,
- keyword: keyword,
- type: type,
- superKeyword: superKeyword,
- period: periodAfterThisOrSuper!,
- name: name!.token);
+ node = SuperFormalParameterImpl(
+ comment: comment,
+ metadata: metadata,
+ covariantKeyword: covariantKeyword,
+ requiredKeyword: requiredKeyword,
+ keyword: keyword,
+ type: type,
+ superKeyword: superKeyword,
+ period: periodAfterThisOrSuper!,
+ name: name!.token,
+ typeParameters: null,
+ parameters: null,
+ question: null,
+ );
} else if (thisKeyword != null) {
assert(superKeyword == null,
"Can't have both 'this' and 'super' in a parameter.");
- node = ast.fieldFormalParameter2(
- comment: comment,
- metadata: metadata,
- covariantKeyword: covariantKeyword,
- requiredKeyword: requiredKeyword,
- keyword: keyword,
- type: type,
- thisKeyword: thisKeyword,
- period: thisKeyword.next!,
- name: name!.token);
+ node = FieldFormalParameterImpl(
+ comment: comment,
+ metadata: metadata,
+ covariantKeyword: covariantKeyword,
+ requiredKeyword: requiredKeyword,
+ keyword: keyword,
+ type: type,
+ thisKeyword: thisKeyword,
+ period: thisKeyword.next!,
+ name: name!.token,
+ typeParameters: null,
+ parameters: null,
+ question: null,
+ );
} else {
- node = ast.simpleFormalParameter2(
- comment: comment,
- metadata: metadata,
- covariantKeyword: covariantKeyword,
- requiredKeyword: requiredKeyword,
- keyword: keyword,
- type: type,
- name: name?.token);
+ node = SimpleFormalParameterImpl(
+ comment: comment,
+ metadata: metadata,
+ covariantKeyword: covariantKeyword,
+ requiredKeyword: requiredKeyword,
+ keyword: keyword,
+ type: type,
+ name: name?.token,
+ );
}
}
@@ -1896,18 +1910,25 @@
reportErrorIfNullableType(question);
}
- var formalParameters = pop() as FormalParameterList;
- var returnType = pop() as TypeAnnotation?;
- var typeParameters = pop() as TypeParameterList?;
+ var formalParameters = pop() as FormalParameterListImpl;
+ var returnType = pop() as TypeAnnotationImpl?;
+ var typeParameters = pop() as TypeParameterListImpl?;
// Create a temporary formal parameter that will be dissected later in
// [endFormalParameter].
- push(ast.functionTypedFormalParameter2(
+ push(
+ FunctionTypedFormalParameterImpl(
+ comment: null,
+ metadata: null,
+ covariantKeyword: null,
+ requiredKeyword: null,
name: StringToken(TokenType.IDENTIFIER, '', 0),
returnType: returnType,
typeParameters: typeParameters,
parameters: formalParameters,
- question: question));
+ question: question,
+ ),
+ );
}
@override
@@ -3935,27 +3956,31 @@
reportErrorIfNullableType(question);
}
- var index = pop() as Expression;
- var target = pop() as Expression?;
+ var index = pop() as ExpressionImpl;
+ var target = pop() as ExpressionImpl?;
if (target == null) {
var receiver = pop() as CascadeExpression;
var token = peek() as Token;
push(receiver);
- IndexExpression expression = ast.indexExpressionForCascade2(
- period: token,
- question: question,
- leftBracket: leftBracket,
- index: index,
- rightBracket: rightBracket);
+ IndexExpression expression = IndexExpressionImpl.forCascade(
+ period: token,
+ question: question,
+ leftBracket: leftBracket,
+ index: index,
+ rightBracket: rightBracket,
+ );
assert(expression.isCascaded);
push(expression);
} else {
- push(ast.indexExpressionForTarget2(
+ push(
+ IndexExpressionImpl.forTarget(
target: target,
question: question,
leftBracket: leftBracket,
index: index,
- rightBracket: rightBracket));
+ rightBracket: rightBracket,
+ ),
+ );
}
}
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 5e7a527..a7ab20f 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -2766,8 +2766,8 @@
var catchClause = catchClauses[i];
nullSafetyDeadCodeVerifier.verifyCatchClause(catchClause);
flow.tryCatchStatement_catchBegin(
- catchClause.exceptionParameter2?.declaredElement,
- catchClause.stackTraceParameter2?.declaredElement,
+ catchClause.exceptionParameter?.declaredElement,
+ catchClause.stackTraceParameter?.declaredElement,
);
catchClause.accept(this);
flow.tryCatchStatement_catchEnd();
@@ -3326,13 +3326,13 @@
@override
void visitCatchClause(CatchClause node) {
- var exception = node.exceptionParameter2;
+ var exception = node.exceptionParameter;
if (exception != null) {
Scope outerScope = nameScope;
try {
nameScope = LocalScope(nameScope);
_define(exception.declaredElement!);
- var stackTrace = node.stackTraceParameter2;
+ var stackTrace = node.stackTraceParameter;
if (stackTrace != null) {
_define(stackTrace.declaredElement!);
}
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
index 54a9b3f..7a7596f 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -42,15 +42,6 @@
rightHandSide: rightHandSide as ExpressionImpl,
);
- static IndexExpressionImpl cascadedIndexExpression(Expression index) =>
- astFactory.indexExpressionForCascade2(
- period: TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD),
- leftBracket:
- TokenFactory.tokenFromType(TokenType.OPEN_SQUARE_BRACKET),
- index: index,
- rightBracket:
- TokenFactory.tokenFromType(TokenType.CLOSE_SQUARE_BRACKET));
-
static PropertyAccessImpl cascadedPropertyAccess(String propertyName) =>
astFactory.propertyAccess(
null,
@@ -247,21 +238,6 @@
List<VariableDeclaration> variables) =>
fieldDeclaration(isStatic, keyword, null, variables);
- static FieldFormalParameterImpl fieldFormalParameter(
- Keyword? keyword, TypeAnnotation? type, String identifier,
- [FormalParameterList? parameterList]) =>
- astFactory.fieldFormalParameter2(
- keyword:
- keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
- type: type,
- thisKeyword: TokenFactory.tokenFromKeyword(Keyword.THIS),
- period: TokenFactory.tokenFromType(TokenType.PERIOD),
- name: identifier3(identifier).token,
- parameters: parameterList);
-
- static FieldFormalParameterImpl fieldFormalParameter2(String identifier) =>
- fieldFormalParameter(null, null, identifier);
-
static FormalParameterListImpl formalParameterList(
[List<FormalParameter> parameters = const []]) =>
astFactory.formalParameterList(
@@ -271,14 +247,6 @@
null,
TokenFactory.tokenFromType(TokenType.CLOSE_PAREN));
- static FunctionTypedFormalParameterImpl functionTypedFormalParameter(
- TypeAnnotation? returnType, String identifier,
- [List<FormalParameter> parameters = const []]) =>
- astFactory.functionTypedFormalParameter2(
- returnType: returnType,
- name: identifier3(identifier).token,
- parameters: formalParameterList(parameters));
-
static PrefixedIdentifierImpl identifier(
SimpleIdentifier prefix, SimpleIdentifier identifier) =>
astFactory.prefixedIdentifier(
@@ -333,37 +301,6 @@
[List<Combinator> combinators = const []]) =>
importDirective([], uri, false, prefix, combinators);
- static IndexExpressionImpl indexExpression({
- required Expression target,
- bool hasQuestion = false,
- required Expression index,
- }) {
- return astFactory.indexExpressionForTarget2(
- target: target,
- question: hasQuestion
- ? TokenFactory.tokenFromType(
- TokenType.QUESTION,
- )
- : null,
- leftBracket: TokenFactory.tokenFromType(
- TokenType.OPEN_SQUARE_BRACKET,
- ),
- index: index,
- rightBracket: TokenFactory.tokenFromType(
- TokenType.CLOSE_SQUARE_BRACKET,
- ),
- );
- }
-
- static IndexExpressionImpl indexExpressionForCascade(Expression array,
- Expression index, TokenType period, TokenType leftBracket) =>
- astFactory.indexExpressionForCascade2(
- period: TokenFactory.tokenFromType(period),
- leftBracket: TokenFactory.tokenFromType(leftBracket),
- index: index,
- rightBracket:
- TokenFactory.tokenFromType(TokenType.CLOSE_SQUARE_BRACKET));
-
static InstanceCreationExpressionImpl instanceCreationExpression(
Keyword? keyword, ConstructorName name,
[List<Expression> arguments = const []]) =>
@@ -589,27 +526,6 @@
modifier: TokenFactory.tokenFromString("set"),
name: identifier3(name));
- static SimpleFormalParameterImpl simpleFormalParameter(
- Keyword keyword, String parameterName) =>
- simpleFormalParameter2(keyword, null, parameterName);
-
- static SimpleFormalParameterImpl simpleFormalParameter2(
- Keyword? keyword, TypeAnnotation? type, String? parameterName) =>
- astFactory.simpleFormalParameter2(
- keyword:
- keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
- type: type,
- name:
- parameterName == null ? null : identifier3(parameterName).token);
-
- static SimpleFormalParameterImpl simpleFormalParameter3(
- String parameterName) =>
- simpleFormalParameter2(null, null, parameterName);
-
- static SimpleFormalParameterImpl simpleFormalParameter4(
- TypeAnnotation type, String? parameterName) =>
- simpleFormalParameter2(null, type, parameterName);
-
static SpreadElementImpl spreadElement(
TokenType operator, Expression expression) =>
astFactory.spreadElement(
@@ -639,21 +555,6 @@
static SuperExpressionImpl superExpression() =>
astFactory.superExpression(TokenFactory.tokenFromKeyword(Keyword.SUPER));
- static SuperFormalParameterImpl superFormalParameter(
- Keyword? keyword, TypeAnnotation? type, String identifier,
- [FormalParameterList? parameterList]) =>
- astFactory.superFormalParameter(
- keyword:
- keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
- type: type,
- superKeyword: TokenFactory.tokenFromKeyword(Keyword.SUPER),
- period: TokenFactory.tokenFromType(TokenType.PERIOD),
- name: identifier3(identifier).token,
- parameters: parameterList);
-
- static SuperFormalParameterImpl superFormalParameter2(String identifier) =>
- superFormalParameter(null, null, identifier);
-
static SwitchCaseImpl switchCase(
Expression expression, List<Statement> statements) =>
switchCase2(<Label>[], expression, statements);
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index 65b8ce1..3103fcf 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -465,13 +465,13 @@
}
FieldFormalParameter _readFieldFormalParameter() {
- var typeParameters = _readOptionalNode() as TypeParameterList?;
- var type = _readOptionalNode() as TypeAnnotation?;
- var formalParameters = _readOptionalNode() as FormalParameterList?;
+ var typeParameters = _readOptionalNode() as TypeParameterListImpl?;
+ var type = _readOptionalNode() as TypeAnnotationImpl?;
+ var formalParameters = _readOptionalNode() as FormalParameterListImpl?;
var flags = _readByte();
var metadata = _readNodeList<Annotation>();
var name = _readDeclarationName();
- var node = astFactory.fieldFormalParameter2(
+ var node = FieldFormalParameterImpl(
name: name,
period: Tokens.period(),
thisKeyword: Tokens.this_(),
@@ -601,13 +601,13 @@
}
FunctionTypedFormalParameter _readFunctionTypedFormalParameter() {
- var typeParameters = _readOptionalNode() as TypeParameterList?;
- var returnType = _readOptionalNode() as TypeAnnotation?;
- var formalParameters = readNode() as FormalParameterList;
+ var typeParameters = _readOptionalNode() as TypeParameterListImpl?;
+ var returnType = _readOptionalNode() as TypeAnnotationImpl?;
+ var formalParameters = readNode() as FormalParameterListImpl;
var flags = _readByte();
var metadata = _readNodeList<Annotation>();
var name = _readDeclarationName();
- var node = astFactory.functionTypedFormalParameter2(
+ var node = FunctionTypedFormalParameterImpl(
comment: null,
covariantKeyword:
AstBinaryFlags.isCovariant(flags) ? Tokens.covariant_() : null,
@@ -618,6 +618,7 @@
AstBinaryFlags.isRequired(flags) ? Tokens.required_() : null,
returnType: returnType,
typeParameters: typeParameters,
+ question: null,
);
return node;
}
@@ -683,12 +684,12 @@
IndexExpression _readIndexExpression() {
var flags = _readByte();
- var target = _readOptionalNode() as Expression?;
- var index = readNode() as Expression;
+ var target = _readOptionalNode() as ExpressionImpl?;
+ var index = readNode() as ExpressionImpl;
// TODO(scheglov) Is this clumsy?
IndexExpressionImpl node;
if (target != null) {
- node = (astFactory.indexExpressionForTarget2(
+ node = (IndexExpressionImpl.forTarget(
target: target,
question: AstBinaryFlags.hasQuestion(flags) ? Tokens.question() : null,
leftBracket: Tokens.openSquareBracket(),
@@ -698,7 +699,7 @@
..period =
AstBinaryFlags.hasPeriod(flags) ? Tokens.periodPeriod() : null;
} else {
- node = astFactory.indexExpressionForCascade2(
+ node = IndexExpressionImpl.forCascade(
period: Tokens.periodPeriod(),
question: AstBinaryFlags.hasQuestion(flags) ? Tokens.question() : null,
leftBracket: Tokens.openSquareBracket(),
@@ -1061,12 +1062,12 @@
}
SimpleFormalParameter _readSimpleFormalParameter() {
- var type = _readOptionalNode() as TypeAnnotation?;
+ var type = _readOptionalNode() as TypeAnnotationImpl?;
var flags = _readByte();
var metadata = _readNodeList<Annotation>();
var name = AstBinaryFlags.hasName(flags) ? _readDeclarationName() : null;
- var node = astFactory.simpleFormalParameter2(
+ var node = SimpleFormalParameterImpl(
name: name,
type: type,
covariantKeyword:
diff --git a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
index a1b0394..a8c5cae 100644
--- a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
@@ -134,9 +134,9 @@
node.exceptionType?.accept(this);
_token(node.catchKeyword);
_token(node.leftParenthesis);
- node.exceptionParameter2?.accept(this);
+ node.exceptionParameter?.accept(this);
_token(node.comma);
- node.stackTraceParameter2?.accept(this);
+ node.stackTraceParameter?.accept(this);
_token(node.rightParenthesis);
node.body.accept(this);
}
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index 4168ce7..6d8a8e4 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -22816,32 +22816,6 @@
Parameters:
0: the null-aware operator that is invalid
1: the non-null-aware operator that can replace the invalid operator
- INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED:
- problemMessage: "Parameters can't override default values, this method overrides '{0}.{1}' where '{2}' has a different value."
- correctionMessage: Try using the same default value in both methods.
- comment: |-
- 7.1 Instance Methods: It is a static warning if an instance method
- <i>m1</i> overrides an instance member <i>m2</i>, the signature of
- <i>m2</i> explicitly specifies a default value for a formal parameter
- <i>p</i> and the signature of <i>m1</i> specifies a different default value
- for <i>p</i>.
-
- Parameters:
- 0: the name of the super class
- 1: the name of the super method
- 2: the name of the overriding method
- INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL:
- problemMessage: "Parameters can't override default values, this method overrides '{0}.{1}' where this positional parameter has a different value."
- correctionMessage: Try using the same default value in both methods.
- comment: |-
- 7.1 Instance Methods: It is a static warning if an instance method
- <i>m1</i> overrides an instance member <i>m2</i>, the signature of
- <i>m2</i> explicitly specifies a default value for a formal parameter
- <i>p</i> and the signature of <i>m1</i> specifies a different default value
- for <i>p</i>.
- Parameters:
- 0: the name of the super class
- 1: the name of the super method
MISSING_ENUM_CONSTANT_IN_SWITCH:
problemMessage: "Missing case clause for '{0}'."
correctionMessage: Try adding a case clause for the missing constant, or adding a default clause.
diff --git a/pkg/analyzer/test/dart/ast/ast_test.dart b/pkg/analyzer/test/dart/ast/ast_test.dart
index d22109c..0e0e0e8 100644
--- a/pkg/analyzer/test/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/dart/ast/ast_test.dart
@@ -41,6 +41,7 @@
defineReflectiveTests(SimpleStringLiteralTest);
defineReflectiveTests(SpreadElementTest);
defineReflectiveTests(StringInterpolationTest);
+ defineReflectiveTests(SuperFormalParameterTest);
defineReflectiveTests(VariableDeclarationTest);
defineReflectiveTests(WithClauseImplTest);
});
@@ -113,17 +114,25 @@
}
@reflectiveTest
-class FieldFormalParameterTest {
+class FieldFormalParameterTest extends _AstTest {
void test_endToken_noParameters() {
- FieldFormalParameter parameter =
- AstTestFactory.fieldFormalParameter2('field');
- expect(parameter.endToken, parameter.name);
+ var node = _parseStringToNode<FieldFormalParameter>(r'''
+class A {
+ final int foo;
+ A(this.^foo);
+}
+''');
+ expect(node.endToken, node.name);
}
void test_endToken_parameters() {
- FieldFormalParameter parameter = AstTestFactory.fieldFormalParameter(
- null, null, 'field', AstTestFactory.formalParameterList([]));
- expect(parameter.endToken, parameter.parameters!.endToken);
+ var node = _parseStringToNode<FieldFormalParameter>(r'''
+class A {
+ final Object foo;
+ A(this.^foo(a, b));
+}
+''');
+ expect(node.endToken, node.parameters!.endToken);
}
}
@@ -564,25 +573,21 @@
@reflectiveTest
class IndexExpressionTest extends _AstTest {
void test_inGetterContext_assignment_compound_left() {
- IndexExpression expression = AstTestFactory.indexExpression(
- target: AstTestFactory.identifier3("a"),
- index: AstTestFactory.identifier3("b"),
- );
- // a[b] += c
- AstTestFactory.assignmentExpression(
- expression, TokenType.PLUS_EQ, AstTestFactory.identifier3("c"));
- expect(expression.inGetterContext(), isTrue);
+ var node = _parseStringToNode<IndexExpression>(r'''
+void f() {
+ ^a[0] += 0;
+}
+''');
+ expect(node.inGetterContext(), isTrue);
}
void test_inGetterContext_assignment_simple_left() {
- IndexExpression expression = AstTestFactory.indexExpression(
- target: AstTestFactory.identifier3("a"),
- index: AstTestFactory.identifier3("b"),
- );
- // a[b] = c
- AstTestFactory.assignmentExpression(
- expression, TokenType.EQ, AstTestFactory.identifier3("c"));
- expect(expression.inGetterContext(), isFalse);
+ var node = _parseStringToNode<IndexExpression>(r'''
+void f() {
+ ^a[0] = 0;
+}
+''');
+ expect(node.inGetterContext(), isFalse);
}
void test_inGetterContext_nonAssignment() {
@@ -593,47 +598,39 @@
}
void test_inSetterContext_assignment_compound_left() {
- IndexExpression expression = AstTestFactory.indexExpression(
- target: AstTestFactory.identifier3("a"),
- index: AstTestFactory.identifier3("b"),
- );
- // a[b] += c
- AstTestFactory.assignmentExpression(
- expression, TokenType.PLUS_EQ, AstTestFactory.identifier3("c"));
- expect(expression.inSetterContext(), isTrue);
+ var node = _parseStringToNode<IndexExpression>(r'''
+void f() {
+ ^a[0] += 0;
+}
+''');
+ expect(node.inSetterContext(), isTrue);
}
void test_inSetterContext_assignment_compound_right() {
- IndexExpression expression = AstTestFactory.indexExpression(
- target: AstTestFactory.identifier3("a"),
- index: AstTestFactory.identifier3("b"),
- );
- // c += a[b]
- AstTestFactory.assignmentExpression(
- AstTestFactory.identifier3("c"), TokenType.PLUS_EQ, expression);
- expect(expression.inSetterContext(), isFalse);
+ var node = _parseStringToNode<IndexExpression>(r'''
+void f() {
+ b += ^a[0];
+}
+''');
+ expect(node.inSetterContext(), isFalse);
}
void test_inSetterContext_assignment_simple_left() {
- IndexExpression expression = AstTestFactory.indexExpression(
- target: AstTestFactory.identifier3("a"),
- index: AstTestFactory.identifier3("b"),
- );
- // a[b] = c
- AstTestFactory.assignmentExpression(
- expression, TokenType.EQ, AstTestFactory.identifier3("c"));
- expect(expression.inSetterContext(), isTrue);
+ var node = _parseStringToNode<IndexExpression>(r'''
+void f() {
+ ^a[0] = 0;
+}
+''');
+ expect(node.inSetterContext(), isTrue);
}
void test_inSetterContext_assignment_simple_right() {
- IndexExpression expression = AstTestFactory.indexExpression(
- target: AstTestFactory.identifier3("a"),
- index: AstTestFactory.identifier3("b"),
- );
- // c = a[b]
- AstTestFactory.assignmentExpression(
- AstTestFactory.identifier3("c"), TokenType.EQ, expression);
- expect(expression.inSetterContext(), isFalse);
+ var node = _parseStringToNode<IndexExpression>(r'''
+void f() {
+ b = ^a[0];
+}
+''');
+ expect(node.inSetterContext(), isFalse);
}
void test_inSetterContext_nonAssignment() {
@@ -644,53 +641,48 @@
}
void test_inSetterContext_postfix_bang() {
- IndexExpression expression = AstTestFactory.indexExpression(
- target: AstTestFactory.identifier3("a"),
- index: AstTestFactory.identifier3("b"),
- );
- // a[b]!
- AstTestFactory.postfixExpression(expression, TokenType.BANG);
- expect(expression.inSetterContext(), isFalse);
+ var node = _parseStringToNode<IndexExpression>(r'''
+void f() {
+ ^a[0]!;
+}
+''');
+ expect(node.inSetterContext(), isFalse);
}
void test_inSetterContext_postfix_plusPlus() {
- IndexExpression expression = AstTestFactory.indexExpression(
- target: AstTestFactory.identifier3("a"),
- index: AstTestFactory.identifier3("b"),
- );
- AstTestFactory.postfixExpression(expression, TokenType.PLUS_PLUS);
- // a[b]++
- expect(expression.inSetterContext(), isTrue);
+ var node = _parseStringToNode<IndexExpression>(r'''
+void f() {
+ ^a[0]++;
+}
+''');
+ expect(node.inSetterContext(), isTrue);
}
void test_inSetterContext_prefix_bang() {
- IndexExpression expression = AstTestFactory.indexExpression(
- target: AstTestFactory.identifier3("a"),
- index: AstTestFactory.identifier3("b"),
- );
- // !a[b]
- AstTestFactory.prefixExpression(TokenType.BANG, expression);
- expect(expression.inSetterContext(), isFalse);
+ var node = _parseStringToNode<IndexExpression>(r'''
+void f() {
+ !^a[0];
+}
+''');
+ expect(node.inSetterContext(), isFalse);
}
void test_inSetterContext_prefix_minusMinus() {
- IndexExpression expression = AstTestFactory.indexExpression(
- target: AstTestFactory.identifier3("a"),
- index: AstTestFactory.identifier3("b"),
- );
- // --a[b]
- AstTestFactory.prefixExpression(TokenType.MINUS_MINUS, expression);
- expect(expression.inSetterContext(), isTrue);
+ var node = _parseStringToNode<IndexExpression>(r'''
+void f() {
+ --^a[0];
+}
+''');
+ expect(node.inSetterContext(), isTrue);
}
void test_inSetterContext_prefix_plusPlus() {
- IndexExpression expression = AstTestFactory.indexExpression(
- target: AstTestFactory.identifier3("a"),
- index: AstTestFactory.identifier3("b"),
- );
- // ++a[b]
- AstTestFactory.prefixExpression(TokenType.PLUS_PLUS, expression);
- expect(expression.inSetterContext(), isTrue);
+ var node = _parseStringToNode<IndexExpression>(r'''
+void f() {
+ ++^a[0];
+}
+''');
+ expect(node.inSetterContext(), isTrue);
}
void test_isNullAware_cascade_false() {
@@ -1934,19 +1926,23 @@
}
@reflectiveTest
-// TODO(srawlins): Re-enable?
-// ignore: unreachable_from_main
-class SuperFormalParameterTest {
+class SuperFormalParameterTest extends _AstTest {
void test_endToken_noParameters() {
- SuperFormalParameter parameter =
- AstTestFactory.superFormalParameter2('field');
- expect(parameter.endToken, parameter.name);
+ var node = _parseStringToNode<SuperFormalParameter>(r'''
+class A {
+ A(super.^foo);
+}
+''');
+ expect(node.endToken, node.name);
}
void test_endToken_parameters() {
- SuperFormalParameter parameter = AstTestFactory.superFormalParameter(
- null, null, 'field', AstTestFactory.formalParameterList([]));
- expect(parameter.endToken, parameter.parameters!.endToken);
+ var node = _parseStringToNode<SuperFormalParameter>(r'''
+class A {
+ A(super.^foo(a, b));
+}
+''');
+ expect(node.endToken, node.parameters!.endToken);
}
}
diff --git a/pkg/analyzer/test/generated/patterns_parser_test.dart b/pkg/analyzer/test/generated/patterns_parser_test.dart
index 57ddb5c..d6d0530 100644
--- a/pkg/analyzer/test/generated/patterns_parser_test.dart
+++ b/pkg/analyzer/test/generated/patterns_parser_test.dart
@@ -807,6 +807,7 @@
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
+ const: const
expression: ListLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -833,6 +834,7 @@
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
+ const: const
expression: ListLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -861,6 +863,7 @@
CaseClause
caseKeyword: case
pattern: ConstantPattern
+ const: const
expression: ListLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -887,6 +890,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: ListLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -914,6 +918,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: ListLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -940,6 +945,7 @@
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
+ const: const
expression: ListLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -969,6 +975,7 @@
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
+ const: const
expression: ListLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1000,6 +1007,7 @@
CaseClause
caseKeyword: case
pattern: ConstantPattern
+ const: const
expression: ListLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1029,6 +1037,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: ListLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1059,6 +1068,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: ListLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1088,6 +1098,7 @@
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
+ const: const
expression: ListLiteral
leftBracket: [
rightBracket: ]
@@ -1107,6 +1118,7 @@
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
+ const: const
expression: ListLiteral
leftBracket: [
rightBracket: ]
@@ -1128,6 +1140,7 @@
CaseClause
caseKeyword: case
pattern: ConstantPattern
+ const: const
expression: ListLiteral
leftBracket: [
rightBracket: ]
@@ -1147,6 +1160,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: ListLiteral
leftBracket: [
rightBracket: ]
@@ -1167,6 +1181,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: ListLiteral
leftBracket: [
rightBracket: ]
@@ -1186,6 +1201,7 @@
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
+ const: const
expression: ListLiteral
leftBracket: [
elements
@@ -1208,6 +1224,7 @@
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
+ const: const
expression: ListLiteral
leftBracket: [
elements
@@ -1232,6 +1249,7 @@
CaseClause
caseKeyword: case
pattern: ConstantPattern
+ const: const
expression: ListLiteral
leftBracket: [
elements
@@ -1254,6 +1272,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: ListLiteral
leftBracket: [
elements
@@ -1277,6 +1296,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: ListLiteral
leftBracket: [
elements
@@ -1299,6 +1319,7 @@
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
+ const: const
expression: SetOrMapLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1336,6 +1357,7 @@
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
+ const: const
expression: SetOrMapLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1375,6 +1397,7 @@
CaseClause
caseKeyword: case
pattern: ConstantPattern
+ const: const
expression: SetOrMapLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1412,6 +1435,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: SetOrMapLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1450,6 +1474,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: SetOrMapLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1487,6 +1512,7 @@
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
+ const: const
expression: SetOrMapLiteral
leftBracket: {
elements
@@ -1514,6 +1540,7 @@
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
+ const: const
expression: SetOrMapLiteral
leftBracket: {
elements
@@ -1543,6 +1570,7 @@
CaseClause
caseKeyword: case
pattern: ConstantPattern
+ const: const
expression: SetOrMapLiteral
leftBracket: {
elements
@@ -1570,6 +1598,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: SetOrMapLiteral
leftBracket: {
elements
@@ -1598,6 +1627,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: SetOrMapLiteral
leftBracket: {
elements
@@ -1625,6 +1655,7 @@
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
+ const: const
expression: MethodInvocation
methodName: SimpleIdentifier
token: Foo
@@ -1650,6 +1681,7 @@
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
+ const: const
expression: MethodInvocation
methodName: SimpleIdentifier
token: Foo
@@ -1677,6 +1709,7 @@
CaseClause
caseKeyword: case
pattern: ConstantPattern
+ const: const
expression: MethodInvocation
methodName: SimpleIdentifier
token: Foo
@@ -1702,6 +1735,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: MethodInvocation
methodName: SimpleIdentifier
token: Foo
@@ -1728,6 +1762,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: MethodInvocation
methodName: SimpleIdentifier
token: Foo
@@ -1753,6 +1788,7 @@
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
+ const: const
expression: ParenthesizedExpression
leftParenthesis: (
expression: IntegerLiteral
@@ -1774,6 +1810,7 @@
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
+ const: const
expression: ParenthesizedExpression
leftParenthesis: (
expression: IntegerLiteral
@@ -1797,6 +1834,7 @@
CaseClause
caseKeyword: case
pattern: ConstantPattern
+ const: const
expression: ParenthesizedExpression
leftParenthesis: (
expression: IntegerLiteral
@@ -1818,6 +1856,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: ParenthesizedExpression
leftParenthesis: (
expression: IntegerLiteral
@@ -1840,6 +1879,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: ParenthesizedExpression
leftParenthesis: (
expression: IntegerLiteral
@@ -1861,6 +1901,7 @@
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
+ const: const
expression: SetOrMapLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1891,6 +1932,7 @@
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
+ const: const
expression: SetOrMapLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1923,6 +1965,7 @@
CaseClause
caseKeyword: case
pattern: ConstantPattern
+ const: const
expression: SetOrMapLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1953,6 +1996,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: SetOrMapLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -1984,6 +2028,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: SetOrMapLiteral
typeArguments: TypeArgumentList
leftBracket: <
@@ -2014,6 +2059,7 @@
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
+ const: const
expression: SetOrMapLiteral
leftBracket: {
elements
@@ -2037,6 +2083,7 @@
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
+ const: const
expression: SetOrMapLiteral
leftBracket: {
elements
@@ -2062,6 +2109,7 @@
CaseClause
caseKeyword: case
pattern: ConstantPattern
+ const: const
expression: SetOrMapLiteral
leftBracket: {
elements
@@ -2085,6 +2133,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: SetOrMapLiteral
leftBracket: {
elements
@@ -2109,6 +2158,7 @@
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
+ const: const
expression: SetOrMapLiteral
leftBracket: {
elements
diff --git a/pkg/analyzer/test/generated/statement_parser_test.dart b/pkg/analyzer/test/generated/statement_parser_test.dart
index 2843c1c..8bc6770 100644
--- a/pkg/analyzer/test/generated/statement_parser_test.dart
+++ b/pkg/analyzer/test/generated/statement_parser_test.dart
@@ -1407,9 +1407,9 @@
expect(clause.onKeyword, isNull);
expect(clause.exceptionType, isNull);
expect(clause.catchKeyword, isNotNull);
- expect(clause.exceptionParameter2, isNotNull);
+ expect(clause.exceptionParameter, isNotNull);
expect(clause.comma, isNull);
- expect(clause.stackTraceParameter2, isNull);
+ expect(clause.stackTraceParameter, isNull);
expect(clause.body, isNotNull);
expect(statement.finallyKeyword, isNull);
expect(statement.finallyBlock, isNull);
@@ -1430,9 +1430,9 @@
expect(clause.onKeyword, isNull);
expect(clause.exceptionType, isNull);
expect(clause.catchKeyword, isNotNull);
- expect(clause.exceptionParameter2!.name.lexeme, 'int');
+ expect(clause.exceptionParameter!.name.lexeme, 'int');
expect(clause.comma, isNotNull);
- expect(clause.stackTraceParameter2!.name.lexeme, 'e');
+ expect(clause.stackTraceParameter!.name.lexeme, 'e');
expect(clause.body, isNotNull);
expect(statement.finallyKeyword, isNull);
expect(statement.finallyBlock, isNull);
@@ -1449,9 +1449,9 @@
expect(clause.onKeyword, isNull);
expect(clause.exceptionType, isNull);
expect(clause.catchKeyword, isNotNull);
- expect(clause.exceptionParameter2, isNotNull);
+ expect(clause.exceptionParameter, isNotNull);
expect(clause.comma, isNull);
- expect(clause.stackTraceParameter2, isNull);
+ expect(clause.stackTraceParameter, isNull);
expect(clause.body, isNotNull);
expect(statement.finallyKeyword, isNull);
expect(statement.finallyBlock, isNull);
@@ -1468,9 +1468,9 @@
expect(clause.onKeyword, isNull);
expect(clause.exceptionType, isNull);
expect(clause.catchKeyword, isNotNull);
- expect(clause.exceptionParameter2, isNotNull);
+ expect(clause.exceptionParameter, isNotNull);
expect(clause.comma, isNull);
- expect(clause.stackTraceParameter2, isNull);
+ expect(clause.stackTraceParameter, isNull);
expect(clause.body, isNotNull);
expect(statement.finallyKeyword, isNull);
expect(statement.finallyBlock, isNull);
@@ -1487,9 +1487,9 @@
expect(clause.onKeyword, isNull);
expect(clause.exceptionType, isNull);
expect(clause.catchKeyword, isNotNull);
- expect(clause.exceptionParameter2, isNotNull);
+ expect(clause.exceptionParameter, isNotNull);
expect(clause.comma, isNotNull);
- expect(clause.stackTraceParameter2, isNotNull);
+ expect(clause.stackTraceParameter, isNotNull);
expect(clause.body, isNotNull);
expect(statement.finallyKeyword, isNull);
expect(statement.finallyBlock, isNull);
@@ -1507,9 +1507,9 @@
expect(clause.onKeyword, isNull);
expect(clause.exceptionType, isNull);
expect(clause.catchKeyword, isNotNull);
- expect(clause.exceptionParameter2, isNotNull);
+ expect(clause.exceptionParameter, isNotNull);
expect(clause.comma, isNotNull);
- expect(clause.stackTraceParameter2, isNotNull);
+ expect(clause.stackTraceParameter, isNotNull);
expect(clause.body, isNotNull);
expect(statement.finallyKeyword, isNotNull);
expect(statement.finallyBlock, isNotNull);
@@ -1548,9 +1548,9 @@
expect(clause.onKeyword, isNotNull);
expect(clause.exceptionType, isNotNull);
expect(clause.catchKeyword, isNull);
- expect(clause.exceptionParameter2, isNull);
+ expect(clause.exceptionParameter, isNull);
expect(clause.comma, isNull);
- expect(clause.stackTraceParameter2, isNull);
+ expect(clause.stackTraceParameter, isNull);
expect(clause.body, isNotNull);
expect(statement.finallyKeyword, isNull);
expect(statement.finallyBlock, isNull);
@@ -1568,9 +1568,9 @@
expect(clause.onKeyword, isNotNull);
expect(clause.exceptionType, isNotNull);
expect(clause.catchKeyword, isNotNull);
- expect(clause.exceptionParameter2, isNotNull);
+ expect(clause.exceptionParameter, isNotNull);
expect(clause.comma, isNotNull);
- expect(clause.stackTraceParameter2, isNotNull);
+ expect(clause.stackTraceParameter, isNotNull);
expect(clause.body, isNotNull);
expect(statement.finallyKeyword, isNull);
expect(statement.finallyBlock, isNull);
@@ -1588,9 +1588,9 @@
expect(clause.onKeyword, isNotNull);
expect(clause.exceptionType, isNotNull);
expect(clause.catchKeyword, isNotNull);
- expect(clause.exceptionParameter2, isNotNull);
+ expect(clause.exceptionParameter, isNotNull);
expect(clause.comma, isNotNull);
- expect(clause.stackTraceParameter2, isNotNull);
+ expect(clause.stackTraceParameter, isNotNull);
expect(clause.body, isNotNull);
expect(statement.finallyKeyword, isNotNull);
expect(statement.finallyBlock, isNotNull);
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index 1e69349..1049f1f 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -386,8 +386,8 @@
source: findNode.catchClause('(e2,'),
childAccessors: [
(node) => node.exceptionType!,
- (node) => node.exceptionParameter2!,
- (node) => node.stackTraceParameter2!,
+ (node) => node.exceptionParameter!,
+ (node) => node.stackTraceParameter!,
(node) => node.body,
],
);
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index e23b1fb..27c658b 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -7533,11 +7533,11 @@
CatchClause catchClause = statement.catchClauses[0];
expect(catchClause.exceptionType, isNull);
- var exceptionNode = catchClause.exceptionParameter2!;
+ var exceptionNode = catchClause.exceptionParameter!;
var exceptionElement = exceptionNode.declaredElement!;
expect(exceptionElement.type, typeProvider.objectType);
- var stackNode = catchClause.stackTraceParameter2!;
+ var stackNode = catchClause.stackTraceParameter!;
var stackElement = stackNode.declaredElement!;
expect(stackElement.type, typeProvider.stackTraceType);
@@ -7562,11 +7562,11 @@
_assertNamedTypeSimple(
catchClause.exceptionType as NamedType, typeProvider.intType);
- var exceptionNode = catchClause.exceptionParameter2!;
+ var exceptionNode = catchClause.exceptionParameter!;
var exceptionElement = exceptionNode.declaredElement!;
expect(exceptionElement.type, typeProvider.intType);
- var stackNode = catchClause.stackTraceParameter2!;
+ var stackNode = catchClause.stackTraceParameter!;
var stackElement = stackNode.declaredElement!;
expect(stackElement.type, typeProvider.stackTraceType);
@@ -7589,9 +7589,9 @@
var statement = statements[2] as TryStatement;
CatchClause catchClause = statement.catchClauses[0];
expect(catchClause.exceptionType, isNull);
- expect(catchClause.stackTraceParameter2, isNull);
+ expect(catchClause.stackTraceParameter, isNull);
- var exceptionNode = catchClause.exceptionParameter2!;
+ var exceptionNode = catchClause.exceptionParameter!;
var exceptionElement = exceptionNode.declaredElement!;
expect(exceptionElement.type, typeProvider.objectType);
}
@@ -7601,9 +7601,9 @@
var statement = statements[3] as TryStatement;
CatchClause catchClause = statement.catchClauses[0];
_assertNamedTypeSimple(catchClause.exceptionType!, typeProvider.intType);
- expect(catchClause.stackTraceParameter2, isNull);
+ expect(catchClause.stackTraceParameter, isNull);
- var exceptionNode = catchClause.exceptionParameter2!;
+ var exceptionNode = catchClause.exceptionParameter!;
var exceptionElement = exceptionNode.declaredElement!;
expect(exceptionElement.type, typeProvider.intType);
}
@@ -7614,8 +7614,8 @@
CatchClause catchClause = statement.catchClauses[0];
_assertNamedTypeSimple(
catchClause.exceptionType as NamedType, typeProvider.intType);
- expect(catchClause.exceptionParameter2, isNull);
- expect(catchClause.stackTraceParameter2, isNull);
+ expect(catchClause.exceptionParameter, isNull);
+ expect(catchClause.stackTraceParameter, isNull);
}
}
diff --git a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
index be378db..ff1b2d8 100644
--- a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
@@ -1519,10 +1519,11 @@
}
void test_visitFormalParameterList_r() {
- _assertSource(
- "(a)",
- AstTestFactory.formalParameterList(
- [AstTestFactory.simpleFormalParameter3("a")]));
+ final code = '(int a)';
+ final findNode = _parseStringToFindNode('''
+void f$code {}
+''');
+ _assertSource(code, findNode.formalParameterList(code));
}
void test_visitFormalParameterList_rn() {
@@ -1558,12 +1559,11 @@
}
void test_visitFormalParameterList_rr() {
- _assertSource(
- "(a, b)",
- AstTestFactory.formalParameterList([
- AstTestFactory.simpleFormalParameter3("a"),
- AstTestFactory.simpleFormalParameter3("b")
- ]));
+ final code = '(int a, int b)';
+ final findNode = _parseStringToFindNode('''
+void f$code {}
+''');
+ _assertSource(code, findNode.formalParameterList(code));
}
void test_visitFormalParameterList_rrn() {
@@ -1877,8 +1877,11 @@
}
void test_visitFunctionTypedFormalParameter_noType() {
- _assertSource(
- "f()", AstTestFactory.functionTypedFormalParameter(null, "f"));
+ final code = 'int f()';
+ final findNode = _parseStringToFindNode('''
+void f($code) {}
+''');
+ _assertSource(code, findNode.functionTypedFormalParameter(code));
}
void test_visitFunctionTypedFormalParameter_nullable() {
@@ -2092,13 +2095,11 @@
}
void test_visitIndexExpression() {
- _assertSource(
- "a[i]",
- AstTestFactory.indexExpression(
- target: AstTestFactory.identifier3("a"),
- index: AstTestFactory.identifier3("i"),
- ),
- );
+ final code = 'a[0]';
+ final findNode = _parseStringToFindNode('''
+final x = $code;
+''');
+ _assertSource(code, findNode.index(code));
}
void test_visitInstanceCreationExpression_const() {
@@ -3057,8 +3058,11 @@
}
void test_visitSimpleFormalParameter_keyword() {
- _assertSource(
- "var a", AstTestFactory.simpleFormalParameter(Keyword.VAR, "a"));
+ final code = 'var a';
+ final findNode = _parseStringToFindNode('''
+void f($code) {}
+''');
+ _assertSource(code, findNode.simpleFormalParameter(code));
}
void test_visitSimpleFormalParameter_keyword_type() {
@@ -3162,8 +3166,13 @@
}
void test_visitSuperFormalParameter_keyword() {
- _assertSource("var super.a",
- AstTestFactory.superFormalParameter(Keyword.VAR, null, "a"));
+ final code = 'final super.foo';
+ final findNode = _parseStringToFindNode('''
+class A {
+ A($code);
+}
+''');
+ _assertSource(code, findNode.superFormalParameter(code));
}
void test_visitSuperFormalParameter_keywordAndType() {
diff --git a/pkg/analyzer/test/src/dart/resolution/try_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/try_statement_test.dart
index b8f160a..2aeb718 100644
--- a/pkg/analyzer/test/src/dart/resolution/try_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/try_statement_test.dart
@@ -36,8 +36,8 @@
assertType(st.type, 'StackTrace');
var node = findNode.catchClause('catch');
- expect(node.exceptionParameter2!.declaredElement, e);
- expect(node.stackTraceParameter2!.declaredElement, st);
+ expect(node.exceptionParameter!.declaredElement, e);
+ expect(node.stackTraceParameter!.declaredElement, st);
}
test_catch_withType() async {
@@ -58,7 +58,7 @@
assertType(st.type, 'StackTrace');
var node = findNode.catchClause('catch');
- expect(node.exceptionParameter2!.declaredElement, e);
- expect(node.stackTraceParameter2!.declaredElement, st);
+ expect(node.exceptionParameter!.declaredElement, e);
+ expect(node.stackTraceParameter!.declaredElement, st);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/function_typed_parameter_var_test.dart b/pkg/analyzer/test/src/diagnostics/function_typed_parameter_var_test.dart
index 483d186..8f970fc 100644
--- a/pkg/analyzer/test/src/diagnostics/function_typed_parameter_var_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/function_typed_parameter_var_test.dart
@@ -28,6 +28,7 @@
var node = parseResult.findNode.superFormalParameter('super.a');
assertParsedNodeText(node, r'''
SuperFormalParameter
+ keyword: var
superKeyword: super
period: .
name: a
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
deleted file mode 100644
index f0ab80b0..0000000
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
+++ /dev/null
@@ -1,346 +0,0 @@
-// Copyright (c) 2019, 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/src/error/codes.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../dart/resolution/context_collection_resolution.dart';
-
-main() {
- defineReflectiveSuite(() {
- defineReflectiveTests(InvalidOverrideDifferentDefaultValuesNamedTest);
- defineReflectiveTests(
- InvalidOverrideDifferentDefaultValuesNamedWithoutNullSafetyTest,
- );
- });
-}
-
-@reflectiveTest
-class InvalidOverrideDifferentDefaultValuesNamedTest
- extends InvalidOverrideDifferentDefaultValuesNamedWithoutNullSafetyTest {
- test_concrete_equal_optIn_extends_optOut() async {
- newFile('$testPackageLibPath/a.dart', r'''
-// @dart = 2.7
-class A {
- void foo({int a = 0}) {}
-}
-''');
-
- await assertErrorsInCode(r'''
-import 'a.dart';
-
-class B extends A {
- void foo({int a = 0}) {}
-}
-''', [
- error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
- ]);
- }
-
- test_concrete_equal_optOut_extends_optIn() async {
- newFile('$testPackageLibPath/a.dart', r'''
-class A {
- void foo({int a = 0}) {}
-}
-''');
-
- await assertNoErrorsInCode(r'''
-// @dart = 2.7
-import 'a.dart';
-
-class B extends A {
- void foo({int a = 0}) {}
-}
-''');
- }
-}
-
-@reflectiveTest
-class InvalidOverrideDifferentDefaultValuesNamedWithoutNullSafetyTest
- extends PubPackageResolutionTest {
- test_abstract_different_base_value() async {
- await assertErrorsInCode(
- r'''
-abstract class A {
- void foo({x = 0}) {}
-}
-
-abstract class B extends A {
- void foo({x = 1});
-}
-''',
- expectedErrorsByNullability(nullable: [], legacy: [
- error(StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
- 86, 5),
- ]),
- );
- }
-
- test_abstract_noDefault_base_noDefault() async {
- await assertNoErrorsInCode(r'''
-abstract class A {
- void foo({x});
-}
-
-abstract class B extends A {
- void foo({x});
-}
-''');
- }
-
- test_abstract_noDefault_base_value() async {
- await assertErrorsInCode(
- r'''
-abstract class A {
- void foo({x = 0}) {}
-}
-
-abstract class B extends A {
- void foo({x});
-}
-''',
- expectedErrorsByNullability(nullable: [], legacy: [
- error(
- StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
- 86,
- 1),
- ]));
- }
-
- test_abstract_noDefault_multipleBase_differentValue() async {
- await assertErrorsInCode(
- r'''
-abstract class A {
- void foo({x = 0}) {}
-}
-
-abstract class B {
- void foo({x = 1});
-}
-
-abstract class C extends A implements B {
- void foo({x});
-}
-''',
- expectedErrorsByNullability(nullable: [], legacy: [
- error(
- StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
- 142,
- 1),
- error(
- StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
- 142,
- 1),
- ]));
- }
-
- test_abstract_noDefault_multipleBase_sameValue() async {
- await assertErrorsInCode(
- r'''
-abstract class A {
- void foo({x = 0});
-}
-
-abstract class B {
- void foo({x = 0});
-}
-
-abstract class C extends A implements B {
- void foo({x});
-}
-''',
- expectedErrorsByNullability(nullable: [], legacy: [
- error(
- StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
- 140,
- 1),
- error(
- StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
- 140,
- 1),
- ]));
- }
-
- test_abstract_value_base_noDefault() async {
- await assertNoErrorsInCode(r'''
-abstract class A {
- void foo({x});
-}
-
-abstract class B extends A {
- void foo({x = 0});
-}
-''');
- }
-
- test_concrete_different() async {
- await assertErrorsInCode(
- r'''
-class A {
- void foo({x = 0}) {}
-}
-class B extends A {
- void foo({x = 1}) {}
-}''',
- expectedErrorsByNullability(nullable: [], legacy: [
- error(StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
- 67, 5),
- ]),
- );
- }
-
- test_concrete_equal() async {
- await assertNoErrorsInCode(r'''
-abstract class A {
- void foo({x = 1});
-}
-
-class C extends A {
- void foo({x = 3 - 2}) {}
-}
-''');
- }
-
- test_concrete_equal_function() async {
- await assertNoErrorsInCode(r'''
-nothing() => 'nothing';
-
-class A {
- void foo(String a, {orElse = nothing}) {}
-}
-
-class B extends A {
- void foo(String a, {orElse = nothing}) {}
-}
-''');
- }
-
- test_concrete_equal_otherLibrary() async {
- newFile('$testPackageLibPath/a.dart', r'''
-class A {
- void foo([a = 0]) {}
-}
-''');
- await assertNoErrorsInCode(r'''
-import 'a.dart';
-
-class C extends A {
- void foo([a = 0]) {}
-}
-''');
- }
-
- test_concrete_equal_otherLibrary_listLiteral() async {
- newFile('$testPackageLibPath/other.dart', '''
-class C {
- void foo({x: const ['x']}) {}
-}
-''');
- await assertNoErrorsInCode('''
-import 'other.dart';
-class D extends C {
- void foo({x: const ['x']}) {}
-}
-''');
- }
-
- test_concrete_explicitNull_overriddenWith_implicitNull() async {
- // If the base class provided an explicit null value for a default
- // parameter, then it is ok for the derived class to let the default value
- // be implicit, because the implicit default value of null matches the
- // explicit default value of null.
- await assertNoErrorsInCode(r'''
-class A {
- void foo({x: null}) {}
-}
-class B extends A {
- void foo({x}) {}
-}
-''');
- }
-
- test_concrete_implicitNull_overriddenWith_value() async {
- // If the base class lets the default parameter be implicit, then it is ok
- // for the derived class to provide an explicit default value, even if it's
- // not null.
- await assertNoErrorsInCode(r'''
-class A {
- void foo({x}) {}
-}
-class B extends A {
- void foo({x = 1}) {}
-}
-''');
- }
-
- test_concrete_undefined_base() async {
- // Note: we expect some errors due to the constant referring to undefined
- // values, but there should not be any INVALID_OVERRIDE... error.
- await assertErrorsInCode('''
-class A {
- void foo({x = Undefined.value}) {}
-}
-class B extends A {
- void foo({x = 1}) {}
-}
-''', [
- error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 26, 9),
- error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 26, 9),
- ]);
- }
-
- test_concrete_undefined_both() async {
- // Note: we expect some errors due to the constant referring to undefined
- // values, but there should not be any INVALID_OVERRIDE... error.
- await assertErrorsInCode('''
-class A {
- void foo({x = Undefined.value}) {}
-}
-class B extends A {
- void foo({x = Undefined2.value2}) {}
-}
-''', [
- error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 26, 9),
- error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 26, 9),
- error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 85, 10),
- error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 85, 10),
- ]);
- }
-
- test_concrete_undefined_derived() async {
- // Note: we expect some errors due to the constant referring to undefined
- // values, but there should not be any INVALID_OVERRIDE... error.
- await assertErrorsInCode('''
-class A {
- void foo({x = 1}) {}
-}
-class B extends A {
- void foo({x = Undefined.value}) {}
-}
-''', [
- error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 71, 9),
- error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 71, 9),
- ]);
- }
-
- test_concrete_value_overriddenWith_implicitNull() async {
- // If the base class provided an explicit value for a default parameter,
- // then it is a static warning for the derived class to provide a different
- // value, even if implicitly.
- await assertErrorsInCode(
- r'''
-class A {
- void foo({x: 1}) {}
-}
-class B extends A {
- void foo({x}) {}
-}
-''',
- expectedErrorsByNullability(nullable: [], legacy: [
- error(StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
- 66, 1),
- ]),
- );
- }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
deleted file mode 100644
index ddd6517..0000000
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
+++ /dev/null
@@ -1,363 +0,0 @@
-// Copyright (c) 2019, 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/src/error/codes.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../dart/resolution/context_collection_resolution.dart';
-
-main() {
- defineReflectiveSuite(() {
- defineReflectiveTests(
- InvalidOverrideDifferentDefaultValuesPositionalTest,
- );
- defineReflectiveTests(
- InvalidOverrideDifferentDefaultValuesPositionalWithoutNullSafetyTest,
- );
- });
-}
-
-@reflectiveTest
-class InvalidOverrideDifferentDefaultValuesPositionalTest
- extends InvalidOverrideDifferentDefaultValuesPositionalWithoutNullSafetyTest {
- test_concrete_equal_optIn_extends_optOut() async {
- newFile('$testPackageLibPath/a.dart', r'''
-// @dart = 2.7
-class A {
- void foo([int a = 0]) {}
-}
-''');
-
- await assertErrorsInCode(r'''
-import 'a.dart';
-
-class B extends A {
- void foo([int a = 0]) {}
-}
-''', [
- error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
- ]);
- }
-
- test_concrete_equal_optOut_extends_optIn() async {
- newFile('$testPackageLibPath/a.dart', r'''
-class A {
- void foo([int a = 0]) {}
-}
-''');
-
- await assertNoErrorsInCode(r'''
-// @dart = 2.7
-import 'a.dart';
-
-class B extends A {
- void foo([int a = 0]) {}
-}
-''');
- }
-}
-
-@reflectiveTest
-class InvalidOverrideDifferentDefaultValuesPositionalWithoutNullSafetyTest
- extends PubPackageResolutionTest {
- test_abstract_different_base_value() async {
- await assertErrorsInCode(
- r'''
-abstract class A {
- void foo([x = 0]) {}
-}
-
-abstract class B extends A {
- void foo([x = 1]);
-}
-''',
- expectedErrorsByNullability(nullable: [], legacy: [
- error(
- StaticWarningCode
- .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
- 86,
- 5),
- ]),
- );
- }
-
- test_abstract_noDefault_base_noDefault() async {
- await assertNoErrorsInCode(r'''
-abstract class A {
- void foo([x]);
-}
-
-abstract class B extends A {
- void foo([x]);
-}
-''');
- }
-
- test_abstract_noDefault_base_value() async {
- await assertErrorsInCode(
- r'''
-abstract class A {
- void foo([x = 0]) {}
-}
-
-abstract class B extends A {
- void foo([x]);
-}
-''',
- expectedErrorsByNullability(nullable: [], legacy: [
- error(
- StaticWarningCode
- .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
- 86,
- 1),
- ]));
- }
-
- test_abstract_noDefault_multipleBase_differentValue() async {
- await assertErrorsInCode(
- r'''
-abstract class A {
- void foo([x = 0]) {}
-}
-
-abstract class B {
- void foo([x = 1]);
-}
-
-abstract class C extends A implements B {
- void foo([x]);
-}
-''',
- expectedErrorsByNullability(nullable: [], legacy: [
- error(
- StaticWarningCode
- .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
- 142,
- 1),
- error(
- StaticWarningCode
- .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
- 142,
- 1),
- ]));
- }
-
- test_abstract_noDefault_multipleBase_sameValue() async {
- await assertErrorsInCode(
- r'''
-abstract class A {
- void foo([x = 0]);
-}
-
-abstract class B {
- void foo([x = 0]);
-}
-
-abstract class C extends A implements B {
- void foo([x]);
-}
-''',
- expectedErrorsByNullability(nullable: [], legacy: [
- error(
- StaticWarningCode
- .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
- 140,
- 1),
- error(
- StaticWarningCode
- .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
- 140,
- 1),
- ]));
- }
-
- test_abstract_value_base_noDefault() async {
- await assertNoErrorsInCode(r'''
-abstract class A {
- void foo([x]);
-}
-
-abstract class B extends A {
- void foo([x = 0]);
-}
-''');
- }
-
- test_concrete_different() async {
- await assertErrorsInCode(
- r'''
-class A {
- void foo([x = 0]) {}
-}
-class B extends A {
- void foo([x = 1]) {}
-}
-''',
- expectedErrorsByNullability(nullable: [], legacy: [
- error(
- StaticWarningCode
- .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
- 67,
- 5),
- ]),
- );
- }
-
- test_concrete_equal() async {
- await assertNoErrorsInCode(r'''
-abstract class A {
- void foo([x = 1]);
-}
-
-class C extends A {
- void foo([x = 3 - 2]) {}
-}
-''');
- }
-
- test_concrete_equal_function() async {
- await assertNoErrorsInCode(r'''
-nothing() => 'nothing';
-
-class A {
- void foo(String a, [orElse = nothing]) {}
-}
-
-class B extends A {
- void foo(String a, [orElse = nothing]) {}
-}
-''');
- }
-
- test_concrete_equal_otherLibrary() async {
- newFile('$testPackageLibPath/a.dart', r'''
-class A {
- void foo([x = 0]) {}
-}
-''');
- await assertNoErrorsInCode(r'''
-import 'a.dart';
-
-class C extends A {
- void foo([a = 0]) {}
-}
-''');
- }
-
- test_concrete_equal_otherLibrary_listLiteral() async {
- newFile('$testPackageLibPath/other.dart', '''
-class C {
- void foo([x = const ['x']]) {}
-}
-''');
- await assertNoErrorsInCode('''
-import 'other.dart';
-class D extends C {
- void foo([x = const ['x']]) {}
-}
-''');
- }
-
- test_concrete_explicitNull_overriddenWith_implicitNull() async {
- // If the base class provided an explicit null value for a default
- // parameter, then it is ok for the derived class to let the default value
- // be implicit, because the implicit default value of null matches the
- // explicit default value of null.
- await assertNoErrorsInCode(r'''
-class A {
- void foo([x = null]) {}
-}
-class B extends A {
- void foo([x]) {}
-}
-''');
- }
-
- test_concrete_implicitNull_overriddenWith_value() async {
- // If the base class lets the default parameter be implicit, then it is ok
- // for the derived class to provide an explicit default value, even if it's
- // not null.
- await assertNoErrorsInCode(r'''
-class A {
- void foo([x]) {}
-}
-class B extends A {
- void foo([x = 1]) {}
-}
-''');
- }
-
- test_concrete_undefined_base() async {
- // Note: we expect some errors due to the constant referring to undefined
- // values, but there should not be any INVALID_OVERRIDE... error.
- await assertErrorsInCode('''
-class A {
- void foo([x = Undefined.value]) {}
-}
-class B extends A {
- void foo([x = 1]) {}
-}
-''', [
- error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 26, 9),
- error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 26, 9),
- ]);
- }
-
- test_concrete_undefined_both() async {
- // Note: we expect some errors due to the constant referring to undefined
- // values, but there should not be any INVALID_OVERRIDE... error.
- await assertErrorsInCode('''
-class A {
- void foo([x = Undefined.value]) {}
-}
-class B extends A {
- void foo([x = Undefined2.value2]) {}
-}
-''', [
- error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 26, 9),
- error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 26, 9),
- error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 85, 10),
- error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 85, 10),
- ]);
- }
-
- test_concrete_undefined_derived() async {
- // Note: we expect some errors due to the constant referring to undefined
- // values, but there should not be any INVALID_OVERRIDE... error.
- await assertErrorsInCode('''
-class A {
- void foo([x = 1]) {}
-}
-class B extends A {
- void foo([x = Undefined.value]) {}
-}
-''', [
- error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 71, 9),
- error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 71, 9),
- ]);
- }
-
- test_concrete_value_overriddenWith_implicitNull() async {
- // If the base class provided an explicit value for a default parameter,
- // then it is a static warning for the derived class to provide a different
- // value, even if implicitly.
- await assertErrorsInCode(
- r'''
-class A {
- void foo([x = 1]) {}
-}
-class B extends A {
- void foo([x]) {}
-}
-''',
- expectedErrorsByNullability(nullable: [], legacy: [
- error(
- StaticWarningCode
- .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
- 67,
- 1),
- ]),
- );
- }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index 60cccac..45df764 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -369,10 +369,6 @@
import 'invalid_non_virtual_annotation_test.dart'
as invalid_non_virtual_annotation;
import 'invalid_null_aware_operator_test.dart' as invalid_null_aware_operator;
-import 'invalid_override_different_default_values_named_test.dart'
- as invalid_override_different_default_values_named;
-import 'invalid_override_different_default_values_positional_test.dart'
- as invalid_override_different_default_values_positional;
import 'invalid_override_of_non_virtual_member_test.dart'
as invalid_override_of_non_virtual_member;
import 'invalid_override_test.dart' as invalid_override;
@@ -1050,8 +1046,6 @@
invalid_modifier_on_setter.main();
invalid_non_virtual_annotation.main();
invalid_null_aware_operator.main();
- invalid_override_different_default_values_named.main();
- invalid_override_different_default_values_positional.main();
invalid_override_of_non_virtual_member.main();
invalid_override.main();
invalid_reference_to_generative_enum_constructor.main();
diff --git a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
index b207854..70772d4 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
@@ -78,7 +78,7 @@
@override
void visitCatchClause(CatchClause node) {
- var exceptionParameter = node.exceptionParameter2;
+ var exceptionParameter = node.exceptionParameter;
if (exceptionParameter != null) {
declaredParam(
exceptionParameter.name,
@@ -87,7 +87,7 @@
);
}
- var stackTraceParameter = node.stackTraceParameter2;
+ var stackTraceParameter = node.stackTraceParameter;
if (stackTraceParameter != null) {
declaredParam(
stackTraceParameter.name,
diff --git a/pkg/compiler/lib/src/io/kernel_source_information.dart b/pkg/compiler/lib/src/io/kernel_source_information.dart
index e8982b1..16dda87 100644
--- a/pkg/compiler/lib/src/io/kernel_source_information.dart
+++ b/pkg/compiler/lib/src/io/kernel_source_information.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.
-// @dart = 2.10
-
/// Source information system mapping that attempts a semantic mapping between
/// offsets of JavaScript code points to offsets of Dart code points.
@@ -12,24 +10,22 @@
import 'package:kernel/ast.dart' as ir;
import '../elements/entities.dart';
import '../js_model/element_map.dart';
-import '../js_model/js_strategy.dart';
import '../universe/call_structure.dart';
import 'source_information.dart';
import 'position_information.dart';
class KernelSourceInformationStrategy
extends AbstractPositionSourceInformationStrategy {
- final JsBackendStrategy _backendStrategy;
+ late final JsToElementMap _elementMap;
- const KernelSourceInformationStrategy(this._backendStrategy);
+ @override
+ void onElementMapAvailable(JsToElementMap elementMap) {
+ _elementMap = elementMap;
+ }
@override
SourceInformationBuilder createBuilderForContext(MemberEntity member) {
- return KernelSourceInformationBuilder(
- _backendStrategy
- // ignore:deprecated_member_use_from_same_package
- .elementMap,
- member);
+ return KernelSourceInformationBuilder(_elementMap, member);
}
}
@@ -39,19 +35,19 @@
/// [elementMap] is used to compute names for closure call methods.
// TODO(johnniwinther): Make the closure call names available to
// `sourcemap_helper.dart`.
-String computeKernelElementNameForSourceMaps(
+String? computeKernelElementNameForSourceMaps(
JsToElementMap elementMap, MemberEntity member,
- [CallStructure callStructure]) {
+ [CallStructure? callStructure]) {
MemberDefinition definition = elementMap.getMemberDefinition(member);
switch (definition.kind) {
case MemberKind.regular:
- ir.Member node = definition.node;
+ final node = definition.node as ir.Member;
if (node.isExtensionMember) return _findExtensionMemberName(node);
return computeElementNameForSourceMaps(member, callStructure);
case MemberKind.closureCall:
- ir.TreeNode node = definition.node;
- String name;
+ var node = definition.node as ir.TreeNode;
+ String? name;
while (node is! ir.Member) {
if (node is ir.FunctionDeclaration) {
if (name != null) {
@@ -66,11 +62,11 @@
name = '<anonymous function>';
}
}
- node = node.parent;
+ node = node.parent!;
}
MemberEntity enclosingMember = elementMap.getMember(node);
String enclosingMemberName =
- computeElementNameForSourceMaps(enclosingMember, callStructure);
+ computeElementNameForSourceMaps(enclosingMember, callStructure)!;
return '$enclosingMemberName.$name';
default:
return computeElementNameForSourceMaps(member, callStructure);
@@ -108,14 +104,14 @@
class KernelSourceInformationBuilder implements SourceInformationBuilder {
final JsToElementMap _elementMap;
final MemberEntity _member;
- final String _name;
+ final String? _name;
/// Inlining context or null when no inlining has taken place.
///
/// A new builder is created every time the backend inlines a method. This
/// field contains the location of every call site that has been inlined. The
/// last entry on the list is always a call to [_member].
- final List<FrameContext> inliningContext;
+ final List<FrameContext>? inliningContext;
KernelSourceInformationBuilder(this._elementMap, this._member)
: _name = computeKernelElementNameForSourceMaps(_elementMap, _member),
@@ -129,21 +125,19 @@
///
/// If [offset] is `null`, the first `fileOffset` of [node] or its parents is
/// used.
- SourceLocation _getSourceLocation(String name, ir.TreeNode node,
- [int offset]) {
+ SourceLocation _getSourceLocation(String? name, ir.TreeNode node,
+ [int? offset]) {
ir.Location location;
if (offset != null) {
- location = node.location;
- location = node.enclosingComponent.getLocation(location.file, offset);
+ location = node.location!;
+ location = node.enclosingComponent!.getLocation(location.file, offset)!;
} else {
- while (node != null && node.fileOffset == ir.TreeNode.noOffset) {
- node = node.parent;
+ while (node.fileOffset == ir.TreeNode.noOffset) {
+ node = node.parent!;
}
- location = node.location;
+ location = node.location!;
offset = node.fileOffset;
}
- assert(
- location != null, "No location found for $node (${node.runtimeType})");
return KernelSourceLocation(location, offset, name);
}
@@ -152,7 +146,7 @@
///
/// This method handles both methods, constructors, and local functions.
SourceInformation _buildFunction(
- String name, ir.TreeNode node, ir.FunctionNode functionNode) {
+ String? name, ir.TreeNode node, ir.FunctionNode functionNode) {
if (functionNode.fileEndOffset != ir.TreeNode.noOffset) {
return PositionSourceInformation(
_getSourceLocation(name, node),
@@ -167,27 +161,28 @@
///
/// This is used function declarations and return expressions which both point
/// to the end of the member as the closing position.
- SourceInformation _buildFunctionEnd(MemberEntity member, [ir.TreeNode base]) {
+ SourceInformation _buildFunctionEnd(MemberEntity member,
+ [ir.TreeNode? base]) {
MemberDefinition definition = _elementMap.getMemberDefinition(member);
- String name = computeKernelElementNameForSourceMaps(_elementMap, member);
+ String? name = computeKernelElementNameForSourceMaps(_elementMap, member);
switch (definition.kind) {
case MemberKind.regular:
- ir.Member node = definition.node;
+ final node = definition.node as ir.Member;
if (node is ir.Procedure) {
return _buildFunction(name, base ?? node, node.function);
}
break;
case MemberKind.constructor:
case MemberKind.constructorBody:
- ir.Member node = definition.node;
- return _buildFunction(name, base ?? node, node.function);
+ final node = definition.node as ir.Member;
+ return _buildFunction(name, base ?? node, node.function!);
case MemberKind.closureCall:
- ir.LocalFunction node = definition.node;
+ final node = definition.node as ir.LocalFunction;
return _buildFunction(name, base ?? node, node.function);
// TODO(sra): generatorBody
default:
}
- return _buildTreeNode(base ?? definition.node, name: name);
+ return _buildTreeNode(base ?? definition.node as ir.TreeNode, name: name);
}
/// Creates the source information for exiting a function definition defined
@@ -209,7 +204,7 @@
///
/// This method is used to for code in the beginning of a method, like
/// variable declarations in the start of a function.
- SourceInformation _buildBody(ir.TreeNode node, ir.TreeNode body) {
+ SourceInformation _buildBody(ir.TreeNode node, ir.TreeNode? body) {
SourceLocation location;
if (body != null) {
if (body is ir.Block && body.statements.isNotEmpty) {
@@ -245,19 +240,19 @@
}
break;
case MemberKind.closureCall:
- ir.LocalFunction node = definition.node;
+ final node = definition.node as ir.LocalFunction;
return _buildBody(node, node.function.body);
case MemberKind.generatorBody:
ir.Node node = definition.node;
if (node is ir.LocalFunction) {
return _buildBody(node, node.function.body);
} else if (node is ir.Member && node.function != null) {
- return _buildBody(node, node.function /*!*/ .body);
+ return _buildBody(node, node.function!.body);
}
break;
default:
}
- return _buildTreeNode(definition.node);
+ return _buildTreeNode(definition.node as ir.TreeNode);
}
/// Creates source information for the exit of the current member.
@@ -272,109 +267,109 @@
break;
case MemberKind.constructor:
case MemberKind.constructorBody:
- ir.Member node = definition.node;
- return _buildFunctionExit(node, node.function);
+ final node = definition.node as ir.Member;
+ return _buildFunctionExit(node, node.function!);
case MemberKind.closureCall:
- ir.LocalFunction node = definition.node;
+ final node = definition.node as ir.LocalFunction;
return _buildFunctionExit(node, node.function);
default:
}
- return _buildTreeNode(definition.node);
+ return _buildTreeNode(definition.node as ir.TreeNode);
}
/// Creates source information based on the location of [node].
SourceInformation _buildTreeNode(ir.TreeNode node,
- {SourceLocation closingPosition, String name}) {
+ {SourceLocation? closingPosition, String? name}) {
return PositionSourceInformation(_getSourceLocation(name ?? _name, node),
closingPosition, inliningContext);
}
@override
SourceInformationBuilder forContext(
- MemberEntity member, SourceInformation context) {
- List<FrameContext> newContext = inliningContext?.toList() ?? [];
+ MemberEntity member, SourceInformation? context) {
+ List<FrameContext>? newContext = inliningContext?.toList() ?? [];
if (context != null) {
- newContext.add(FrameContext(context, member.name));
+ newContext.add(FrameContext(context, member.name!));
} else {
// TODO(sigmund): investigate whether we have any more cases where context
// is null.
newContext = inliningContext;
}
- String name = computeKernelElementNameForSourceMaps(_elementMap, _member);
+ String? name = computeKernelElementNameForSourceMaps(_elementMap, _member);
return KernelSourceInformationBuilder.withContext(
_elementMap, member, newContext, name);
}
@override
- SourceInformation buildSwitchCase(ir.Node node) => null;
+ SourceInformation? buildSwitchCase(ir.Node node) => null;
@override
- SourceInformation buildSwitch(ir.Node node) {
+ SourceInformation buildSwitch(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildAs(ir.Node node) {
+ SourceInformation buildAs(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildIs(ir.Node node) {
+ SourceInformation buildIs(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildTry(ir.Node node) {
+ SourceInformation buildTry(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildCatch(ir.Node node) {
+ SourceInformation buildCatch(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildBinary(ir.Node node) {
+ SourceInformation buildBinary(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildUnary(ir.Node node) {
+ SourceInformation buildUnary(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildIndexSet(ir.Node node) => null;
+ SourceInformation? buildIndexSet(ir.Node node) => null;
@override
- SourceInformation buildIndex(ir.Node node) => null;
+ SourceInformation? buildIndex(ir.Node node) => null;
@override
- SourceInformation buildForInSet(ir.Node node) {
+ SourceInformation buildForInSet(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildForInCurrent(ir.Node node) {
+ SourceInformation buildForInCurrent(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildForInMoveNext(ir.Node node) {
+ SourceInformation buildForInMoveNext(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildForInIterator(ir.Node node) {
+ SourceInformation buildForInIterator(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildStringInterpolation(ir.Node node) => null;
+ SourceInformation? buildStringInterpolation(ir.Node node) => null;
@override
- SourceInformation buildForeignCode(ir.Node node) => null;
+ SourceInformation? buildForeignCode(ir.Node node) => null;
@override
SourceInformation buildVariableDeclaration() {
@@ -382,12 +377,12 @@
}
@override
- SourceInformation buildAwait(ir.Node node) {
+ SourceInformation buildAwait(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildYield(ir.Node node) {
+ SourceInformation buildYield(ir.TreeNode node) {
return _buildTreeNode(node);
}
@@ -402,27 +397,27 @@
}
@override
- SourceInformation buildAssignment(ir.Node node) {
+ SourceInformation buildAssignment(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildThrow(ir.Node node) {
+ SourceInformation buildThrow(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildAssert(ir.Node node) {
+ SourceInformation buildAssert(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildNew(ir.Node node) {
+ SourceInformation buildNew(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildIf(ir.Node node) {
+ SourceInformation buildIf(ir.TreeNode node) {
return _buildTreeNode(node);
}
@@ -434,40 +429,40 @@
}
@override
- SourceInformation buildGet(ir.Node node) {
+ SourceInformation buildGet(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildSet(ir.Node node) {
+ SourceInformation buildSet(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildLoop(ir.Node node) {
+ SourceInformation buildLoop(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildImplicitReturn(MemberEntity element) => null;
+ SourceInformation? buildImplicitReturn(MemberEntity element) => null;
@override
- SourceInformation buildReturn(ir.Node node) {
+ SourceInformation buildReturn(ir.TreeNode node) {
return _buildFunctionEnd(_member, node);
}
@override
- SourceInformation buildCreate(ir.Node node) {
+ SourceInformation buildCreate(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildListLiteral(ir.Node node) {
+ SourceInformation buildListLiteral(ir.TreeNode node) {
return _buildTreeNode(node);
}
@override
- SourceInformation buildGeneric(ir.Node node) => null;
+ SourceInformation? buildGeneric(ir.Node node) => null;
@override
SourceInformation buildDeclaration(MemberEntity member) {
@@ -478,14 +473,14 @@
SourceInformation buildStub(
FunctionEntity function, CallStructure callStructure) {
MemberDefinition definition = _elementMap.getMemberDefinition(function);
- String name = computeKernelElementNameForSourceMaps(
+ String? name = computeKernelElementNameForSourceMaps(
_elementMap, function, callStructure);
ir.Node node = definition.node;
- return _buildTreeNode(node, name: name);
+ return _buildTreeNode(node as ir.TreeNode, name: name);
}
@override
- SourceInformation buildGoto(ir.Node node) {
+ SourceInformation buildGoto(ir.TreeNode node) {
return _buildTreeNode(node);
}
}
@@ -494,11 +489,11 @@
@override
final int offset;
@override
- final String sourceName;
+ final String? sourceName;
@override
final Uri sourceUri;
- KernelSourceLocation(ir.Location location, this.offset, this.sourceName)
+ KernelSourceLocation(super.location, this.offset, this.sourceName)
: sourceUri = location.file,
- super.fromLocation(location);
+ super.fromLocation();
}
diff --git a/pkg/compiler/lib/src/io/source_information.dart b/pkg/compiler/lib/src/io/source_information.dart
index 62bae4e..a1b77ec 100644
--- a/pkg/compiler/lib/src/io/source_information.dart
+++ b/pkg/compiler/lib/src/io/source_information.dart
@@ -10,6 +10,7 @@
import '../js/js.dart' show JavaScriptNodeSourceInformation;
import '../serialization/serialization.dart';
import '../universe/call_structure.dart';
+import '../js_model/element_map.dart';
import 'source_file.dart';
import 'position_information.dart';
@@ -106,6 +107,12 @@
class SourceInformationStrategy {
const SourceInformationStrategy();
+ /// Called when the [JsToElementMap] is available.
+ ///
+ /// The [JsToElementMap] is used by some source information strategies to
+ /// extract member details relevant in the source-map generation process.
+ void onElementMapAvailable(JsToElementMap elementMap) {}
+
/// Create a [SourceInformationBuilder] for [member].
SourceInformationBuilder createBuilderForContext(
covariant MemberEntity member) {
@@ -126,7 +133,7 @@
/// Create a [SourceInformationBuilder] for [member] with additional inlining
/// [context].
SourceInformationBuilder forContext(
- covariant MemberEntity member, SourceInformation context) =>
+ covariant MemberEntity member, SourceInformation? context) =>
this;
/// Generate [SourceInformation] for the declaration of the [member].
@@ -143,51 +150,51 @@
/// Generate [SourceInformation] for an instantiation of a class using [node]
/// for the source position.
- SourceInformation? buildCreate(ir.Node node) => null;
+ SourceInformation? buildCreate(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the return [node].
- SourceInformation? buildReturn(ir.Node node) => null;
+ SourceInformation? buildReturn(ir.TreeNode node) => null;
/// Generate [SourceInformation] for an implicit return in [element].
SourceInformation? buildImplicitReturn(covariant MemberEntity element) =>
null;
/// Generate [SourceInformation] for the loop [node].
- SourceInformation? buildLoop(ir.Node node) => null;
+ SourceInformation? buildLoop(ir.TreeNode node) => null;
/// Generate [SourceInformation] for a read access like `a.b`.
- SourceInformation? buildGet(ir.Node node) => null;
+ SourceInformation? buildGet(ir.TreeNode node) => null;
/// Generate [SourceInformation] for a write access like `a.b = 3`.
- SourceInformation? buildSet(ir.Node node) => null;
+ SourceInformation? buildSet(ir.TreeNode node) => null;
/// Generate [SourceInformation] for a call in [node].
SourceInformation? buildCall(ir.Node receiver, ir.Node call) => null;
/// Generate [SourceInformation] for the if statement in [node].
- SourceInformation? buildIf(ir.Node node) => null;
+ SourceInformation? buildIf(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the constructor invocation in [node].
- SourceInformation? buildNew(ir.Node node) => null;
+ SourceInformation? buildNew(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the throw in [node].
- SourceInformation? buildThrow(ir.Node node) => null;
+ SourceInformation? buildThrow(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the assert in [node].
- SourceInformation? buildAssert(ir.Node node) => null;
+ SourceInformation? buildAssert(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the assignment in [node].
- SourceInformation? buildAssignment(ir.Node node) => null;
+ SourceInformation? buildAssignment(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the variable declaration inserted as
/// first statement of a function.
SourceInformation? buildVariableDeclaration() => null;
/// Generate [SourceInformation] for the await [node].
- SourceInformation? buildAwait(ir.Node node) => null;
+ SourceInformation? buildAwait(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the yield or yield* [node].
- SourceInformation? buildYield(ir.Node node) => null;
+ SourceInformation? buildYield(ir.TreeNode node) => null;
/// Generate [SourceInformation] for async/await boiler plate code.
SourceInformation? buildAsyncBody() => null;
@@ -202,16 +209,16 @@
SourceInformation? buildStringInterpolation(ir.Node node) => null;
/// Generate [SourceInformation] for the for-in `iterator` access in [node].
- SourceInformation? buildForInIterator(ir.Node node) => null;
+ SourceInformation? buildForInIterator(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the for-in `moveNext` call in [node].
- SourceInformation? buildForInMoveNext(ir.Node node) => null;
+ SourceInformation? buildForInMoveNext(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the for-in `current` access in [node].
- SourceInformation? buildForInCurrent(ir.Node node) => null;
+ SourceInformation? buildForInCurrent(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the for-in variable assignment in [node].
- SourceInformation? buildForInSet(ir.Node node) => null;
+ SourceInformation? buildForInSet(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the operator `[]` access in [node].
SourceInformation? buildIndex(ir.Node node) => null;
@@ -220,34 +227,34 @@
SourceInformation? buildIndexSet(ir.Node node) => null;
/// Generate [SourceInformation] for the binary operation in [node].
- SourceInformation? buildBinary(ir.Node node) => null;
+ SourceInformation? buildBinary(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the unary operation in [node].
- SourceInformation? buildUnary(ir.Node node) => null;
+ SourceInformation? buildUnary(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the try statement in [node].
- SourceInformation? buildTry(ir.Node node) => null;
+ SourceInformation? buildTry(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the unary operator in [node].
- SourceInformation? buildCatch(ir.Node node) => null;
+ SourceInformation? buildCatch(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the is-test in [node].
- SourceInformation? buildIs(ir.Node node) => null;
+ SourceInformation? buildIs(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the as-cast in [node].
- SourceInformation? buildAs(ir.Node node) => null;
+ SourceInformation? buildAs(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the switch statement [node].
- SourceInformation? buildSwitch(ir.Node node) => null;
+ SourceInformation? buildSwitch(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the switch case in [node].
SourceInformation? buildSwitchCase(ir.Node node) => null;
/// Generate [SourceInformation] for the list literal in [node].
- SourceInformation? buildListLiteral(ir.Node node) => null;
+ SourceInformation? buildListLiteral(ir.TreeNode node) => null;
/// Generate [SourceInformation] for the break/continue in [node].
- SourceInformation? buildGoto(ir.Node node) => null;
+ SourceInformation? buildGoto(ir.TreeNode node) => null;
}
/// A location in a source file.
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index c5965a0..5ce23bd 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -102,7 +102,7 @@
if (!generateSourceMap) {
sourceInformationStrategy = const JavaScriptSourceInformationStrategy();
} else {
- sourceInformationStrategy = KernelSourceInformationStrategy(this);
+ sourceInformationStrategy = KernelSourceInformationStrategy();
}
_emitterTask = CodeEmitterTask(_compiler, generateSourceMap);
_functionCompiler = SsaFunctionCompiler(
@@ -138,13 +138,6 @@
enableMinification: _compiler.options.enableMinification);
}
- @deprecated
- JsToElementMap get elementMap {
- assert(_elementMap != null,
- "JsBackendStrategy.elementMap has not been created yet.");
- return _elementMap;
- }
-
/// Codegen support for generating table of interceptors and
/// constructors for custom elements.
CustomElementsCodegenAnalysis get customElementsCodegenAnalysis {
@@ -198,6 +191,7 @@
/// This is used to support serialization after type inference.
void registerJClosedWorld(covariant JsClosedWorld closedWorld) {
_elementMap = closedWorld.elementMap;
+ sourceInformationStrategy.onElementMapAvailable(_elementMap);
}
/// Called when the compiler starts running the codegen.
@@ -388,8 +382,7 @@
_compiler.reporter,
_compiler.dumpInfoTask,
_ssaMetrics,
- // ignore:deprecated_member_use_from_same_package
- elementMap,
+ _elementMap /*!*/,
sourceInformationStrategy);
}
diff --git a/pkg/compiler/test/sourcemaps/helpers/sourcemap_helper.dart b/pkg/compiler/test/sourcemaps/helpers/sourcemap_helper.dart
index d13cd71..d638c16 100644
--- a/pkg/compiler/test/sourcemaps/helpers/sourcemap_helper.dart
+++ b/pkg/compiler/test/sourcemaps/helpers/sourcemap_helper.dart
@@ -19,6 +19,7 @@
import 'package:compiler/src/js/js.dart' as js;
import 'package:compiler/src/js/js_debug.dart';
import 'package:compiler/src/js/js_source_mapping.dart';
+import 'package:compiler/src/js_model/element_map.dart';
import 'package:compiler/src/js_model/js_strategy.dart';
import 'package:compiler/src/source_file_provider.dart';
import '../../helpers/memory_compiler.dart';
@@ -221,6 +222,11 @@
RecordingSourceInformationStrategy(this.strategy);
@override
+ void onElementMapAvailable(JsToElementMap elementMap) {
+ strategy.onElementMapAvailable(elementMap);
+ }
+
+ @override
SourceInformationBuilder createBuilderForContext(MemberEntity member) {
return strategy.createBuilderForContext(member);
}
diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart
index d27a4ad..e22e4db 100644
--- a/pkg/dartdev/lib/src/commands/compile.dart
+++ b/pkg/dartdev/lib/src/commands/compile.dart
@@ -70,14 +70,16 @@
if (!Sdk.checkArtifactExists(librariesPath)) return 255;
VmInteropHandler.run(
- sdk.dart2jsSnapshot,
- [
- '--libraries-spec=$librariesPath',
- '--cfe-invocation-modes=compile',
- '--invoker=dart_cli',
- ...argResults!.arguments,
- ],
- packageConfigOverride: null);
+ sdk.dart2jsSnapshot,
+ [
+ '--libraries-spec=$librariesPath',
+ '--cfe-invocation-modes=compile',
+ '--invoker=dart_cli',
+ ...argResults!.arguments,
+ ],
+ packageConfigOverride: null,
+ forceNoSoundNullSafety: true,
+ );
return 0;
}
@@ -125,6 +127,9 @@
abbr: defineOption.abbr,
valueHelp: defineOption.valueHelp,
)
+ ..addFlag('sound-null-safety',
+ help: 'Respect the nullability of types at runtime.',
+ defaultsTo: null)
..addExperimentalFlags(verbose: verbose);
}
@@ -181,6 +186,11 @@
buildArgs.add('--snapshot-kind=$formatName');
buildArgs.add('--snapshot=${path.canonicalize(outputFile)}');
+ final bool? soundNullSafety = args['sound-null-safety'];
+ if (soundNullSafety != null) {
+ buildArgs.add('--${soundNullSafety ? '' : 'no-'}sound-null-safety');
+ }
+
final String? packages = args[packagesOption.flag];
if (packages != null) {
buildArgs.add('--packages=$packages');
diff --git a/pkg/dartdev/lib/src/vm_interop_handler.dart b/pkg/dartdev/lib/src/vm_interop_handler.dart
index 0913a93..388d1bd 100644
--- a/pkg/dartdev/lib/src/vm_interop_handler.dart
+++ b/pkg/dartdev/lib/src/vm_interop_handler.dart
@@ -13,10 +13,14 @@
/// Notifies the VM to run [script] with [args] upon DartDev exit.
///
/// If [packageConfigOverride] is given, that is where the packageConfig is found.
+ ///
+ /// If [forceNoSoundNullSafety] is given and set to true, the spawned isolate will run
+ /// with `--no-sound-null-safety` enabled.
static void run(
String script,
List<String> args, {
String? packageConfigOverride,
+ bool forceNoSoundNullSafety = false,
}) {
final port = _port;
if (port == null) return;
@@ -24,6 +28,7 @@
_kResultRun,
script,
packageConfigOverride,
+ forceNoSoundNullSafety,
// Copy the list so it doesn't get GC'd underneath us.
args.toList()
];
diff --git a/pkg/dartdev/test/commands/compile_test.dart b/pkg/dartdev/test/commands/compile_test.dart
index 11deb0e..dab7120 100644
--- a/pkg/dartdev/test/commands/compile_test.dart
+++ b/pkg/dartdev/test/commands/compile_test.dart
@@ -962,6 +962,56 @@
reason: 'File not found: $outFile');
});
+ test('Compile kernel with --sound-null-safety', () async {
+ final p = project(mainSrc: '''void main() {
+ print((<int?>[] is List<int>) ? 'oh no' : 'sound');
+ }''');
+ final inFile = path.canonicalize(path.join(p.dirPath, p.relativeFilePath));
+ final outFile = path.canonicalize(path.join(p.dirPath, 'mydill'));
+
+ var result = await p.run(
+ [
+ 'compile',
+ 'kernel',
+ '--sound-null-safety',
+ '-o',
+ outFile,
+ inFile,
+ ],
+ );
+
+ expect(result.stderr, isEmpty);
+ expect(result.stdout, contains(soundNullSafetyMessage));
+ expect(result.exitCode, 0);
+ expect(File(outFile).existsSync(), true,
+ reason: 'File not found: $outFile');
+ });
+
+ test('Compile kernel with --no-sound-null-safety', () async {
+ final p = project(mainSrc: '''void main() {
+ print((<int?>[] is List<int>) ? 'unsound' : 'oh no');
+ }''');
+ final inFile = path.canonicalize(path.join(p.dirPath, p.relativeFilePath));
+ final outFile = path.canonicalize(path.join(p.dirPath, 'mydill'));
+
+ var result = await p.run(
+ [
+ 'compile',
+ 'kernel',
+ '--no-sound-null-safety',
+ '-o',
+ outFile,
+ inFile,
+ ],
+ );
+
+ expect(result.stderr, isEmpty);
+ expect(result.stdout, isNot(contains(soundNullSafetyMessage)));
+ expect(result.exitCode, 0);
+ expect(File(outFile).existsSync(), true,
+ reason: 'File not found: $outFile');
+ });
+
test('Compile kernel without info', () async {
final p = project(mainSrc: '''void main() {}''');
final inFile = path.canonicalize(path.join(p.dirPath, p.relativeFilePath));
@@ -1085,6 +1135,56 @@
reason: 'File not found: $outFile');
});
+ test('Compile JIT snapshot with --sound-null-safety', () async {
+ final p = project(mainSrc: '''void main() {
+ print((<int?>[] is List<int>) ? 'oh no' : 'sound');
+ }''');
+ final inFile = path.canonicalize(path.join(p.dirPath, p.relativeFilePath));
+ final outFile = path.canonicalize(path.join(p.dirPath, 'myjit'));
+
+ var result = await p.run(
+ [
+ 'compile',
+ 'jit-snapshot',
+ '--sound-null-safety',
+ '-o',
+ outFile,
+ inFile,
+ ],
+ );
+
+ expect(result.stderr, isEmpty);
+ expect(result.stdout, contains(soundNullSafetyMessage));
+ expect(result.exitCode, 0);
+ expect(File(outFile).existsSync(), true,
+ reason: 'File not found: $outFile');
+ });
+
+ test('Compile JIT snapshot with --no-sound-null-safety', () async {
+ final p = project(mainSrc: '''void main() {
+ print((<int?>[] is List<int>) ? 'unsound' : 'oh no');
+ }''');
+ final inFile = path.canonicalize(path.join(p.dirPath, p.relativeFilePath));
+ final outFile = path.canonicalize(path.join(p.dirPath, 'mydill'));
+
+ var result = await p.run(
+ [
+ 'compile',
+ 'jit-snapshot',
+ '--no-sound-null-safety',
+ '-o',
+ outFile,
+ inFile,
+ ],
+ );
+
+ expect(result.stderr, isEmpty);
+ expect(result.stdout, isNot(contains(soundNullSafetyMessage)));
+ expect(result.exitCode, 0);
+ expect(File(outFile).existsSync(), true,
+ reason: 'File not found: $outFile');
+ });
+
test('Compile JIT snapshot with training args', () async {
final p =
project(mainSrc: '''void main(List<String> args) => print(args);''');
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index 3c53235..415b4a3 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -648,8 +648,8 @@
@override
DecoratedType? visitCatchClause(CatchClause node) {
_flowAnalysis!.tryCatchStatement_catchBegin(
- node.exceptionParameter2?.declaredElement,
- node.stackTraceParameter2?.declaredElement);
+ node.exceptionParameter?.declaredElement,
+ node.stackTraceParameter?.declaredElement);
_dispatch(node.exceptionType);
// The catch clause may not execute, so create a new scope for
// post-dominators.
diff --git a/pkg/nnbd_migration/lib/src/node_builder.dart b/pkg/nnbd_migration/lib/src/node_builder.dart
index 48550f6..376706c 100644
--- a/pkg/nnbd_migration/lib/src/node_builder.dart
+++ b/pkg/nnbd_migration/lib/src/node_builder.dart
@@ -90,37 +90,37 @@
@override
DecoratedType? visitCatchClause(CatchClause node) {
- var exceptionElement = node.exceptionParameter2?.declaredElement;
+ var exceptionElement = node.exceptionParameter?.declaredElement;
var target = exceptionElement == null
? NullabilityNodeTarget.text('exception type')
: NullabilityNodeTarget.element(exceptionElement);
DecoratedType? exceptionType = _pushNullabilityNodeTarget(
target, () => node.exceptionType?.accept(this));
- if (node.exceptionParameter2 != null) {
+ if (node.exceptionParameter != null) {
// If there is no `on Type` part of the catch clause, the type is dynamic.
if (exceptionType == null) {
exceptionType = DecoratedType.forImplicitType(_typeProvider,
_typeProvider.dynamicType, _graph, target.withCodeRef(node));
instrumentation?.implicitType(
- source, node.exceptionParameter2, exceptionType);
+ source, node.exceptionParameter, exceptionType);
}
_variables!.recordDecoratedElementType(
- node.exceptionParameter2?.declaredElement, exceptionType);
+ node.exceptionParameter?.declaredElement, exceptionType);
}
- if (node.stackTraceParameter2 != null) {
+ if (node.stackTraceParameter != null) {
// The type of stack traces is always StackTrace (non-nullable).
var target = NullabilityNodeTarget.text('stack trace').withCodeRef(node);
var nullabilityNode = NullabilityNode.forInferredType(target);
_graph.makeNonNullableUnion(nullabilityNode,
- StackTraceTypeOrigin(source, node.stackTraceParameter2));
+ StackTraceTypeOrigin(source, node.stackTraceParameter));
var stackTraceType =
DecoratedType(_typeProvider.stackTraceType, nullabilityNode);
_variables!.recordDecoratedElementType(
- node.stackTraceParameter2?.declaredElement, stackTraceType);
+ node.stackTraceParameter?.declaredElement, stackTraceType);
instrumentation?.implicitType(
- source, node.stackTraceParameter2, stackTraceType);
+ source, node.stackTraceParameter, stackTraceType);
}
- node.stackTraceParameter2?.accept(this);
+ node.stackTraceParameter?.accept(this);
node.body.accept(this);
return null;
}
diff --git a/runtime/bin/dartdev_isolate.cc b/runtime/bin/dartdev_isolate.cc
index d33b0de..1406ef3 100644
--- a/runtime/bin/dartdev_isolate.cc
+++ b/runtime/bin/dartdev_isolate.cc
@@ -42,6 +42,7 @@
DartDevIsolate::DartDev_Result_Unknown;
char** DartDevIsolate::DartDevRunner::script_ = nullptr;
char** DartDevIsolate::DartDevRunner::package_config_override_ = nullptr;
+bool* DartDevIsolate::DartDevRunner::force_no_sound_null_safety_ = nullptr;
std::unique_ptr<char*[], void (*)(char*[])>
DartDevIsolate::DartDevRunner::argv_ =
std::unique_ptr<char*[], void (*)(char**)>(nullptr, [](char**) {});
@@ -93,11 +94,13 @@
Dart_IsolateGroupCreateCallback create_isolate,
char** packages_file,
char** script,
+ bool* force_no_sound_null_safety,
CommandLineOptions* dart_options) {
create_isolate_ = create_isolate;
dart_options_ = dart_options;
package_config_override_ = packages_file;
script_ = script;
+ force_no_sound_null_safety_ = force_no_sound_null_safety;
// We've encountered an error during preliminary argument parsing so we'll
// output the standard help message and exit with an error code.
@@ -141,6 +144,10 @@
ASSERT(item2->type == Dart_CObject_kString ||
item2->type == Dart_CObject_kNull);
+ auto item3 = GetArrayItem(message, 3);
+
+ ASSERT(item3->type == Dart_CObject_kBool);
+
if (*script_ != nullptr) {
free(*script_);
}
@@ -154,8 +161,10 @@
*package_config_override_ = Utils::StrDup(item2->value.as_string);
}
- ASSERT(GetArrayItem(message, 3)->type == Dart_CObject_kArray);
- Dart_CObject* args = GetArrayItem(message, 3);
+ *force_no_sound_null_safety_ = item3->value.as_bool;
+
+ ASSERT(GetArrayItem(message, 4)->type == Dart_CObject_kArray);
+ Dart_CObject* args = GetArrayItem(message, 4);
argc_ = args->value.as_array.length;
Dart_CObject** dart_args = args->value.as_array.values;
@@ -282,8 +291,10 @@
Dart_IsolateGroupCreateCallback create_isolate,
char** packages_file,
char** script,
+ bool* force_no_sound_null_safety,
CommandLineOptions* dart_options) {
- runner_.Run(create_isolate, packages_file, script, dart_options);
+ runner_.Run(create_isolate, packages_file, script, force_no_sound_null_safety,
+ dart_options);
return runner_.result();
}
diff --git a/runtime/bin/dartdev_isolate.h b/runtime/bin/dartdev_isolate.h
index a6382f6..0d7f74a 100644
--- a/runtime/bin/dartdev_isolate.h
+++ b/runtime/bin/dartdev_isolate.h
@@ -61,6 +61,7 @@
Dart_IsolateGroupCreateCallback create_isolate,
char** packages_file,
char** script,
+ bool* sound_null_safety,
CommandLineOptions* dart_options);
protected:
@@ -71,6 +72,7 @@
void Run(Dart_IsolateGroupCreateCallback create_isolate,
char** package_config_override_,
char** script,
+ bool* force_no_sound_null_safety,
CommandLineOptions* dart_options);
DartDev_Result result() const { return result_; }
@@ -84,6 +86,7 @@
static DartDev_Result result_;
static char** script_;
static char** package_config_override_;
+ static bool* force_no_sound_null_safety_;
static std::unique_ptr<char*[], void (*)(char**)> argv_;
static intptr_t argc_;
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 0734e31..327a2d1 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -677,7 +677,8 @@
Dart_IsolateFlags* flags,
void* callback_data,
char** error,
- int* exit_code) {
+ int* exit_code,
+ bool force_no_sound_null_safety = false) {
int64_t start = Dart_TimelineGetMicros();
ASSERT(script_uri != NULL);
uint8_t* kernel_buffer = NULL;
@@ -753,11 +754,15 @@
}
PathSanitizer script_uri_sanitizer(script_uri);
PathSanitizer packages_config_sanitizer(packages_config);
- flags->null_safety = Dart_DetectNullSafety(
- script_uri_sanitizer.sanitized_uri(),
- packages_config_sanitizer.sanitized_uri(),
- DartUtils::original_working_directory, isolate_snapshot_data,
- isolate_snapshot_instructions, kernel_buffer, kernel_buffer_size);
+ if (force_no_sound_null_safety) {
+ flags->null_safety = false;
+ } else {
+ flags->null_safety = Dart_DetectNullSafety(
+ script_uri_sanitizer.sanitized_uri(),
+ packages_config_sanitizer.sanitized_uri(),
+ DartUtils::original_working_directory, isolate_snapshot_data,
+ isolate_snapshot_instructions, kernel_buffer, kernel_buffer_size);
+ }
#endif // !defined(DART_PRECOMPILED_RUNTIME)
auto isolate_group_data = new IsolateGroupData(
@@ -977,6 +982,7 @@
void RunMainIsolate(const char* script_name,
const char* package_config_override,
+ bool force_no_sound_null_safety,
CommandLineOptions* dart_options) {
if (script_name != NULL) {
const char* base_name = strrchr(script_name, '/');
@@ -1015,7 +1021,8 @@
/* is_main_isolate */ true, script_name, "main",
Options::packages_file() == nullptr ? package_config_override
: Options::packages_file(),
- &flags, NULL /* callback_data */, &error, &exit_code);
+ &flags, NULL /* callback_data */, &error, &exit_code,
+ force_no_sound_null_safety);
if (isolate == NULL) {
Syslog::PrintErr("%s\n", error);
@@ -1357,12 +1364,13 @@
Dart_SetEmbedderInformationCallback(&EmbedderInformationCallback);
bool ran_dart_dev = false;
bool should_run_user_program = true;
+ bool force_no_sound_null_safety = false;
#if !defined(DART_PRECOMPILED_RUNTIME)
if (DartDevIsolate::should_run_dart_dev() && !Options::disable_dart_dev() &&
Options::gen_snapshot_kind() == SnapshotKind::kNone) {
DartDevIsolate::DartDev_Result dartdev_result = DartDevIsolate::RunDartDev(
CreateIsolateGroupAndSetup, &package_config_override, &script_name,
- &dart_options);
+ &force_no_sound_null_safety, &dart_options);
ASSERT(dartdev_result != DartDevIsolate::DartDev_Result_Unknown);
ran_dart_dev = true;
should_run_user_program =
@@ -1392,7 +1400,8 @@
} else {
// Run the main isolate until we aren't told to restart.
- RunMainIsolate(script_name, package_config_override, &dart_options);
+ RunMainIsolate(script_name, package_config_override,
+ force_no_sound_null_safety, &dart_options);
}
}
}
diff --git a/tests/language/library/unnamed_library_test.dart b/tests/language/library/unnamed_library_test.dart
new file mode 100644
index 0000000..71d2fce
--- /dev/null
+++ b/tests/language/library/unnamed_library_test.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code as governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// SharedOptions=--enable-experiment=unnamed-libraries
+
+/// Doc comment.
+@deprecated
+library;
+
+main() {}
diff --git a/tests/language_2/super/bound_closure_test.dart b/tests/language_2/super/bound_closure_test.dart
index 7f99e8d..439a7e8 100644
--- a/tests/language_2/super/bound_closure_test.dart
+++ b/tests/language_2/super/bound_closure_test.dart
@@ -75,7 +75,7 @@
fooIntercept28() => confuse(super.lastWhere)(3, orElse: 77);
// Warning: overrides should not change default parameter values.
- bar([var optional]) => -1; // //# 01: static type warning
+ bar([var optional]) => -1; // //# 01: ok
bar2({namedOptional}) => -1; // //# 01: continued
bar3(x, [var optional]) => -1; // //# 01: continued
bar4(x, {namedOptional}) => -1; //# 01: continued
diff --git a/tools/VERSION b/tools/VERSION
index 2c2d141..3799845 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 19
PATCH 0
-PRERELEASE 274
+PRERELEASE 275
PRERELEASE_PATCH 0