Stop using FormalParameter.kind in analyzer.

So that we could remove it from the public API in a breaking change.

Change-Id: I625bd650d6e6fb4734e40bd8d58ae2142d7fb25e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/154304
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov 2020-07-14 16:23:09 +00:00 committed by commit-bot@chromium.org
parent e7abc41107
commit 72bb1d1428
8 changed files with 65 additions and 52 deletions

View file

@ -4339,7 +4339,6 @@ abstract class FormalParameterImpl extends AstNodeImpl
bool get isRequiredPositional => kind == ParameterKind.REQUIRED;
@override
// Overridden to remove the 'deprecated' annotation.
ParameterKind get kind;
}
@ -7685,11 +7684,10 @@ abstract class NormalFormalParameterImpl extends FormalParameterImpl
_identifier = _becomeParentOf(identifier as SimpleIdentifierImpl);
}
@deprecated
@override
ParameterKind get kind {
AstNode parent = this.parent;
if (parent is DefaultFormalParameter) {
if (parent is DefaultFormalParameterImpl) {
return parent.kind;
}
return ParameterKind.REQUIRED;

View file

@ -0,0 +1,12 @@
// Copyright (c) 2020, 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/dart/ast/ast.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
extension ListOfFormalParameterExtension on List<FormalParameter> {
Iterable<FormalParameterImpl> get asImpl {
return this.cast<FormalParameterImpl>();
}
}

View file

@ -339,8 +339,7 @@ class AstCloner implements AstVisitor<AstNode> {
@override
DefaultFormalParameter visitDefaultFormalParameter(
DefaultFormalParameter node) =>
// ignore: deprecated_member_use_from_same_package
covariant DefaultFormalParameterImpl node) =>
astFactory.defaultFormalParameter(cloneNode(node.parameter), node.kind,
cloneToken(node.separator), cloneNode(node.defaultValue));
@ -1446,10 +1445,9 @@ class AstComparator implements AstVisitor<bool> {
}
@override
bool visitDefaultFormalParameter(DefaultFormalParameter node) {
DefaultFormalParameter other = _other as DefaultFormalParameter;
bool visitDefaultFormalParameter(covariant DefaultFormalParameterImpl node) {
var other = _other as DefaultFormalParameterImpl;
return isEqualNodes(node.parameter, other.parameter) &&
// ignore: deprecated_member_use_from_same_package
node.kind == other.kind &&
isEqualTokens(node.separator, other.separator) &&
isEqualNodes(node.defaultValue, other.defaultValue);
@ -4321,11 +4319,10 @@ class ResolutionCopier implements AstVisitor<bool> {
}
@override
bool visitDefaultFormalParameter(DefaultFormalParameter node) {
DefaultFormalParameter toNode = this._toNode as DefaultFormalParameter;
bool visitDefaultFormalParameter(covariant DefaultFormalParameterImpl node) {
var toNode = this._toNode as DefaultFormalParameterImpl;
return _and(
_isEqualNodes(node.parameter, toNode.parameter),
// ignore: deprecated_member_use_from_same_package
node.kind == toNode.kind,
_isEqualTokens(node.separator, toNode.separator),
_isEqualNodes(node.defaultValue, toNode.defaultValue));

View file

@ -15,6 +15,7 @@ import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/constant/compute.dart';
import 'package:analyzer/src/dart/constant/evaluation.dart';
import 'package:analyzer/src/dart/constant/value.dart';
@ -6679,8 +6680,7 @@ class ParameterElementImpl extends VariableElementImpl
if (_parameterKind != null) return _parameterKind;
if (linkedNode != null) {
FormalParameter linkedNode = this.linkedNode;
// ignore: deprecated_member_use_from_same_package
var linkedNode = this.linkedNode as FormalParameterImpl;
return linkedNode.kind;
}
return _parameterKind;

View file

@ -336,7 +336,7 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
}
@override
void visitDefaultFormalParameter(DefaultFormalParameter node) {
void visitDefaultFormalParameter(covariant DefaultFormalParameterImpl node) {
NormalFormalParameter normalParameter = node.parameter;
SimpleIdentifier nameNode = normalParameter.identifier;
@ -358,7 +358,6 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
element.isConst = node.isConst;
element.isExplicitlyCovariant = node.parameter.covariantKeyword != null;
element.isFinal = node.isFinal;
// ignore: deprecated_member_use_from_same_package
element.parameterKind = node.kind;
if (normalParameter is SimpleFormalParameter &&
@ -457,7 +456,7 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
}
@override
void visitFieldFormalParameter(FieldFormalParameter node) {
void visitFieldFormalParameter(covariant FieldFormalParameterImpl node) {
FieldFormalParameterElementImpl element;
if (node.parent is DefaultFormalParameter) {
element = node.declaredElement;
@ -475,7 +474,6 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
element.isConst = node.isConst;
element.isExplicitlyCovariant = node.covariantKeyword != null;
element.isFinal = node.isFinal;
// ignore: deprecated_member_use_from_same_package
element.parameterKind = node.kind;
_setCodeRange(element, node);
element.metadata = _createElementAnnotations(node.metadata);
@ -629,7 +627,9 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
}
@override
void visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
void visitFunctionTypedFormalParameter(
covariant FunctionTypedFormalParameterImpl node,
) {
ParameterElementImpl element;
if (node.parent is DefaultFormalParameter) {
element = node.declaredElement;
@ -643,7 +643,6 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
element.isConst = node.isConst;
element.isExplicitlyCovariant = node.covariantKeyword != null;
element.isFinal = node.isFinal;
// ignore: deprecated_member_use_from_same_package
element.parameterKind = node.kind;
_setCodeRange(element, node);
}
@ -857,7 +856,7 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
}
@override
void visitSimpleFormalParameter(SimpleFormalParameter node) {
void visitSimpleFormalParameter(covariant SimpleFormalParameterImpl node) {
ParameterElementImpl element;
if (node.parent is DefaultFormalParameter) {
element = node.declaredElement;
@ -877,15 +876,14 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
element.isConst = node.isConst;
element.isExplicitlyCovariant = node.covariantKeyword != null;
element.isFinal = node.isFinal;
// ignore: deprecated_member_use_from_same_package
element.parameterKind = node.kind;
if (node.type == null) {
element.hasImplicitType = true;
}
(node as SimpleFormalParameterImpl).declaredElement = element;
node.declaredElement = element;
}
nameNode?.staticElement = element;
(node as SimpleFormalParameterImpl).declaredElement = element;
node.declaredElement = element;
}
node.type?.accept(this);

View file

@ -8,6 +8,7 @@ import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_visitor.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_visitor.dart';
@ -160,11 +161,10 @@ class FunctionTypeBuilder extends TypeBuilder {
bool isNNBD,
FormalParameterList node,
) {
return node.parameters.map((parameter) {
return node.parameters.asImpl.map((parameter) {
return ParameterElementImpl.synthetic(
parameter.identifier?.name ?? '',
_getParameterType(isNNBD, parameter),
// ignore: deprecated_member_use_from_same_package
parameter.kind,
);
}).toList();

View file

@ -7,6 +7,7 @@ import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_visitor.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_algebra.dart';
@ -203,15 +204,7 @@ class NamedTypeBuilder extends TypeBuilder {
}) {
var returnType = _buildNodeType(returnTypeNode);
var typeParameters = _typeParameters(typeParameterList);
var formalParameters = parameterList.parameters.map((parameter) {
return ParameterElementImpl.synthetic(
parameter.identifier?.name ?? '',
_buildFormalParameterType(parameter),
// ignore: deprecated_member_use_from_same_package
parameter.kind,
);
}).toList();
var formalParameters = _formalParameters(parameterList);
return FunctionTypeImpl(
typeFormals: typeParameters,
@ -242,6 +235,16 @@ class NamedTypeBuilder extends TypeBuilder {
}
}
List<ParameterElementImpl> _formalParameters(FormalParameterList node) {
return node.parameters.asImpl.map((parameter) {
return ParameterElementImpl.synthetic(
parameter.identifier?.name ?? '',
_buildFormalParameterType(parameter),
parameter.kind,
);
}).toList();
}
NullabilitySuffix _getNullabilitySuffix(bool hasQuestion) {
if (hasQuestion) {
return NullabilitySuffix.question;

View file

@ -8,6 +8,7 @@ import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
@ -55,24 +56,8 @@ class TypesBuilder {
NullabilitySuffix nullabilitySuffix,
) {
var returnType = returnTypeNode?.type ?? _dynamicType;
List<TypeParameterElement> typeParameters;
if (typeParameterList != null) {
typeParameters = typeParameterList.typeParameters
.map<TypeParameterElement>((p) => p.declaredElement)
.toList();
} else {
typeParameters = const <TypeParameterElement>[];
}
var formalParameters = parameterList.parameters.map((parameter) {
return ParameterElementImpl.synthetic(
parameter.identifier?.name ?? '',
_getType(parameter),
// ignore: deprecated_member_use_from_same_package
parameter.kind,
);
}).toList();
var typeParameters = _typeParameters(typeParameterList);
var formalParameters = _formalParameters(parameterList);
return FunctionTypeImpl(
typeFormals: typeParameters,
@ -156,6 +141,16 @@ class TypesBuilder {
}
}
List<ParameterElementImpl> _formalParameters(FormalParameterList node) {
return node.parameters.asImpl.map((parameter) {
return ParameterElementImpl.synthetic(
parameter.identifier?.name ?? '',
_getType(parameter),
parameter.kind,
);
}).toList();
}
void _functionTypeAlias(FunctionTypeAlias node) {
var returnTypeNode = node.returnType;
LazyAst.setReturnType(node, returnTypeNode?.type ?? _dynamicType);
@ -188,6 +183,16 @@ class TypesBuilder {
}
}
List<TypeParameterElement> _typeParameters(TypeParameterList node) {
if (node == null) {
return const <TypeParameterElement>[];
}
return node.typeParameters
.map<TypeParameterElement>((p) => p.declaredElement)
.toList();
}
static DartType _getType(FormalParameter node) {
if (node is DefaultFormalParameter) {
return _getType(node.parameter);