Skip to content

Commit 1ca9050

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Inline AugmentableFragment into FragmentImpl.
This required a few changes to duplicate declarations checking, so I made a few related changes there. There are two main changes: 1. Record `ElementImpl`s as scope entries. Which is more precise, we declare elements, not fragments. 2. Record getters and setters explicitly, move responsibility for decomposing `PropertyInducingElement` this out of `_checkDuplicateIdentifier()`, which IMHO makes it more cohesive. Change-Id: I5eb117b3f830c1d1802c5f6fa836ff4324d4dc23 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/438841 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent bbcc9ba commit 1ca9050

File tree

5 files changed

+140
-150
lines changed

5 files changed

+140
-150
lines changed

pkg/analyzer/lib/src/dart/ast/ast.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6234,6 +6234,9 @@ sealed class DeclarationImpl extends AnnotatedNodeImpl implements Declaration {
62346234
/// Either or both of the [comment] and [metadata] can be `null` if the
62356235
/// declaration doesn't have the corresponding attribute.
62366236
DeclarationImpl({required super.comment, required super.metadata});
6237+
6238+
@override
6239+
FragmentImpl? get declaredFragment;
62376240
}
62386241

62396242
/// The declaration of a single identifier.
@@ -9602,7 +9605,7 @@ final class FieldDeclarationImpl extends ClassMemberImpl
96029605
}
96039606

96049607
@override
9605-
Fragment? get declaredFragment => null;
9608+
Null get declaredFragment => null;
96069609

96079610
@generated
96089611
@override
@@ -24498,7 +24501,7 @@ final class TopLevelVariableDeclarationImpl extends CompilationUnitMemberImpl
2449824501
}
2449924502

2450024503
@override
24501-
Fragment? get declaredFragment => null;
24504+
Null get declaredFragment => null;
2450224505

2450324506
@generated
2450424507
@override

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -74,17 +74,6 @@ abstract class AnnotatableFragmentImpl implements FragmentImpl, Annotatable {
7474
abstract MetadataImpl metadata;
7575
}
7676

77-
/// Shared implementation for an augmentable [Fragment].
78-
mixin AugmentableFragment on FragmentImpl {
79-
bool get isAugmentation {
80-
return hasModifier(Modifier.AUGMENTATION);
81-
}
82-
83-
set isAugmentation(bool value) {
84-
setModifier(Modifier.AUGMENTATION, value);
85-
}
86-
}
87-
8877
class BindPatternVariableElementImpl extends PatternVariableElementImpl
8978
implements BindPatternVariableElement {
9079
BindPatternVariableElementImpl(super._wrappedElement);
@@ -2133,10 +2122,7 @@ abstract class ExecutableElementImpl extends FunctionTypedElementImpl
21332122
}
21342123

21352124
abstract class ExecutableFragmentImpl extends _ExistingFragmentImpl
2136-
with
2137-
AugmentableFragment,
2138-
DeferredResolutionReadingMixin,
2139-
TypeParameterizedFragmentMixin
2125+
with DeferredResolutionReadingMixin, TypeParameterizedFragmentMixin
21402126
implements ExecutableFragment {
21412127
/// A list containing all of the parameters defined by this executable
21422128
/// element.
@@ -3608,6 +3594,14 @@ abstract class FragmentImpl implements Fragment {
36083594
return enclosingElement3!.enclosingUnit;
36093595
}
36103596

3597+
bool get isAugmentation {
3598+
return hasModifier(Modifier.AUGMENTATION);
3599+
}
3600+
3601+
set isAugmentation(bool value) {
3602+
setModifier(Modifier.AUGMENTATION, value);
3603+
}
3604+
36113605
bool get isNonFunctionTypeAliasesEnabled {
36123606
return library!.featureSet.isEnabled(Feature.nonfunction_type_aliases);
36133607
}
@@ -4611,7 +4605,6 @@ recorded above.
46114605

46124606
abstract class InstanceFragmentImpl extends _ExistingFragmentImpl
46134607
with
4614-
AugmentableFragment,
46154608
DeferredMembersReadingMixin,
46164609
DeferredResolutionReadingMixin,
46174610
TypeParameterizedFragmentMixin
@@ -8314,7 +8307,7 @@ class PrefixElementImpl extends ElementImpl implements PrefixElement {
83148307
void visitChildren2<T>(ElementVisitor2<T> visitor) {}
83158308
}
83168309

8317-
class PrefixFragmentImpl implements PrefixFragment {
8310+
class PrefixFragmentImpl extends FragmentImpl implements PrefixFragment {
83188311
@override
83198312
final LibraryFragmentImpl enclosingFragment;
83208313

@@ -8344,11 +8337,14 @@ class PrefixFragmentImpl implements PrefixFragment {
83448337
required this.name2,
83458338
required this.nameOffset2,
83468339
required this.isDeferred,
8347-
});
8340+
}) : super(nameOffset: -1);
83488341

83498342
@override
83508343
List<Fragment> get children3 => const [];
83518344

8345+
@override
8346+
LibraryElementImpl? get library => libraryFragment.element;
8347+
83528348
@override
83538349
LibraryFragmentImpl get libraryFragment => enclosingFragment;
83548350
}
@@ -8553,7 +8549,7 @@ abstract class PropertyInducingElementTypeInference {
85538549

85548550
abstract class PropertyInducingFragmentImpl
85558551
extends NonParameterVariableFragmentImpl
8556-
with AugmentableFragment, DeferredResolutionReadingMixin
8552+
with DeferredResolutionReadingMixin
85578553
implements PropertyInducingFragment {
85588554
@override
85598555
final String? name2;
@@ -9474,10 +9470,7 @@ class TypeAliasElementImpl extends TypeDefiningElementImpl
94749470
///
94759471
/// Clients may not extend, implement or mix-in this class.
94769472
class TypeAliasFragmentImpl extends _ExistingFragmentImpl
9477-
with
9478-
AugmentableFragment,
9479-
DeferredResolutionReadingMixin,
9480-
TypeParameterizedFragmentMixin
9473+
with DeferredResolutionReadingMixin, TypeParameterizedFragmentMixin
94819474
implements TypeAliasFragment {
94829475
@override
94839476
final String? name2;

pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:analyzer/diagnostic/diagnostic.dart';
99
import 'package:analyzer/error/error.dart';
1010
import 'package:analyzer/source/source.dart';
1111
import 'package:analyzer/src/dart/ast/ast.dart';
12+
import 'package:analyzer/src/dart/element/element.dart';
1213
import 'package:analyzer/src/diagnostic/diagnostic.dart';
1314
import 'package:analyzer/src/error/codes.dart';
1415

@@ -44,30 +45,27 @@ class DiagnosticFactory {
4445
);
4546
}
4647

47-
/// Return a diagnostic indicating that [duplicateElement] reuses a name
48+
/// Return a diagnostic indicating that [duplicateFragment] reuses a name
4849
/// already used by [originalElement].
4950
Diagnostic duplicateDefinition(
5051
DiagnosticCode code,
51-
Element duplicateElement,
52-
Element originalElement,
52+
FragmentImpl duplicateFragment,
53+
ElementImpl originalElement,
5354
List<Object> arguments,
5455
) {
55-
var duplicate = duplicateElement.nonSynthetic;
56-
var duplicateFragment = duplicate.firstFragment;
57-
var original = originalElement.nonSynthetic;
58-
var originalFragment = original.firstFragment;
56+
var originalFragment = originalElement.nonSynthetic.firstFragment;
5957
return Diagnostic.tmp(
6058
source: duplicateFragment.libraryFragment!.source,
6159
offset: duplicateFragment.nameOffset2 ?? -1,
62-
length: duplicate.name3!.length,
60+
length: duplicateFragment.name2!.length,
6361
diagnosticCode: code,
6462
arguments: arguments,
6563
contextMessages: [
6664
DiagnosticMessageImpl(
6765
filePath: originalFragment.libraryFragment!.source.fullName,
6866
message: "The first definition of this name.",
6967
offset: originalFragment.nameOffset2 ?? -1,
70-
length: original.name3!.length,
68+
length: originalElement.nonSynthetic.name3!.length,
7169
url: null,
7270
),
7371
],

0 commit comments

Comments
 (0)