mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 22:00:09 +00:00
Fix for naming constructor with missing name.
R=brianwilkerson@google.com Change-Id: I89ef01033c9e14417286e5ea95d2d88e1c498982 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106425 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
parent
f7d3e5bebf
commit
770675b668
|
@ -24,6 +24,11 @@ class AstBinaryFlags {
|
|||
VariableDeclaration,
|
||||
);
|
||||
|
||||
static final _hasName = _checkBit(
|
||||
5,
|
||||
ConstructorDeclaration,
|
||||
);
|
||||
|
||||
static final _hasNot = _checkBit(
|
||||
0,
|
||||
IsExpression,
|
||||
|
@ -217,6 +222,7 @@ class AstBinaryFlags {
|
|||
bool hasAwait: false,
|
||||
bool hasEqual: false,
|
||||
bool hasInitializer: false,
|
||||
bool hasName: false,
|
||||
bool hasNot: false,
|
||||
bool hasPeriod: false,
|
||||
bool hasPeriod2: false,
|
||||
|
@ -260,6 +266,9 @@ class AstBinaryFlags {
|
|||
if (hasInitializer) {
|
||||
result |= _hasInitializer;
|
||||
}
|
||||
if (hasName) {
|
||||
result |= _hasName;
|
||||
}
|
||||
if (hasNot) {
|
||||
result |= _hasNot;
|
||||
}
|
||||
|
@ -371,6 +380,10 @@ class AstBinaryFlags {
|
|||
return (flags & _hasInitializer) != 0;
|
||||
}
|
||||
|
||||
static bool hasName(int flags) {
|
||||
return (flags & _hasName) != 0;
|
||||
}
|
||||
|
||||
static bool hasNot(int flags) {
|
||||
return (flags & _hasNot) != 0;
|
||||
}
|
||||
|
|
|
@ -384,6 +384,16 @@ class AstBinaryReader {
|
|||
returnType.token.offset =
|
||||
informativeData?.constructorDeclaration_returnTypeOffset ?? 0;
|
||||
|
||||
Token periodToken;
|
||||
SimpleIdentifier nameIdentifier;
|
||||
if (AstBinaryFlags.hasName(data.flags)) {
|
||||
periodToken = Token(
|
||||
TokenType.PERIOD,
|
||||
informativeData?.constructorDeclaration_periodOffset ?? 0,
|
||||
);
|
||||
nameIdentifier = _declaredIdentifier(data);
|
||||
}
|
||||
|
||||
var node = astFactory.constructorDeclaration(
|
||||
_readDocumentationComment(data),
|
||||
_readNodeListLazy(data.annotatedNode_metadata),
|
||||
|
@ -391,13 +401,8 @@ class AstBinaryReader {
|
|||
AstBinaryFlags.isConst(data.flags) ? _Tokens.CONST : null,
|
||||
AstBinaryFlags.isFactory(data.flags) ? _Tokens.FACTORY : null,
|
||||
returnType,
|
||||
data.name.isNotEmpty
|
||||
? Token(
|
||||
TokenType.PERIOD,
|
||||
informativeData?.constructorDeclaration_periodOffset ?? 0,
|
||||
)
|
||||
: null,
|
||||
data.name.isNotEmpty ? _declaredIdentifier(data) : null,
|
||||
periodToken,
|
||||
nameIdentifier,
|
||||
_readNodeLazy(data.constructorDeclaration_parameters),
|
||||
_Tokens.choose(
|
||||
AstBinaryFlags.hasSeparatorColon(data.flags),
|
||||
|
|
|
@ -315,6 +315,7 @@ class AstBinaryWriter extends ThrowingAstVisitor<LinkedNodeBuilder> {
|
|||
informativeId: getInformativeId(node),
|
||||
);
|
||||
builder.flags = AstBinaryFlags.encode(
|
||||
hasName: node.name != null,
|
||||
hasSeparatorColon: node.separator?.type == TokenType.COLON,
|
||||
hasSeparatorEquals: node.separator?.type == TokenType.EQ,
|
||||
isAbstract: node.body is EmptyFunctionBody,
|
||||
|
|
|
@ -32,6 +32,22 @@ class C {
|
|||
''');
|
||||
}
|
||||
|
||||
test_constructorDeclaration_named_missingName() async {
|
||||
await _assertCanBeAnalyzed('''
|
||||
class C {
|
||||
C.();
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
test_constructorDeclaration_named_missingName_factory() async {
|
||||
await _assertCanBeAnalyzed('''
|
||||
class C {
|
||||
factory C.();
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
test_genericFunction_asTypeArgument_ofUnresolvedClass() async {
|
||||
await _assertCanBeAnalyzed(r'''
|
||||
C<int Function()> c;
|
||||
|
|
Loading…
Reference in a new issue