Skip to content

Commit e3fe1c3

Browse files
scheglovCommit Queue
authored andcommitted
Issue 60791. Don't add elements without names to exported references.
Bug: #60791 Change-Id: I1b83c16dbcfa5ba8b4371606d643efc4a1193733 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/431140 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Johnni Winther <[email protected]>
1 parent 6b53073 commit e3fe1c3

File tree

4 files changed

+80
-32
lines changed

4 files changed

+80
-32
lines changed

pkg/analyzer/lib/src/summary2/element_builder.dart

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
117117
var name = nameToken.lexeme;
118118

119119
var fragment = ClassFragmentImpl(name, nameToken.offset);
120-
fragment.name2 = _getFragmentName(nameToken);
120+
var name2 = _getFragmentName(nameToken);
121+
fragment.name2 = name2;
121122
fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
122123
fragment.isAbstract = node.abstractKeyword != null;
123124
fragment.isAugmentation = node.augmentKeyword != null;
@@ -139,8 +140,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
139140

140141
var refName = fragment.name2 ?? '${_nextUnnamedId++}';
141142
var fragmentReference = _enclosingContext.addClass(refName, fragment);
142-
if (!fragment.isAugmentation) {
143-
_libraryBuilder.declare(name, fragmentReference);
143+
if (!fragment.isAugmentation && name2 != null) {
144+
_libraryBuilder.declare(name2, fragmentReference);
144145
}
145146

146147
var elementBuilder = _libraryBuilder.elementBuilderGetters[name];
@@ -189,7 +190,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
189190
var name = nameToken.lexeme;
190191

191192
var fragment = ClassFragmentImpl(name, nameToken.offset);
192-
fragment.name2 = _getFragmentName(nameToken);
193+
var name2 = _getFragmentName(nameToken);
194+
fragment.name2 = name2;
193195
fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
194196
fragment.isAbstract = node.abstractKeyword != null;
195197
fragment.isBase = node.baseKeyword != null;
@@ -210,8 +212,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
210212

211213
var refName = fragment.name2 ?? '${_nextUnnamedId++}';
212214
var reference = _enclosingContext.addClass(refName, fragment);
213-
if (!fragment.isAugmentation) {
214-
_libraryBuilder.declare(name, reference);
215+
if (!fragment.isAugmentation && name2 != null) {
216+
_libraryBuilder.declare(name2, reference);
215217
}
216218

217219
var elementBuilder = _libraryBuilder.elementBuilderGetters[name];
@@ -304,7 +306,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
304306
var nameOffset = nameToken.offset;
305307

306308
var fragment = EnumFragmentImpl(name, nameOffset);
307-
fragment.name2 = _getFragmentName(nameToken);
309+
var name2 = _getFragmentName(nameToken);
310+
fragment.name2 = name2;
308311
fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
309312
fragment.isAugmentation = node.augmentKeyword != null;
310313
fragment.metadata = _buildAnnotations(node.metadata);
@@ -316,8 +319,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
316319

317320
var refName = fragment.name2 ?? '${_nextUnnamedId++}';
318321
var reference = _enclosingContext.addEnum(refName, fragment);
319-
if (!fragment.isAugmentation) {
320-
_libraryBuilder.declare(name, reference);
322+
if (!fragment.isAugmentation && name2 != null) {
323+
_libraryBuilder.declare(name2, reference);
321324
}
322325

323326
var elementBuilder = _libraryBuilder.elementBuilderGetters[name];
@@ -531,7 +534,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
531534
var nameOffset = nameToken?.offset ?? -1;
532535

533536
var fragment = ExtensionFragmentImpl(name, nameOffset);
534-
fragment.name2 = _getFragmentName(nameToken);
537+
var name2 = _getFragmentName(nameToken);
538+
fragment.name2 = name2;
535539
fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
536540
fragment.isAugmentation = node.augmentKeyword != null;
537541
fragment.metadata = _buildAnnotations(node.metadata);
@@ -545,8 +549,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
545549
var reference = _enclosingContext.addExtension(refName, fragment);
546550

547551
if (name != null) {
548-
if (!fragment.isAugmentation) {
549-
_libraryBuilder.declare(name, reference);
552+
if (!fragment.isAugmentation && name2 != null) {
553+
_libraryBuilder.declare(name2, reference);
550554
}
551555
}
552556

@@ -613,7 +617,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
613617
var name = nameToken.lexeme;
614618

615619
var fragment = ExtensionTypeFragmentImpl(name, nameToken.offset);
616-
fragment.name2 = _getFragmentName(nameToken);
620+
var name2 = _getFragmentName(nameToken);
621+
fragment.name2 = name2;
617622
fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
618623
fragment.isAugmentation = node.augmentKeyword != null;
619624
fragment.metadata = _buildAnnotations(node.metadata);
@@ -625,8 +630,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
625630

626631
var refName = fragment.name2 ?? '${_nextUnnamedId++}';
627632
var reference = _enclosingContext.addExtensionType(refName, fragment);
628-
if (!fragment.isAugmentation) {
629-
_libraryBuilder.declare(name, reference);
633+
if (!fragment.isAugmentation && name2 != null) {
634+
_libraryBuilder.declare(name2, reference);
630635
}
631636

632637
var elementBuilder = _libraryBuilder.elementBuilderGetters[name];
@@ -802,6 +807,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
802807
var nameToken = node.name;
803808
var name = nameToken.lexeme;
804809
var nameOffset = nameToken.offset;
810+
var name2 = _getFragmentName(nameToken);
805811

806812
var functionExpression = node.functionExpression;
807813
var body = functionExpression.body;
@@ -811,7 +817,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
811817
FragmentedElementBuilder? elementBuilder;
812818
if (node.isGetter) {
813819
var getterFragment = GetterFragmentImpl(name, nameOffset);
814-
getterFragment.name2 = _getFragmentName(nameToken);
820+
getterFragment.name2 = name2;
815821
getterFragment.nameOffset2 = _getFragmentNameOffset(nameToken);
816822
getterFragment.isAugmentation = node.augmentKeyword != null;
817823
getterFragment.isStatic = true;
@@ -847,7 +853,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
847853
}
848854
} else if (node.isSetter) {
849855
var setterFragment = SetterFragmentImpl(name, nameOffset);
850-
setterFragment.name2 = _getFragmentName(nameToken);
856+
setterFragment.name2 = name2;
851857
setterFragment.nameOffset2 = _getFragmentNameOffset(nameToken);
852858
setterFragment.isAugmentation = node.augmentKeyword != null;
853859
setterFragment.isStatic = true;
@@ -883,7 +889,7 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
883889
}
884890
} else {
885891
var fragment = TopLevelFunctionFragmentImpl(name, nameOffset);
886-
fragment.name2 = _getFragmentName(nameToken);
892+
fragment.name2 = name2;
887893
fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
888894
fragment.isAugmentation = node.augmentKeyword != null;
889895
fragment.isStatic = true;
@@ -931,9 +937,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
931937
typeParameters: functionExpression.typeParameters,
932938
);
933939

934-
var getterOrSetterName = node.isSetter ? '$name=' : name;
935-
936-
if (!executableFragment.isAugmentation) {
940+
if (!executableFragment.isAugmentation && name2 != null) {
941+
var getterOrSetterName = node.isSetter ? '$name2=' : name2;
937942
_libraryBuilder.declare(getterOrSetterName, reference);
938943
}
939944

@@ -946,7 +951,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
946951
var name = nameToken.lexeme;
947952

948953
var fragment = TypeAliasFragmentImpl(name, nameToken.offset);
949-
fragment.name2 = _getFragmentName(nameToken);
954+
var name2 = _getFragmentName(nameToken);
955+
fragment.name2 = name2;
950956
fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
951957
fragment.isFunctionTypeAliasBased = true;
952958
fragment.metadata = _buildAnnotations(node.metadata);
@@ -958,7 +964,9 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
958964

959965
var refName = fragment.name2 ?? '${_nextUnnamedId++}';
960966
var reference = _enclosingContext.addTypeAlias(refName, fragment);
961-
_libraryBuilder.declare(name, reference);
967+
if (name2 != null) {
968+
_libraryBuilder.declare(name2, reference);
969+
}
962970

963971
var elementBuilder = _libraryBuilder.elementBuilderGetters[name];
964972
elementBuilder ??= _libraryBuilder.elementBuilderSetters[name];
@@ -1092,7 +1100,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
10921100
var name = nameToken.lexeme;
10931101

10941102
var fragment = TypeAliasFragmentImpl(name, nameToken.offset);
1095-
fragment.name2 = _getFragmentName(nameToken);
1103+
var name2 = _getFragmentName(nameToken);
1104+
fragment.name2 = name2;
10961105
fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
10971106
fragment.isAugmentation = node.augmentKeyword != null;
10981107
fragment.metadata = _buildAnnotations(node.metadata);
@@ -1104,8 +1113,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
11041113

11051114
var refName = fragment.name2 ?? '${_nextUnnamedId++}';
11061115
var reference = _enclosingContext.addTypeAlias(refName, fragment);
1107-
if (!fragment.isAugmentation) {
1108-
_libraryBuilder.declare(name, reference);
1116+
if (!fragment.isAugmentation && name2 != null) {
1117+
_libraryBuilder.declare(name2, reference);
11091118
}
11101119

11111120
var elementBuilder = _libraryBuilder.elementBuilderGetters[name];
@@ -1264,7 +1273,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
12641273
var name = nameToken.lexeme;
12651274

12661275
var fragment = MixinFragmentImpl(name, nameToken.offset);
1267-
fragment.name2 = _getFragmentName(nameToken);
1276+
var name2 = _getFragmentName(nameToken);
1277+
fragment.name2 = name2;
12681278
fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
12691279
fragment.isAugmentation = node.augmentKeyword != null;
12701280
fragment.isBase = node.baseKeyword != null;
@@ -1277,8 +1287,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
12771287

12781288
var refName = fragment.name2 ?? '${_nextUnnamedId++}';
12791289
var reference = _enclosingContext.addMixin(refName, fragment);
1280-
if (!fragment.isAugmentation) {
1281-
_libraryBuilder.declare(name, reference);
1290+
if (!fragment.isAugmentation && name2 != null) {
1291+
_libraryBuilder.declare(name2, reference);
12821292
}
12831293

12841294
var elementBuilder = _libraryBuilder.elementBuilderGetters[name];
@@ -1497,7 +1507,8 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
14971507
fragment = TopLevelVariableFragmentImpl(name, nameOffset);
14981508
}
14991509

1500-
fragment.name2 = _getFragmentName(nameToken);
1510+
var name2 = _getFragmentName(nameToken);
1511+
fragment.name2 = name2;
15011512
fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
15021513
fragment.hasInitializer = variable.initializer != null;
15031514
fragment.isAugmentation = node.augmentKeyword != null;
@@ -1521,7 +1532,9 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
15211532
var ref = enclosingRef.getChild('@getter').addChild(refName);
15221533
var getter = fragment.createImplicitGetter(ref);
15231534
_enclosingContext.addPropertyAccessorSynthetic(getter);
1524-
_libraryBuilder.declare(name, ref);
1535+
if (name2 != null) {
1536+
_libraryBuilder.declare(name2, ref);
1537+
}
15251538

15261539
var elementBuilder = GetterElementBuilder(
15271540
element: GetterElementImpl(getter),
@@ -1534,7 +1547,9 @@ class ElementBuilder extends ThrowingAstVisitor<void> {
15341547
var ref = enclosingRef.getChild('@setter').addChild(refName);
15351548
var setter = fragment.createImplicitSetter(ref);
15361549
_enclosingContext.addPropertyAccessorSynthetic(setter);
1537-
_libraryBuilder.declare('$name=', ref);
1550+
if (name2 != null) {
1551+
_libraryBuilder.declare('$name2=', ref);
1552+
}
15381553

15391554
var elementBuilder = SetterElementBuilder(
15401555
element: SetterElementImpl(setter),

pkg/analyzer/lib/src/summary2/library_builder.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,9 @@ class LibraryBuilder {
260260
}
261261

262262
void declare(String name, Reference reference) {
263+
// If the element name is missing, don't attempt adding it.
264+
assert(name.isNotEmpty);
265+
263266
_declaredReferences[name] = reference;
264267
}
265268

pkg/analyzer/test/src/summary/elements/class_test.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13085,6 +13085,7 @@ library
1308513085
}
1308613086

1308713087
test_class_missingName() async {
13088+
configuration.withExportScope = true;
1308813089
var library = await buildLibrary(r'''
1308913090
class {}
1309013091
''');
@@ -13110,6 +13111,8 @@ library
1311013111
constructors
1311113112
synthetic new
1311213113
firstFragment: <testLibraryFragment>::@class::0::@constructor::new
13114+
exportedReferences
13115+
exportNamespace
1311313116
''');
1311413117
}
1311513118

pkg/analyzer/test/src/summary/elements/library_fragment_test.dart

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,33 @@ package:test/aa.dart
561561
);
562562
}
563563

564+
test_scope_hasPrefix_lookup_ambiguous_missingName() async {
565+
newFile('$testPackageLibPath/a.dart', r'''
566+
class {}
567+
''');
568+
569+
newFile('$testPackageLibPath/b.dart', r'''
570+
class {}
571+
''');
572+
573+
var library = await buildLibrary(r'''
574+
import 'a.dart' as prefix;
575+
import 'b.dart' as prefix;
576+
''');
577+
578+
_assertScopeLookups(
579+
library,
580+
[Uri.parse('package:test/test.dart')],
581+
['prefix.A'],
582+
r'''
583+
package:test/test.dart
584+
prefix.A
585+
prefix: <testLibraryFragment>::@prefix2::prefix
586+
getter: <null>
587+
''',
588+
);
589+
}
590+
564591
test_scope_hasPrefix_lookup_ambiguous_notSdk_both() async {
565592
newFile('$testPackageLibPath/a.dart', r'''
566593
var foo = 0;

0 commit comments

Comments
 (0)