API. Deprecate FormalParameterElement.formalParameters and typeParameters.
For clients outside the library the useful property in `FormalParameterElement.type`, not *how* this type was specified syntactically: `void f(int a<T>())` vs. `void f(int Function<T>() a)`. This way, we have to think about these type parameters and formal parameters only locally, like for example about local variables - they exist, enclosed in a fragment, but don't leak outside into the element model of a method. I found this while working on the augmentations: that formal parameters have to have the same types in the introductory declaration, and in augmentations. Change-Id: Ie4e92ebd0cd0204c4ba80200a9497e95859cc3e7 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/509522 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
committed by
dart-scoped@luci-project-accounts.iam.gserviceaccount.com
parent
55dcbad483
commit
ea50ec6486
@@ -1,7 +1,8 @@
|
||||
## 13.2.0-dev
|
||||
|
||||
* Internal changes only.
|
||||
* Allow package_config `3.x.x`.
|
||||
* Deprecate `FormalParameterElement.formalParameters` and `typeParameters`.
|
||||
Use `FormalParameterElement.type` instead.
|
||||
|
||||
## 13.1.0
|
||||
|
||||
|
||||
@@ -3669,7 +3669,7 @@ package:analyzer/dart/element/element.dart:
|
||||
baseElement (getter: FormalParameterElement)
|
||||
defaultValueCode (getter: String?)
|
||||
firstFragment (getter: FormalParameterFragment)
|
||||
formalParameters (getter: List<FormalParameterElement>)
|
||||
formalParameters (getter: List<FormalParameterElement>, deprecated)
|
||||
fragments (getter: List<FormalParameterFragment>)
|
||||
hasDefaultValue (getter: bool)
|
||||
isCovariant (getter: bool)
|
||||
@@ -3683,7 +3683,7 @@ package:analyzer/dart/element/element.dart:
|
||||
isRequiredNamed (getter: bool)
|
||||
isRequiredPositional (getter: bool)
|
||||
isSuperFormal (getter: bool, deprecated)
|
||||
typeParameters (getter: List<TypeParameterElement>)
|
||||
typeParameters (getter: List<TypeParameterElement>, deprecated)
|
||||
appendToWithoutDelimiters (method: void Function(StringBuffer))
|
||||
FormalParameterFragment (class extends Object implements VariableFragment, LocalFragment, abstract):
|
||||
new (constructor: FormalParameterFragment Function())
|
||||
|
||||
@@ -1378,6 +1378,7 @@ abstract class FormalParameterElement implements VariableElement, LocalElement {
|
||||
///
|
||||
/// A parameter will only define other parameters if it is a function typed
|
||||
/// formal parameter.
|
||||
@Deprecated('Use the function type of this parameter instead')
|
||||
List<FormalParameterElement> get formalParameters;
|
||||
|
||||
@override
|
||||
@@ -1451,6 +1452,7 @@ abstract class FormalParameterElement implements VariableElement, LocalElement {
|
||||
///
|
||||
/// A parameter will only define type parameters if it is a function typed
|
||||
/// parameter.
|
||||
@Deprecated('Use the function type of this parameter instead')
|
||||
List<TypeParameterElement> get typeParameters;
|
||||
|
||||
/// Appends the type, name and possibly the default value of this parameter
|
||||
|
||||
@@ -3942,6 +3942,7 @@ class FormalParameterElementImpl extends PromotableElementImpl
|
||||
// .map((fragment) => (fragment as TypeParameterElementImpl).element)
|
||||
// .toList();
|
||||
|
||||
@Deprecated('Use the function type of this parameter instead')
|
||||
@override
|
||||
// TODO(augmentations): Implement the merge of formal parameters.
|
||||
List<FormalParameterElementImpl> get formalParameters => _firstFragment
|
||||
@@ -4018,6 +4019,7 @@ class FormalParameterElementImpl extends PromotableElementImpl
|
||||
return _firstFragment.parameterKind;
|
||||
}
|
||||
|
||||
@Deprecated('Use the function type of this parameter instead')
|
||||
@override
|
||||
// TODO(augmentations): Implement the merge of formal parameters.
|
||||
List<TypeParameterElementImpl> get typeParameters {
|
||||
@@ -6359,6 +6361,7 @@ mixin InternalFormalParameterElement on InternalVariableElement
|
||||
@override
|
||||
TypeImpl get type;
|
||||
|
||||
@Deprecated('Use the function type of this parameter instead')
|
||||
@override
|
||||
List<TypeParameterElementImpl> get typeParameters;
|
||||
|
||||
|
||||
@@ -465,6 +465,7 @@ class SubstitutedFieldFormalParameterElementImpl
|
||||
required MapSubstitution substitution,
|
||||
}) {
|
||||
var freshTypeParameters = _SubstitutedTypeParameters(
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
baseElement.typeParameters,
|
||||
substitution,
|
||||
);
|
||||
@@ -519,6 +520,7 @@ class SubstitutedFieldFormalParameterElementImpl
|
||||
class SubstitutedFormalParameterElementImpl
|
||||
extends SubstitutedVariableElementImpl
|
||||
with InternalFormalParameterElement {
|
||||
@Deprecated('Use the function type of this parameter instead')
|
||||
@override
|
||||
final List<TypeParameterElementImpl> typeParameters;
|
||||
|
||||
@@ -526,6 +528,7 @@ class SubstitutedFormalParameterElementImpl
|
||||
required FormalParameterElementImpl baseElement,
|
||||
required MapSubstitution substitution,
|
||||
}) {
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
var typeParameters = baseElement.typeParameters;
|
||||
if (typeParameters.isEmpty) {
|
||||
// Happens often. Avoid doing unneeded allocation.
|
||||
@@ -558,6 +561,7 @@ class SubstitutedFormalParameterElementImpl
|
||||
|
||||
@override
|
||||
List<Element> get children {
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
return [...typeParameters, ...formalParameters];
|
||||
}
|
||||
|
||||
@@ -573,6 +577,7 @@ class SubstitutedFormalParameterElementImpl
|
||||
@override
|
||||
FormalParameterFragmentImpl get firstFragment => baseElement.firstFragment;
|
||||
|
||||
@Deprecated('Use the function type of this parameter instead')
|
||||
@override
|
||||
List<FormalParameterElementImpl> get formalParameters =>
|
||||
baseElement.formalParameters;
|
||||
@@ -904,6 +909,7 @@ class SubstitutedSuperFormalParameterElementImpl
|
||||
required MapSubstitution substitution,
|
||||
}) {
|
||||
var freshTypeParameters = _SubstitutedTypeParameters(
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
baseElement.typeParameters,
|
||||
substitution,
|
||||
);
|
||||
|
||||
@@ -795,7 +795,9 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
|
||||
|
||||
var element = node.declaredFragment!.element;
|
||||
element.type = FunctionTypeImpl(
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
typeParameters: element.typeParameters,
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
formalParameters: element.formalParameters,
|
||||
returnType: node.type?.type ?? _typeProvider.dynamicType,
|
||||
nullabilitySuffix: _getNullability(
|
||||
|
||||
@@ -248,6 +248,7 @@ class ScopeContext {
|
||||
node.type?.accept(visitor);
|
||||
} else {
|
||||
var element = node.declaredFragment!.element;
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
withTypeParameterScope(element.typeParameters, () {
|
||||
node.type?.accept(visitor);
|
||||
functionTypedSuffix.typeParameters?.accept(visitor);
|
||||
|
||||
@@ -788,6 +788,7 @@ class LibraryReader {
|
||||
reader,
|
||||
fragment.typeParameters,
|
||||
);
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
_readTypeParameterElementResolutions(reader, element.typeParameters);
|
||||
_readFormalParameterFragmentsResolution(
|
||||
libraryFragment,
|
||||
|
||||
@@ -493,8 +493,10 @@ class BundleWriter {
|
||||
|
||||
_resolutionSink._writeMetadata(fragment.metadata);
|
||||
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
_resolutionSink.withTypeParameters(fragment.element.typeParameters, () {
|
||||
_sink.writeList(fragment.typeParameters, _writeTypeParameterFragment);
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
_writeTypeParameterElementResolutions(fragment.element.typeParameters);
|
||||
_sink.writeList(fragment.formalParameters, _writeFormalParameterFragment);
|
||||
_resolutionSink.writeBool(fragment.element.inheritsCovariant);
|
||||
|
||||
@@ -678,12 +678,14 @@ class _Element2Writer extends _AbstractElementWriter {
|
||||
_writeElementList(
|
||||
'typeParameters',
|
||||
e,
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
e.typeParameters,
|
||||
_writeTypeParameterElement,
|
||||
);
|
||||
_writeElementList(
|
||||
'formalParameters',
|
||||
e,
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
e.formalParameters,
|
||||
_writeFormalParameterElement,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user