From 42e6dbd9d4e2800bd97abcf434bd1a9fa92d5a93 Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Mon, 9 Feb 2026 10:28:08 -0800 Subject: [PATCH] CQ. Add LibraryFragment.isOriginNotExistingFile, to replace isSynthetic `isSynthetic` was already deprecated, but now we have a replacement. Change-Id: I187207557e9ee2de5d819500f2b377886044fb9f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/479180 Commit-Queue: Konstantin Shcheglov Reviewed-by: Johnni Winther Reviewed-by: Brian Wilkerson --- pkg/analyzer/CHANGELOG.md | 1 + pkg/analyzer/api.txt | 1 + pkg/analyzer/lib/dart/element/element.dart | 3 +++ pkg/analyzer/lib/src/dart/analysis/driver.dart | 2 +- pkg/analyzer/lib/src/dart/element/element.dart | 11 +++++------ pkg/analyzer/lib/src/dart/element/element.g.dart | 14 ++++++++++++++ pkg/analyzer/lib/src/summary2/bundle_reader.dart | 2 +- pkg/analyzer/lib/src/summary2/bundle_writer.dart | 4 +--- pkg/analyzer/lib/src/summary2/library_builder.dart | 3 ++- pkg/analyzer/test/src/summary/element_text.dart | 1 + .../test/src/summary/elements/library_test.dart | 11 +++++++++++ 11 files changed, 41 insertions(+), 12 deletions(-) diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md index 4b437e9fcfb..3f54efa114e 100644 --- a/pkg/analyzer/CHANGELOG.md +++ b/pkg/analyzer/CHANGELOG.md @@ -6,6 +6,7 @@ * Stabilize `FieldElement.declaringFormalParameter`. * Stabilize `FieldFormalParameterElement.isDeclaring` and `privateName`. * Stabilize `FieldFormalParameterFragment.privateName`. +* Deprecate `LibraryFragment.isSynthetic`, use `isOriginNotExistingFile` instead. ## 10.0.2 diff --git a/pkg/analyzer/api.txt b/pkg/analyzer/api.txt index 3b7e7930b09..ea428fd9159 100644 --- a/pkg/analyzer/api.txt +++ b/pkg/analyzer/api.txt @@ -3913,6 +3913,7 @@ package:analyzer/dart/element/element.dart: functions (getter: List) getters (getter: List) importedLibraries (getter: List) + isOriginNotExistingFile (getter: bool) libraryExports (getter: List) libraryImports (getter: List) lineInfo (getter: LineInfo) diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart index 4a7f2e6d7df..83352131bf6 100644 --- a/pkg/analyzer/lib/dart/element/element.dart +++ b/pkg/analyzer/lib/dart/element/element.dart @@ -2385,6 +2385,9 @@ abstract class LibraryFragment implements Fragment { /// those that are imported without a prefix. List get importedLibraries; + /// Whether the library fragment is created from a file that does not exist. + bool get isOriginNotExistingFile; + /// The libraries exported by this unit. List get libraryExports; diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart index b474de3ae6e..55f5de17f40 100644 --- a/pkg/analyzer/lib/src/dart/analysis/driver.dart +++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart @@ -107,7 +107,7 @@ testFineAfterLibraryAnalyzerHook; // TODO(scheglov): Clean up the list of implicitly analyzed files. class AnalysisDriver { /// The version of data format, should be incremented on every format change. - static const int DATA_VERSION = 610; + static const int DATA_VERSION = 611; /// The number of exception contexts allowed to write. Once this field is /// zero, we stop writing any new exception contexts in this process. diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart index 323e9d4dc7f..d888c8e1a5a 100644 --- a/pkg/analyzer/lib/src/dart/element/element.dart +++ b/pkg/analyzer/lib/src/dart/element/element.dart @@ -6044,11 +6044,7 @@ class LibraryElementImpl extends ElementImpl globalResultRequirements?.record_library_isOriginNotExistingFile( element: this, ); - return hasModifier(Modifier.ORIGIN_NOT_EXISTING_FILE); - } - - set isOriginNotExistingFile(bool value) { - setModifier(Modifier.ORIGIN_NOT_EXISTING_FILE, value); + return _firstFragment.isOriginNotExistingFile; } @Deprecated('Use isOriginNotExistingFile instead') @@ -6638,8 +6634,9 @@ class LibraryExportImpl extends ElementDirectiveImpl implements LibraryExport { } /// A concrete implementation of [LibraryFragment]. +@GenerateFragmentImpl(modifiers: _LibraryFragmentImplModifiers.values) class LibraryFragmentImpl extends FragmentImpl - with DeferredResolutionReadingMixin + with DeferredResolutionReadingMixin, _LibraryFragmentImplMixin implements LibraryFragment { @override final Source source; @@ -10709,6 +10706,8 @@ enum _FragmentImplModifiers { isSynthetic, } +enum _LibraryFragmentImplModifiers { isOriginNotExistingFile } + enum _MethodFragmentImplModifiers { isOriginDeclaration, isOriginInterface } enum _MixinFragmentImplModifiers { isBase } diff --git a/pkg/analyzer/lib/src/dart/element/element.g.dart b/pkg/analyzer/lib/src/dart/element/element.g.dart index 16131f6c2a5..c58528d8ae6 100644 --- a/pkg/analyzer/lib/src/dart/element/element.g.dart +++ b/pkg/analyzer/lib/src/dart/element/element.g.dart @@ -322,6 +322,20 @@ mixin _FragmentImplMixin { void setModifier(Modifier modifier, bool value); } +mixin _LibraryFragmentImplMixin { + bool get isOriginNotExistingFile { + return hasModifier(Modifier.ORIGIN_NOT_EXISTING_FILE); + } + + set isOriginNotExistingFile(bool value) { + setModifier(Modifier.ORIGIN_NOT_EXISTING_FILE, value); + } + + bool hasModifier(Modifier modifier); + + void setModifier(Modifier modifier, bool value); +} + mixin _MethodFragmentImplMixin { bool get isOriginDeclaration { return hasModifier(Modifier.ORIGIN_DECLARATION); diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart index 824e01240d0..086f77e38dc 100644 --- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart +++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart @@ -1404,7 +1404,7 @@ class LibraryReader { } }); - libraryFragment.isSynthetic = _reader.readBool(); + libraryFragment.readModifiers(_reader); libraryFragment.libraryImports = _reader.readTypedList(() { return _readLibraryImport(containerUnit: libraryFragment); diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart index 84acbbf2f13..53e96264a53 100644 --- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart +++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart @@ -821,9 +821,7 @@ class BundleWriter { void _writeUnitElement(LibraryFragmentImpl libraryFragment) { _writeResolutionOffset(); - - // ignore: deprecated_member_use_from_same_package - _sink.writeBool(libraryFragment.isSynthetic); + libraryFragment.writeModifiers(_sink); _sink.writeList(libraryFragment.libraryImports, _writeLibraryImport); _sink.writeList(libraryFragment.libraryExports, _writeLibraryExport); diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart index 6e1c031e29d..3e004d07128 100644 --- a/pkg/analyzer/lib/src/summary2/library_builder.dart +++ b/pkg/analyzer/lib/src/summary2/library_builder.dart @@ -659,6 +659,7 @@ class LibraryBuilder { ); partUnitNode.declaredFragment = libraryFragment; libraryFragment.isSynthetic = !partFile.exists; + libraryFragment.isOriginNotExistingFile = !partFile.exists; libraryFragment.setCodeRange(0, partUnitNode.length); units.add(LinkingUnit(node: partUnitNode, fragment: libraryFragment)); @@ -774,7 +775,6 @@ class LibraryBuilder { libraryUnitNode.featureSet, ); if (!libraryFile.exists) { - libraryElement.isOriginNotExistingFile = true; libraryElement.isSynthetic = true; } libraryElement.languageVersion = libraryUnitNode.languageVersion; @@ -790,6 +790,7 @@ class LibraryBuilder { ); libraryUnitNode.declaredFragment = libraryFragment; libraryFragment.isSynthetic = !libraryFile.exists; + libraryFragment.isOriginNotExistingFile = !libraryFile.exists; libraryFragment.setCodeRange(0, libraryUnitNode.length); linkingUnits.add( diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart index a8e6d65b6d7..b2a91c9b384 100644 --- a/pkg/analyzer/test/src/summary/element_text.dart +++ b/pkg/analyzer/test/src/summary/element_text.dart @@ -1265,6 +1265,7 @@ class _Element2Writer extends _AbstractElementWriter { void _writeLibraryFragment(LibraryFragmentImpl f) { _sink.writeIndentedLine(() { _writeObjectId(f); + _sink.writeIf(f.isOriginNotExistingFile, 'isOriginNotExistingFile '); var uriStr = f.source.uri.toString(); if (uriStr == 'package:test/test.dart') { diff --git a/pkg/analyzer/test/src/summary/elements/library_test.dart b/pkg/analyzer/test/src/summary/elements/library_test.dart index b5586049ef2..96366b1cd69 100644 --- a/pkg/analyzer/test/src/summary/elements/library_test.dart +++ b/pkg/analyzer/test/src/summary/elements/library_test.dart @@ -47,6 +47,17 @@ library '''); } + test_isOriginNotExistingFile() async { + var library = await testContextLibrary('package:test/test.dart'); + checkElementText(library, r''' +library + reference: + fragments + #F0 isOriginNotExistingFile + element: +'''); + } + test_library() async { var library = await buildLibrary(''); checkElementText(library, r'''