Skip to content

Commit 6fb628e

Browse files
author
Dart CI
committed
Version 3.11.0-110.0.dev
Merge a6faf24 into dev
2 parents 415a641 + a6faf24 commit 6fb628e

File tree

50 files changed

+4696
-165
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+4696
-165
lines changed

DEPS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ vars = {
5454

5555
# co19 is a cipd package automatically generated for each co19 commit.
5656
# Use tests/co19/update.sh to update this hash.
57-
"co19_rev": "dfea6e4100267a94e63563fb86fe3ad53bccb13b",
57+
"co19_rev": "467016acdb5842571acc75a3f98ec08cf53376c6",
5858

5959
# The internal benchmarks to use. See go/dart-benchmarks-internal
6060
"benchmarks_internal_rev": "13eb8dedf372e4255e64349b6e57960f7de4df2d",

pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2193,6 +2193,11 @@ class ForwardingListener implements Listener {
21932193
listener?.handleWildcardPattern(keyword, wildcard);
21942194
}
21952195

2196+
@override
2197+
void handleNoIdentifier(Token token) {
2198+
listener?.handleNoIdentifier(token);
2199+
}
2200+
21962201
@override
21972202
void handleNoType(Token lastConsumed) {
21982203
listener?.handleNoType(lastConsumed);

pkg/_fe_analyzer_shared/lib/src/parser/listener.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2389,6 +2389,10 @@ abstract class Listener implements UnescapeErrorListener {
23892389
logEvent("NoConstructorReferenceContinuationAfterTypeArguments");
23902390
}
23912391

2392+
void handleNoIdentifier(Token token) {
2393+
logEvent("NoIdentifier");
2394+
}
2395+
23922396
void handleNoTypeNameInConstructorReference(Token token) {
23932397
logEvent("NoTypeNameInConstructorReference");
23942398
}

pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4015,7 +4015,7 @@ class Parser {
40154015
}
40164016

40174017
Token beforeType = token;
4018-
if (varFinalOrConst != null) {
4018+
if (varFinalOrConst != null && !varFinalOrConst.isA(Keyword.CONST)) {
40194019
Token? afterOuterPattern = skipOuterPattern(beforeType);
40204020
if (afterOuterPattern != null &&
40214021
(afterOuterPattern.next!.isA(TokenType.EQ))) {
@@ -5192,7 +5192,7 @@ class Parser {
51925192
listener.beginMember();
51935193

51945194
Token beforeType = token;
5195-
if (varFinalOrConst != null) {
5195+
if (varFinalOrConst != null && !varFinalOrConst.isA(Keyword.CONST)) {
51965196
Token? afterOuterPattern = skipOuterPattern(beforeType);
51975197
if (afterOuterPattern != null &&
51985198
(afterOuterPattern.next!.isA(TokenType.EQ))) {
@@ -5267,9 +5267,31 @@ class Parser {
52675267
externalToken,
52685268
staticToken ?? covariantToken,
52695269
varFinalOrConst,
5270+
/* hasName = */ true,
52705271
);
52715272
listener.endMember();
52725273
return token;
5274+
} else if (_isDeclaringConstructorsFeatureEnabled &&
5275+
next2.isA(TokenType.OPEN_PAREN)) {
5276+
if (typeInfo == noType &&
5277+
covariantToken == null &&
5278+
//externalToken = null &&
5279+
lateToken == null &&
5280+
staticToken == null &&
5281+
(varFinalOrConst == null || varFinalOrConst.isA(Keyword.CONST)) &&
5282+
abstractToken == null) {
5283+
token = parseFactoryMethod(
5284+
token,
5285+
kind,
5286+
beforeStart,
5287+
externalToken,
5288+
staticToken ?? covariantToken,
5289+
varFinalOrConst,
5290+
/* hasName = */ false,
5291+
);
5292+
listener.endMember();
5293+
return token;
5294+
}
52735295
}
52745296
// Fall through to continue parsing `factory` as an identifier.
52755297
} else if (identical(value, 'operator')) {
@@ -5832,6 +5854,7 @@ class Parser {
58325854
Token? externalToken,
58335855
Token? staticOrCovariant,
58345856
Token? varFinalOrConst,
5857+
bool hasName,
58355858
) {
58365859
Token factoryKeyword = token = token.next!;
58375860
assert(factoryKeyword.isA(Keyword.FACTORY));
@@ -5870,11 +5893,15 @@ class Parser {
58705893
externalToken,
58715894
varFinalOrConst,
58725895
);
5873-
token = ensureIdentifier(token, IdentifierContext.methodDeclaration);
5874-
token = parseQualifiedRestOpt(
5875-
token,
5876-
IdentifierContext.methodDeclarationContinuation,
5877-
);
5896+
if (!hasName) {
5897+
listener.handleNoIdentifier(token);
5898+
} else {
5899+
token = ensureIdentifier(token, IdentifierContext.methodDeclaration);
5900+
token = parseQualifiedRestOpt(
5901+
token,
5902+
IdentifierContext.methodDeclarationContinuation,
5903+
);
5904+
}
58785905
token = parseMethodTypeVar(token);
58795906
token = parseFormalParametersRequiredOpt(token, MemberKind.Factory);
58805907
Token asyncToken = token.next!;

pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ class ExtensionMemberResolver {
159159
}
160160

161161
/// Finds extensions applicable to [declaration] for static member lookups.
162-
StaticExtensionResolutionResult findExtensionForDeclaration(
162+
StaticExtensionResolutionResult findStaticExtension(
163163
InterfaceElement declaration,
164164
SyntacticEntity nameEntity,
165165
Name name,

pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -802,7 +802,7 @@ class PropertyElementResolver with ScopeHelpers {
802802
if (readElement == null) {
803803
if (_definingLibrary.featureSet.isEnabled(Feature.static_extensions)) {
804804
// When direct lookups fail, try static extension resolution.
805-
var result = _resolver.typePropertyResolver.resolveForDeclaration(
805+
var result = _resolver.typePropertyResolver.resolveStaticExtension(
806806
declaration: typeReference,
807807
name: propertyName.name,
808808
hasRead: hasRead,
@@ -860,6 +860,31 @@ class PropertyElementResolver with ScopeHelpers {
860860
writeElementRecovery = writeElement;
861861
writeElement = null;
862862
}
863+
} else if (_definingLibrary.featureSet.isEnabled(
864+
Feature.static_extensions,
865+
)) {
866+
// When direct lookups fail, try static extension resolution.
867+
var result = _resolver.typePropertyResolver.resolveStaticExtension(
868+
declaration: typeReference,
869+
name: propertyName.name,
870+
hasRead: hasRead,
871+
hasWrite: hasWrite,
872+
propertyErrorEntity: propertyName,
873+
nameErrorEntity: propertyName,
874+
);
875+
if (result.setter2 != null) {
876+
writeElementRecovery = writeElement;
877+
writeElement = result.setter2;
878+
} else {
879+
// Recovery, try to use getter.
880+
writeElementRecovery = typeReference.getGetter(propertyName.name);
881+
AssignmentVerifier(diagnosticReporter).verify(
882+
node: propertyName,
883+
requested: null,
884+
recovery: writeElementRecovery,
885+
receiverType: typeReference.thisType,
886+
);
887+
}
863888
} else {
864889
// Recovery, try to use getter.
865890
writeElementRecovery = typeReference.getGetter(propertyName.name);

pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ class TypePropertyResolver {
241241
}
242242

243243
/// Resolve static invocations for [declaration].
244-
ResolutionResult resolveForDeclaration({
244+
ResolutionResult resolveStaticExtension({
245245
required InterfaceElement declaration,
246246
required String name,
247247
required bool hasRead,
@@ -256,23 +256,28 @@ class TypePropertyResolver {
256256
_nameErrorEntity = nameErrorEntity;
257257
_resetResult();
258258

259-
var getterName = Name(_definingLibrary.uri, _name);
260-
var result = _extensionResolver.findExtensionForDeclaration(
259+
var memberName = Name(_definingLibrary.uri, _name);
260+
var result = _extensionResolver.findStaticExtension(
261261
declaration,
262262
_nameErrorEntity,
263-
getterName,
263+
memberName,
264264
);
265-
// TODO(cstefantsova): Add the support for setters and methods.
265+
266266
_reportedGetterError =
267267
result == const AmbiguousStaticExtensionResolutionError();
268-
_reportedSetterError = false;
268+
_reportedSetterError =
269+
result == const AmbiguousStaticExtensionResolutionError();
269270

270-
if (result.member != null) {
271-
// TODO(cstefantsova): Add the support for setters and methods.
271+
if (result.member != null && hasRead) {
272272
_needsGetterError = false;
273273
_getterRequested = result.member;
274274
}
275275

276+
if (result.member != null && hasWrite) {
277+
_needsSetterError = false;
278+
_setterRequested = result.member;
279+
}
280+
276281
return _toResult();
277282
}
278283

0 commit comments

Comments
 (0)