4629bff7e9
Add a syntactic diagnostic for extension type augmentations that declare representation fields. Extension type augmentations may augment the declaration, but they must not redeclare the representation. Thread an explicit parser option through primary constructor parsing so extension type augmentations can omit a representation without producing the usual missing-primary-constructor diagnostics, while still reporting an error when a representation is present. Register the new diagnostic in the shared and analyzer generated diagnostic tables and add it to fix status tracking. Change-Id: I84815bb0669a76126564e590760e93096a3af046 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/505860 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Paul Berry <paulberry@google.com> SLSA-Policy-Verified: SLSA Policy Verification Service <devtools-gerritcodereview-exitgate@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
132 lines
8.2 KiB
Plaintext
132 lines
8.2 KiB
Plaintext
parseUnit(class)
|
|
skipErrorTokens(class)
|
|
listener: beginCompilationUnit(class)
|
|
syntheticPreviousToken(class)
|
|
parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
|
|
parseMetadataStar()
|
|
listener: beginMetadataStar(class)
|
|
listener: endMetadataStar(0)
|
|
parseTopLevelKeywordDeclaration(class, , class, null, null, null, DirectiveContext(DirectiveState.Unknown))
|
|
parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, class)
|
|
listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
|
|
ensureIdentifier(class, classOrMixinDeclaration)
|
|
listener: handleIdentifier(A, classOrMixinDeclaration)
|
|
listener: handleNoTypeVariables({)
|
|
listener: beginClassDeclaration(class, null, null, null, null, null, null, null, A)
|
|
parseClass(A, class, class, null, A)
|
|
parsePrimaryConstructorOpt(DeclarationKind.Class, A, null, allowExtensionTypeRepresentation: true)
|
|
listener: handleNoPrimaryConstructor(DeclarationKind.Class, A, null)
|
|
parseClassHeaderOpt(A, class, class)
|
|
parseClassExtendsOpt(A, DeclarationHeaderKind.Class)
|
|
listener: handleNoType(A)
|
|
listener: handleClassExtends(null, 1)
|
|
parseClassWithClauseOpt(A)
|
|
listener: handleClassNoWithClause()
|
|
parseClassOrMixinOrEnumImplementsOpt(A)
|
|
listener: handleImplements(null, 0)
|
|
listener: handleClassHeader(class, class, null)
|
|
parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
|
|
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
|
|
notEofOrType(CLOSE_CURLY_BRACKET, })
|
|
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
|
|
listener: endClassDeclaration(class, })
|
|
listener: endTopLevelDeclaration(})
|
|
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
|
|
parseMetadataStar(})
|
|
listener: beginMetadataStar(class)
|
|
listener: endMetadataStar(0)
|
|
parseTopLevelKeywordDeclaration(class, }, class, null, null, null, DirectiveContext(DirectiveState.Declarations))
|
|
parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, class)
|
|
listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
|
|
ensureIdentifier(class, classOrMixinDeclaration)
|
|
listener: handleIdentifier(C, classOrMixinDeclaration)
|
|
listener: handleNoTypeVariables(extends)
|
|
listener: beginClassDeclaration(class, null, null, null, null, null, null, null, C)
|
|
parseClass(C, class, class, null, C)
|
|
parsePrimaryConstructorOpt(DeclarationKind.Class, C, null, allowExtensionTypeRepresentation: true)
|
|
listener: handleNoPrimaryConstructor(DeclarationKind.Class, C, null)
|
|
parseClassHeaderOpt(C, class, class)
|
|
parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
|
|
parseClassExtendsSeenExtendsClause(extends, C, DeclarationHeaderKind.Class)
|
|
listener: handleIdentifier(A, typeReference)
|
|
listener: handleNoTypeArguments({)
|
|
listener: handleType(A, null)
|
|
listener: handleClassExtends(extends, 1)
|
|
parseClassWithClauseOpt(A)
|
|
listener: handleClassNoWithClause()
|
|
parseClassOrMixinOrEnumImplementsOpt(A)
|
|
listener: handleImplements(null, 0)
|
|
listener: handleClassHeader(class, class, null)
|
|
parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, C)
|
|
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
|
|
notEofOrType(CLOSE_CURLY_BRACKET, })
|
|
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
|
|
listener: endClassDeclaration(class, })
|
|
listener: endTopLevelDeclaration(})
|
|
parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
|
|
parseMetadataStar(})
|
|
listener: beginMetadataStar(extension)
|
|
listener: endMetadataStar(0)
|
|
parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, DirectiveContext(DirectiveState.Declarations))
|
|
parseExtension(extension, null, extension)
|
|
listener: beginExtensionDeclarationPrelude(extension)
|
|
parseExtensionDeclaration(extension, extension, null, extension)
|
|
listener: handleNoTypeVariables(on)
|
|
listener: beginExtensionDeclaration(null, extension, null)
|
|
parsePrimaryConstructorOpt(DeclarationKind.Extension, extension, null, allowExtensionTypeRepresentation: true)
|
|
listener: handleNoPrimaryConstructor(DeclarationKind.Extension, extension, null)
|
|
listener: handleIdentifier(C, typeReference)
|
|
listener: handleNoTypeArguments({)
|
|
listener: handleType(C, null)
|
|
parseClassOrMixinOrExtensionBody(C, DeclarationKind.Extension, null)
|
|
listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
|
|
notEofOrType(CLOSE_CURLY_BRACKET, static)
|
|
parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Extension, null)
|
|
parseMetadataStar({)
|
|
listener: beginMetadataStar(static)
|
|
listener: endMetadataStar(0)
|
|
listener: beginMember()
|
|
isReservedKeyword(()
|
|
parseMethod({, null, null, null, static, null, null, null, static, NoType(), null, null, addChild, DeclarationKind.Extension, null, false)
|
|
listener: beginMethod(DeclarationKind.Extension, null, null, static, null, null, null, addChild, null)
|
|
listener: handleNoType(static)
|
|
ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
|
|
listener: handleIdentifier(addChild, methodDeclaration)
|
|
parseQualifiedRestOpt(addChild, methodDeclarationContinuation)
|
|
parseMethodTypeVar(addChild)
|
|
listener: handleNoTypeVariables(()
|
|
parseGetterOrFormalParameters(addChild, addChild, false, MemberKind.ExtensionStaticMethod)
|
|
parseFormalParameters(addChild, MemberKind.ExtensionStaticMethod)
|
|
parseFormalParametersRest((, MemberKind.ExtensionStaticMethod)
|
|
listener: beginFormalParameters((, MemberKind.ExtensionStaticMethod)
|
|
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionStaticMethod)
|
|
parseMetadataStar(()
|
|
listener: beginMetadataStar(A)
|
|
listener: endMetadataStar(0)
|
|
listener: beginFormalParameter(A, MemberKind.ExtensionStaticMethod, null, null, null)
|
|
listener: handleIdentifier(A, typeReference)
|
|
listener: handleNoTypeArguments(child)
|
|
listener: handleType(A, null)
|
|
ensureIdentifier(A, formalParameterDeclaration)
|
|
listener: handleIdentifier(child, formalParameterDeclaration)
|
|
listener: handleFormalParameterWithoutValue())
|
|
listener: endFormalParameter(null, null, null, null, child, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionStaticMethod)
|
|
listener: endFormalParameters(1, (, ), MemberKind.ExtensionStaticMethod)
|
|
parseInitializersOpt())
|
|
listener: handleNoInitializers()
|
|
parseAsyncModifierOpt())
|
|
listener: handleAsyncModifier(null, null)
|
|
inPlainSync()
|
|
parseFunctionBody(), false, false)
|
|
listener: beginBlockFunctionBody({)
|
|
notEofOrType(CLOSE_CURLY_BRACKET, })
|
|
listener: endBlockFunctionBody(0, {, })
|
|
listener: endMethod(DeclarationKind.Extension, null, static, (, null, })
|
|
listener: endMember()
|
|
notEofOrType(CLOSE_CURLY_BRACKET, })
|
|
listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
|
|
listener: endExtensionDeclaration(extension, extension, on, })
|
|
listener: endTopLevelDeclaration(})
|
|
reportAllErrorTokens(class)
|
|
listener: endCompilationUnit(3, )
|