Skip to content

Commit dd2a347

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Avoid recording opaque API usages in a few places.
Change-Id: I14bf34c6c008d2aa05c78cd66400c69c7b1aae5f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/449480 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent e39a98e commit dd2a347

File tree

12 files changed

+341
-45
lines changed

12 files changed

+341
-45
lines changed

pkg/analyzer/lib/src/dart/analysis/driver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ testFineAfterLibraryAnalyzerHook;
106106
// TODO(scheglov): Clean up the list of implicitly analyzed files.
107107
class AnalysisDriver {
108108
/// The version of data format, should be incremented on every format change.
109-
static const int DATA_VERSION = 554;
109+
static const int DATA_VERSION = 555;
110110

111111
/// The number of exception contexts allowed to write. Once this field is
112112
/// zero, we stop writing any new exception contexts in this process.

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

Lines changed: 78 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import 'package:analyzer/src/dart/ast/token.dart';
3030
import 'package:analyzer/src/dart/constant/compute.dart';
3131
import 'package:analyzer/src/dart/constant/evaluation.dart';
3232
import 'package:analyzer/src/dart/constant/value.dart';
33+
import 'package:analyzer/src/dart/element/class_hierarchy.dart';
3334
import 'package:analyzer/src/dart/element/display_string_builder.dart';
3435
import 'package:analyzer/src/dart/element/field_name_non_promotability_info.dart';
3536
import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
@@ -52,6 +53,7 @@ import 'package:analyzer/src/generated/utilities_collection.dart';
5253
import 'package:analyzer/src/generated/utilities_dart.dart';
5354
import 'package:analyzer/src/summary2/ast_binary_tokens.dart';
5455
import 'package:analyzer/src/summary2/export.dart';
56+
import 'package:analyzer/src/summary2/linked_element_factory.dart';
5557
import 'package:analyzer/src/summary2/reference.dart';
5658
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
5759
import 'package:analyzer/src/utilities/extensions/collection.dart';
@@ -4895,7 +4897,7 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
48954897
@override
48964898
@trackedIncludedInId
48974899
List<InterfaceTypeImpl> get allSupertypes {
4898-
return _allSupertypes ??= library.session.classHierarchy
4900+
return _allSupertypes ??= library.internal.classHierarchy
48994901
.implementedInterfaces(this);
49004902
}
49014903

@@ -4970,7 +4972,7 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
49704972

49714973
@trackedIndirectly
49724974
InheritanceManager3 get inheritanceManager {
4973-
return library.session.inheritanceManager;
4975+
return library.internal.inheritanceManager;
49744976
}
49754977

49764978
@override
@@ -5889,11 +5891,9 @@ class LibraryElementImpl extends ElementImpl
58895891

58905892
MetadataImpl _metadata = MetadataImpl(const []);
58915893

5892-
@override
5893-
String? documentationComment;
5894+
String? _documentationComment;
58945895

5895-
@override
5896-
AnalysisSessionImpl session;
5896+
AnalysisSessionImpl _session;
58975897

58985898
/// The first (defining) fragment of this library.
58995899
@override
@@ -5928,15 +5928,9 @@ class LibraryElementImpl extends ElementImpl
59285928
/// for this library.
59295929
late final LoadLibraryFunctionProvider loadLibraryProvider;
59305930

5931-
// TODO(scheglov): replace with `LibraryName` or something.
5932-
@override
5933-
String name;
5934-
5935-
// TODO(scheglov): replace with `LibraryName` or something.
5936-
int nameOffset;
5937-
5938-
// TODO(scheglov): replace with `LibraryName` or something.
5939-
int nameLength;
5931+
String _name;
5932+
int _nameOffset;
5933+
int _nameLength;
59405934

59415935
List<ClassElementImpl> _classes = [];
59425936
List<EnumElementImpl> _enums = [];
@@ -5979,10 +5973,10 @@ class LibraryElementImpl extends ElementImpl
59795973
/// the given [name] and [offset].
59805974
LibraryElementImpl(
59815975
this._context,
5982-
this.session,
5983-
this.name,
5984-
this.nameOffset,
5985-
this.nameLength,
5976+
this._session,
5977+
this._name,
5978+
this._nameOffset,
5979+
this._nameLength,
59865980
this.featureSet,
59875981
);
59885982

@@ -6036,6 +6030,17 @@ class LibraryElementImpl extends ElementImpl
60366030
return _context.declaredVariables;
60376031
}
60386032

6033+
@override
6034+
@trackedDirectlyOpaque
6035+
String? get documentationComment {
6036+
globalResultRequirements?.recordOpaqueApiUse(this, 'documentationComment');
6037+
return _documentationComment;
6038+
}
6039+
6040+
set documentationComment(String? value) {
6041+
_documentationComment = value;
6042+
}
6043+
60396044
@override
60406045
@trackedIncludedInId
60416046
Null get enclosingElement => null;
@@ -6296,11 +6301,42 @@ class LibraryElementImpl extends ElementImpl
62966301
_mixins = value;
62976302
}
62986303

6304+
@override
6305+
@trackedDirectly
6306+
String get name {
6307+
globalResultRequirements?.record_library_getName(element: this);
6308+
return _name;
6309+
}
6310+
6311+
set name(String name) {
6312+
_name = name;
6313+
}
6314+
62996315
@Deprecated('Use name instead')
63006316
@override
63016317
@trackedIndirectly
63026318
String? get name3 => name;
63036319

6320+
@trackedDirectlyOpaque
6321+
int get nameLength {
6322+
globalResultRequirements?.recordOpaqueApiUse(this, 'nameLength');
6323+
return _nameLength;
6324+
}
6325+
6326+
set nameLength(int nameLength) {
6327+
_nameLength = nameLength;
6328+
}
6329+
6330+
@trackedDirectlyOpaque
6331+
int get nameOffset {
6332+
globalResultRequirements?.recordOpaqueApiUse(this, 'nameOffset');
6333+
return _nameOffset;
6334+
}
6335+
6336+
set nameOffset(int nameOffset) {
6337+
_nameOffset = nameOffset;
6338+
}
6339+
63046340
@override
63056341
@trackedIncludedInId
63066342
LibraryElementImpl get nonSynthetic => this;
@@ -6315,6 +6351,17 @@ class LibraryElementImpl extends ElementImpl
63156351
_publicNamespace = publicNamespace;
63166352
}
63176353

6354+
@override
6355+
@trackedDirectlyOpaque
6356+
AnalysisSessionImpl get session {
6357+
globalResultRequirements?.recordOpaqueApiUse(this, 'session');
6358+
return _session;
6359+
}
6360+
6361+
set session(AnalysisSessionImpl value) {
6362+
_session = value;
6363+
}
6364+
63186365
@override
63196366
@trackedDirectlyExpensive
63206367
List<SetterElementImpl> get setters {
@@ -6723,9 +6770,21 @@ class LibraryElementImplInternal {
67236770

67246771
LibraryElementImplInternal(this._library);
67256772

6773+
ClassHierarchy get classHierarchy {
6774+
return _library._session.classHierarchy;
6775+
}
6776+
6777+
LinkedElementFactory get elementFactory {
6778+
return _library._session.elementFactory;
6779+
}
6780+
67266781
LibraryFragmentImpl get firstFragment => _library._firstFragment;
67276782

67286783
List<LibraryFragmentImpl> get fragments => _library._fragments;
6784+
6785+
InheritanceManager3 get inheritanceManager {
6786+
return _library._session.inheritanceManager;
6787+
}
67296788
}
67306789

67316790
class LibraryExportImpl extends ElementDirectiveImpl implements LibraryExport {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class DocumentationCommentScope with _GettersAndSetters implements Scope {
4848
// TODO(kallentu): Handle combinators.
4949
for (var exportedReference in importedLibrary.exportedReferences) {
5050
var reference = exportedReference.reference;
51-
var element = importedLibrary.session.elementFactory
51+
var element = importedLibrary.internal.elementFactory
5252
.elementOfReference3(reference);
5353
if (element is SetterElement) {
5454
_addSetter(element);
@@ -179,7 +179,7 @@ class ImportsTrackingOfPrefix {
179179

180180
// SAFETY: the scope adds only imports with libraries.
181181
var importedLibrary = import.importedLibrary!;
182-
var elementFactory = importedLibrary.session.elementFactory;
182+
var elementFactory = importedLibrary.internal.elementFactory;
183183

184184
for (var exportedReference in importedLibrary.exportedReferences) {
185185
var reference = exportedReference.reference;
@@ -246,7 +246,7 @@ class ImportsTrackingOfPrefix {
246246
void _buildElementToImportsMap() {
247247
for (var import in scope._importElements) {
248248
var importedLibrary = import.importedLibrary!;
249-
var elementFactory = importedLibrary.session.elementFactory;
249+
var elementFactory = importedLibrary.internal.elementFactory;
250250
var combinators = import.combinators.build();
251251
for (var exportedReference in importedLibrary.exportedReferences) {
252252
var reference = exportedReference.reference;

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -811,8 +811,9 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
811811
}
812812
}
813813

814-
InheritanceManager3 get _inheritanceManager =>
815-
element.library.session.inheritanceManager;
814+
InheritanceManager3 get _inheritanceManager {
815+
return element.library.internal.inheritanceManager;
816+
}
816817

817818
@override
818819
bool operator ==(Object other) {

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,8 @@ class DiagnosticFactory {
431431
// Elements enclosing members that can participate in overrides are always
432432
// named, so we can safely assume `_thisMember.enclosingElement3.name` and
433433
// `superMember.enclosingElement3.name` are non-`null`.
434-
var superFragment = superMember.nonSynthetic.firstFragment;
434+
var superElement = superMember.nonSynthetic.baseElement as ElementImpl;
435+
var superLocation = superElement.firstFragmentLocation;
435436
return Diagnostic.tmp(
436437
source: source,
437438
offset: errorNode.offset,
@@ -452,18 +453,18 @@ class DiagnosticFactory {
452453
// concrete).
453454
if (code == CompileTimeErrorCode.invalidOverride)
454455
DiagnosticMessageImpl(
455-
filePath: superFragment.libraryFragment!.source.fullName,
456+
filePath: superLocation.libraryFragment!.source.fullName,
456457
message: "The member being overridden.",
457-
offset: superFragment.nameOffset ?? -1,
458-
length: superFragment.name!.length,
458+
offset: superLocation.nameOffset ?? -1,
459+
length: superLocation.name!.length,
459460
url: null,
460461
),
461462
if (code == CompileTimeErrorCode.invalidOverrideSetter)
462463
DiagnosticMessageImpl(
463-
filePath: superFragment.libraryFragment!.source.fullName,
464+
filePath: superLocation.libraryFragment!.source.fullName,
464465
message: "The setter being overridden.",
465-
offset: superFragment.nameOffset ?? -1,
466-
length: superFragment.name!.length,
466+
offset: superLocation.nameOffset ?? -1,
467+
length: superLocation.name!.length,
467468
url: null,
468469
),
469470
],

pkg/analyzer/lib/src/error/must_call_super_verifier.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ extension on InterfaceType? {
207207
var element = self.element;
208208

209209
var library = element.library as LibraryElementImpl;
210-
var inheritanceManager = library.session.inheritanceManager;
210+
var inheritanceManager = library.internal.inheritanceManager;
211211

212212
var concrete = inheritanceManager.getMember(
213213
element,

pkg/analyzer/lib/src/fine/library_manifest.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@ import 'package:analyzer/src/summary2/export.dart';
1717
import 'package:analyzer/src/summary2/linked_element_factory.dart';
1818
import 'package:analyzer/src/util/performance/operation_performance.dart';
1919
import 'package:analyzer/src/utilities/extensions/collection.dart';
20+
import 'package:analyzer/src/utilities/extensions/string.dart';
2021
import 'package:collection/collection.dart';
2122

2223
/// The manifest of a single library.
2324
class LibraryManifest {
25+
String? name;
26+
2427
/// The names that are re-exported by this library.
2528
/// This does not include names that are declared in this library.
2629
final Map<LookupName, ManifestItemId> reExportMap;
@@ -43,6 +46,7 @@ class LibraryManifest {
4346
ManifestItemIdList exportedExtensions;
4447

4548
LibraryManifest({
49+
required this.name,
4650
required this.reExportMap,
4751
required this.reExportDeprecatedOnly,
4852
required this.declaredClasses,
@@ -60,6 +64,7 @@ class LibraryManifest {
6064

6165
factory LibraryManifest.read(SummaryDataReader reader) {
6266
return LibraryManifest(
67+
name: reader.readOptionalStringUtf8(),
6368
reExportMap: reader.readLookupNameToIdMap(),
6469
reExportDeprecatedOnly: reader.readLookupNameSet(),
6570
declaredClasses: reader.readLookupNameMap(
@@ -137,6 +142,7 @@ class LibraryManifest {
137142
}
138143

139144
void write(BufferedSink sink) {
145+
sink.writeOptionalStringUtf8(name);
140146
reExportMap.write(sink);
141147
reExportDeprecatedOnly.write(sink);
142148
declaredClasses.write(sink);
@@ -845,6 +851,7 @@ class LibraryManifestBuilder {
845851
}
846852

847853
var newManifest = LibraryManifest(
854+
name: libraryElement.name.nullIfEmpty,
848855
reExportMap: {},
849856
reExportDeprecatedOnly: <LookupName>{},
850857
declaredClasses: newClassItems,
@@ -1062,6 +1069,7 @@ class LibraryManifestBuilder {
10621069
LibraryManifest _getInputManifest(Uri uri) {
10631070
return inputManifests[uri] ??
10641071
LibraryManifest(
1072+
name: null,
10651073
reExportMap: {},
10661074
reExportDeprecatedOnly: <LookupName>{},
10671075
declaredClasses: {},

pkg/analyzer/lib/src/fine/requirement_failure.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,24 @@ class LibraryMissing extends RequirementFailure {
306306
}
307307
}
308308

309+
class LibraryNameMismatch extends RequirementFailure {
310+
final Uri libraryUri;
311+
final String? expected;
312+
final String? actual;
313+
314+
LibraryNameMismatch({
315+
required this.libraryUri,
316+
required this.expected,
317+
required this.actual,
318+
});
319+
320+
@override
321+
String toString() {
322+
return 'LibraryNameMismatch(libraryUri: $libraryUri, '
323+
'expected: $expected, actual: $actual)';
324+
}
325+
}
326+
309327
final class OpaqueApiUseFailure extends RequirementFailure {
310328
final List<OpaqueApiUse> uses;
311329

0 commit comments

Comments
 (0)