Proper offstes on mixin classes
Change-Id: I1e7fcdae5713e8017aaf81e87afba20e59b9f789
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98338
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
index 51926c3..eac2a4a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
@@ -32,7 +32,6 @@
StaticInvocation,
StringLiteral,
Supertype,
- TreeNode,
Typedef,
TypeParameter,
TypeParameterType,
@@ -303,7 +302,8 @@
modifiers,
className,
typeVariables,
- applyMixins(supertype, charOffset, className, isMixinDeclaration,
+ applyMixins(supertype, startCharOffset, charOffset, charEndOffset,
+ className, isMixinDeclaration,
typeVariables: typeVariables),
interfaces,
classScope,
@@ -379,8 +379,13 @@
return typeVariablesByName;
}
- KernelTypeBuilder applyMixins(KernelTypeBuilder type, int charOffset,
- String subclassName, bool isMixinDeclaration,
+ KernelTypeBuilder applyMixins(
+ KernelTypeBuilder type,
+ int startCharOffset,
+ int charOffset,
+ int charEndOffset,
+ String subclassName,
+ bool isMixinDeclaration,
{String documentationComment,
List<MetadataBuilder> metadata,
String name,
@@ -553,9 +558,9 @@
}
}
}
- final int startCharOffset =
+ final int computedStartCharOffset =
(isNamedMixinApplication ? metadata : null) == null
- ? charOffset
+ ? startCharOffset
: metadata.first.charOffset;
SourceClassBuilder application = new SourceClassBuilder(
isNamedMixinApplication ? metadata : null,
@@ -575,9 +580,9 @@
isModifiable: false),
this,
<ConstructorReferenceBuilder>[],
- startCharOffset,
+ computedStartCharOffset,
charOffset,
- TreeNode.noOffset,
+ charEndOffset,
mixedInType: isMixinDeclaration ? null : mixin);
if (isNamedMixinApplication) {
loader.target.metadataCollector?.setDocumentationComment(
@@ -605,11 +610,13 @@
int modifiers,
KernelTypeBuilder mixinApplication,
List<KernelTypeBuilder> interfaces,
- int charOffset) {
+ int startCharOffset,
+ int charOffset,
+ int charEndOffset) {
// Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
endNestedDeclaration(name).resolveTypes(typeVariables, this);
- KernelNamedTypeBuilder supertype = applyMixins(
- mixinApplication, charOffset, name, false,
+ KernelNamedTypeBuilder supertype = applyMixins(mixinApplication,
+ startCharOffset, charOffset, charEndOffset, name, false,
documentationComment: documentationComment,
metadata: metadata,
name: name,
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 2b61fc4..0f4d72f 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -944,8 +944,20 @@
library.endNestedDeclaration("<syntax-error>");
return;
}
- library.addNamedMixinApplication(documentationComment, metadata, name,
- typeVariables, modifiers, mixinApplication, interfaces, charOffset);
+
+ int startCharOffset = beginToken.charOffset;
+ int charEndOffset = endToken.charOffset;
+ library.addNamedMixinApplication(
+ documentationComment,
+ metadata,
+ name,
+ typeVariables,
+ modifiers,
+ mixinApplication,
+ interfaces,
+ startCharOffset,
+ charOffset,
+ charEndOffset);
}
@override
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 94cb17d..8d2b369 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -378,7 +378,9 @@
int modifiers,
T mixinApplication,
List<T> interfaces,
- int charOffset);
+ int startCharOffset,
+ int charOffset,
+ int charEndOffset);
void addField(
String documentationComment,