diff --git a/lib/src/generator/templates.runtime_renderers.dart b/lib/src/generator/templates.runtime_renderers.dart index 56776e7560..943c193dd3 100644 --- a/lib/src/generator/templates.runtime_renderers.dart +++ b/lib/src/generator/templates.runtime_renderers.dart @@ -1688,6 +1688,34 @@ class _Renderer_Category extends RendererBase { ); }, ), + 'element2': Property( + getValue: (CT_ c) => c.element2, + renderVariable: + (CT_ c, Property self, List remainingNames) => + self.renderSimpleVariable( + c, + remainingNames, + 'Element2', + ), + + isNullValue: (CT_ c) => c.element2 == null, + + renderValue: ( + CT_ c, + RendererBase r, + List ast, + StringSink sink, + ) { + renderSimple( + c.element2, + ast, + r.template, + sink, + parent: r, + getters: _invisibleGetters['Element2']!, + ); + }, + ), 'enclosingName': Property( getValue: (CT_ c) => c.enclosingName, renderVariable: ( @@ -19199,6 +19227,34 @@ class _Renderer_Package extends RendererBase { ); }, ), + 'element2': Property( + getValue: (CT_ c) => c.element2, + renderVariable: + (CT_ c, Property self, List remainingNames) => + self.renderSimpleVariable( + c, + remainingNames, + 'Element2', + ), + + isNullValue: (CT_ c) => c.element2 == null, + + renderValue: ( + CT_ c, + RendererBase r, + List ast, + StringSink sink, + ) { + renderSimple( + c.element2, + ast, + r.template, + sink, + parent: r, + getters: _invisibleGetters['Element2']!, + ); + }, + ), 'enclosingName': Property( getValue: (CT_ c) => c.enclosingName, renderVariable: ( @@ -25594,6 +25650,34 @@ class _Renderer_Warnable extends RendererBase { ); }, ), + 'element2': Property( + getValue: (CT_ c) => c.element2, + renderVariable: + (CT_ c, Property self, List remainingNames) => + self.renderSimpleVariable( + c, + remainingNames, + 'Element2', + ), + + isNullValue: (CT_ c) => c.element2 == null, + + renderValue: ( + CT_ c, + RendererBase r, + List ast, + StringSink sink, + ) { + renderSimple( + c.element2, + ast, + r.template, + sink, + parent: r, + getters: _invisibleGetters['Element2']!, + ); + }, + ), }, ) as Map>; diff --git a/lib/src/model/category.dart b/lib/src/model/category.dart index 6d903dcc48..0cb982a385 100644 --- a/lib/src/model/category.dart +++ b/lib/src/model/category.dart @@ -5,6 +5,7 @@ // ignore_for_file: analyzer_use_new_elements import 'package:analyzer/dart/element/element.dart'; +import 'package:analyzer/dart/element/element2.dart'; import 'package:analyzer/file_system/file_system.dart'; import 'package:dartdoc/src/dartdoc_options.dart'; import 'package:dartdoc/src/model/comment_referable.dart'; @@ -82,6 +83,9 @@ class Category @override Element? get element => null; + @override + Element2? get element2 => null; + @override String get name => _categoryDefinition.displayName; diff --git a/lib/src/model/constructor.dart b/lib/src/model/constructor.dart index 74b391b2b7..bb3cc963a6 100644 --- a/lib/src/model/constructor.dart +++ b/lib/src/model/constructor.dart @@ -32,7 +32,7 @@ class Constructor extends ModelElement with ContainerMember, TypeParameters { @override bool get isPublic { if (!super.isPublic) return false; - if (element.hasPrivateName) return false; + if (element2.hasPrivateName) return false; var class_ = element.enclosingElement3; // Enums cannot be explicitly constructed or extended. if (class_ is EnumElement) return false; diff --git a/lib/src/model/library.dart b/lib/src/model/library.dart index 5f09fe3c55..6bda7b2c99 100644 --- a/lib/src/model/library.dart +++ b/lib/src/model/library.dart @@ -30,7 +30,7 @@ class Library extends ModelElement final LibraryElement element; @override - LibraryElement2 get element2 => element.asElement2; + LibraryElement2 get element2 => element.asElement2; /// The set of [Element]s declared directly in this library. final Set _localElements; @@ -315,8 +315,8 @@ class Library extends ModelElement String get packageName => packageMeta?.name ?? ''; /// The real packageMeta, as opposed to the package we are documenting with. - late final PackageMeta? packageMeta = - packageGraph.packageMetaProvider.fromElement(element.asElement2, config.sdkDir); + late final PackageMeta? packageMeta = packageGraph.packageMetaProvider + .fromElement(element.asElement2, config.sdkDir); late final List classesAndExceptions = [ ..._localElementsOfType(), diff --git a/lib/src/model/model_element.dart b/lib/src/model/model_element.dart index 35a8f093fb..909c079e8d 100644 --- a/lib/src/model/model_element.dart +++ b/lib/src/model/model_element.dart @@ -312,7 +312,8 @@ abstract class ModelElement TypeAliasElement(aliasedType: FunctionType()) => FunctionTypedef(e, library, packageGraph), TypeAliasElement() - when e.aliasedType.documentableElement2.asElement is InterfaceElement => + when e.aliasedType.documentableElement2.asElement + is InterfaceElement => ClassTypedef(e, library, packageGraph), TypeAliasElement() => GeneralizedTypedef(e, library, packageGraph), MethodElement(isOperator: true) when enclosingContainer == null => @@ -438,7 +439,7 @@ abstract class ModelElement } } - return !element.hasPrivateName && !hasNodoc; + return !element2.hasPrivateName && !hasNodoc; }(); @override @@ -508,7 +509,7 @@ abstract class ModelElement /// A public, documented library which exports this [ModelElement], ideally in /// [library]'s package. late final Library? canonicalLibrary = () { - if (element.hasPrivateName) { + if (element2.hasPrivateName) { // Privately named elements can never have a canonical library. return null; } @@ -558,6 +559,7 @@ abstract class ModelElement @override Element get element; + @override Element2 get element2 => element.asElement2!; @override diff --git a/lib/src/model/nameable.dart b/lib/src/model/nameable.dart index 8b685156f7..780fa7a9dd 100644 --- a/lib/src/model/nameable.dart +++ b/lib/src/model/nameable.dart @@ -69,7 +69,7 @@ mixin Nameable { enclosingContainer: enclosingContainer, ); - /// Returns the [ModelElement] for [element], instantiating it if needed. + /// Returns the [ModelElement] for [element], instantiating it if needed. /// /// A convenience method for [ModelElement.for_], see its documentation. ModelElement getModelFor2( @@ -91,7 +91,7 @@ mixin Nameable { ModelElement getModelForElement(Element element) => ModelElement.forElement(element, packageGraph); - /// Returns the [ModelElement] for [element], instantiating it if needed. + /// Returns the [ModelElement] for [element], instantiating it if needed. /// /// A convenience method for [ModelElement.forElement], see its /// documentation. diff --git a/lib/src/model/package.dart b/lib/src/model/package.dart index ca702725be..3ee6ab42a8 100644 --- a/lib/src/model/package.dart +++ b/lib/src/model/package.dart @@ -5,6 +5,7 @@ // ignore_for_file: analyzer_use_new_elements import 'package:analyzer/dart/element/element.dart'; +import 'package:analyzer/dart/element/element2.dart'; import 'package:dartdoc/src/dartdoc_options.dart'; import 'package:dartdoc/src/io_utils.dart'; import 'package:dartdoc/src/model/comment_referable.dart'; @@ -378,6 +379,9 @@ class Package extends LibraryContainer @override Element? get element => null; + @override + Element2? get element2 => null; + @override List get containerOrder => config.packageOrder; diff --git a/lib/src/model_utils.dart b/lib/src/model_utils.dart index eb1448e949..b772064bc9 100644 --- a/lib/src/model_utils.dart +++ b/lib/src/model_utils.dart @@ -2,11 +2,9 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// ignore_for_file: analyzer_use_new_elements - import 'dart:io' show Platform; -import 'package:analyzer/dart/element/element.dart'; +import 'package:analyzer/dart/element/element2.dart'; import 'package:dartdoc/src/failure.dart'; import 'package:dartdoc/src/model/model.dart'; import 'package:glob/glob.dart'; @@ -54,9 +52,9 @@ Iterable filterHasCanonical( return maybeHasCanonicalItems.where((me) => me.canonicalModelElement != null); } -extension ElementExtension on Element { +extension ElementExtension on Element2 { bool get hasPrivateName { - final name = this.name; + final name = name3; if (name == null) return false; if (name.startsWith('_')) { @@ -67,8 +65,8 @@ extension ElementExtension on Element { // GenericFunctionTypeElements have the name we care about in the enclosing // element. - if (self is GenericFunctionTypeElement) { - var enclosingElementName = self.enclosingElement3?.name; + if (self is GenericFunctionTypeElement2) { + var enclosingElementName = self.enclosingElement2?.name3; if (enclosingElementName != null && enclosingElementName.startsWith('_')) { return true; diff --git a/lib/src/type_utils.dart b/lib/src/type_utils.dart index 90152f78db..ae706b3e2b 100644 --- a/lib/src/type_utils.dart +++ b/lib/src/type_utils.dart @@ -6,7 +6,6 @@ import 'package:analyzer/dart/element/element2.dart'; import 'package:analyzer/dart/element/type.dart'; extension DartTypeExtension on DartType { - /// The static element associataed with this type, where documentable, and /// `null` otherwise. /// diff --git a/lib/src/warnings.dart b/lib/src/warnings.dart index 020278c9c4..0ad8e251d2 100644 --- a/lib/src/warnings.dart +++ b/lib/src/warnings.dart @@ -10,8 +10,6 @@ import 'dart:math' as math; import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/element2.dart'; import 'package:analyzer/file_system/file_system.dart'; -// ignore: implementation_imports -import 'package:analyzer/src/utilities/extensions/element.dart'; import 'package:collection/collection.dart'; import 'package:dartdoc/src/dartdoc_options.dart'; import 'package:dartdoc/src/logging.dart'; @@ -102,6 +100,8 @@ List> createPackageWarningOptions( mixin Warnable implements CommentReferable, Documentable, Locatable { Element? get element; + Element2? get element2; + void warn( PackageWarning kind, { String? message, @@ -481,7 +481,7 @@ class PackageWarningOptions { } class PackageWarningCounter { - final Map>> _countedWarnings = {}; + final Map>> _countedWarnings = {}; final _items = []; final _displayedWarningCounts = {}; final PackageGraph packageGraph; @@ -496,17 +496,10 @@ class PackageWarningCounter { /// The total amount of warnings this package has experienced. int get warningCount => _warningCount; - /// An unmodifiable map view of all counted warnings related by their element, - /// warning type, and message. - UnmodifiableMapView>> - get countedWarnings => UnmodifiableMapView(_countedWarnings); - /// An unmodifiable map view of all counted warnings related by their element, /// warning type, and message. UnmodifiableMapView>> - get countedWarnings2 => UnmodifiableMapView(_countedWarnings.map((key, - value) => - MapEntry(key?.asElement2, value))); + get countedWarnings => UnmodifiableMapView(_countedWarnings); PackageWarningCounter(this.packageGraph); @@ -558,7 +551,7 @@ class PackageWarningCounter { if (element == null) { return false; } - final warning = _countedWarnings[element.element]; + final warning = _countedWarnings[element.element2]; if (warning != null) { final messages = warning[kind]; return messages != null && @@ -587,7 +580,7 @@ class PackageWarningCounter { } var elementName = element == null ? '' : element.fullyQualifiedName; _countedWarnings - .putIfAbsent(element?.element, () => {}) + .putIfAbsent(element?.element2, () => {}) .putIfAbsent(kind, () => {}) .add(message); _writeWarning( diff --git a/test/documentation_comment_test.dart b/test/documentation_comment_test.dart index 0d2f108cf1..ab18892d3e 100644 --- a/test/documentation_comment_test.dart +++ b/test/documentation_comment_test.dart @@ -28,7 +28,7 @@ class DocumentationCommentTest extends DartdocTestBase { late ModelElement libraryModel; void expectNoWarnings() { - expect(packageGraph.packageWarningCounter.countedWarnings2, isEmpty); + expect(packageGraph.packageWarningCounter.countedWarnings, isEmpty); expect(packageGraph.packageWarningCounter.hasWarnings, isFalse); } @@ -861,7 +861,7 @@ class _HasWarning extends Matcher { Map matchState, bool verbose) { if (actual is ModelElement) { var warnings = actual - .packageGraph.packageWarningCounter.countedWarnings2[actual.element2]; + .packageGraph.packageWarningCounter.countedWarnings[actual.element2]; if (warnings == null) { return mismatchDescription.add('has no warnings'); } diff --git a/test/end2end/dartdoc_test.dart b/test/end2end/dartdoc_test.dart index 959cc69b85..5249e126a0 100644 --- a/test/end2end/dartdoc_test.dart +++ b/test/end2end/dartdoc_test.dart @@ -82,7 +82,7 @@ void main() { await buildDartdoc(['--allow-tools'], testPackageToolError, tempDir); var results = await dartdoc.generateDocsBase(); var p = results.packageGraph; - var unresolvedToolErrors = p.packageWarningCounter.countedWarnings2.values + var unresolvedToolErrors = p.packageWarningCounter.countedWarnings.values .map((e) => e[PackageWarning.toolError] ?? {}) .expand((element) => element); diff --git a/test/end2end/model_test.dart b/test/end2end/model_test.dart index be462f6033..c708f514b8 100644 --- a/test/end2end/model_test.dart +++ b/test/end2end/model_test.dart @@ -1182,7 +1182,7 @@ void main() async { contains( 'ExtendedBaseReexported.action

')); var doAwesomeStuffWarnings = packageGraph.packageWarningCounter - .countedWarnings[doAwesomeStuff.element] ?? + .countedWarnings[doAwesomeStuff.element2] ?? {}; expect( doAwesomeStuffWarnings, diff --git a/test/mustachio/builder_test_base.dart b/test/mustachio/builder_test_base.dart index a9b6ab36b6..e77b584ad1 100644 --- a/test/mustachio/builder_test_base.dart +++ b/test/mustachio/builder_test_base.dart @@ -97,4 +97,4 @@ Future resolveGeneratedLibrary2(String libraryPath) async { } return libraryResult.element2; -} \ No newline at end of file +} diff --git a/tool/mustachio/builder.dart b/tool/mustachio/builder.dart index b2f3febe78..c11080e398 100644 --- a/tool/mustachio/builder.dart +++ b/tool/mustachio/builder.dart @@ -50,8 +50,7 @@ Future build( var typeProvider = library.typeProvider; var typeSystem = library.typeSystem; var rendererSpecs = {}; - for (var renderer in library.metadata2 - .annotations + for (var renderer in library.metadata2.annotations .where((e) => e.element2!.enclosingElement2!.name3 == 'Renderer')) { rendererSpecs.add(_buildRendererSpec(renderer)); } diff --git a/tool/mustachio/codegen_aot_compiler.dart b/tool/mustachio/codegen_aot_compiler.dart index 114b20cdde..9e890b1721 100644 --- a/tool/mustachio/codegen_aot_compiler.dart +++ b/tool/mustachio/codegen_aot_compiler.dart @@ -214,8 +214,8 @@ Future _redirectingMethod( _AotCompiler compiler, _AotCompiler lubCompiler) async { var buffer = StringBuffer()..write('String ${compiler._rendererName}'); - buffer.writeTypeParameters( - compiler._usedContextStack.expand((c) => c.type.element3.typeParameters2)); + buffer.writeTypeParameters(compiler._usedContextStack + .expand((c) => c.type.element3.typeParameters2)); buffer.write('('); for (var context in compiler._usedContextStack) { diff --git a/tool/mustachio/codegen_runtime_renderer.dart b/tool/mustachio/codegen_runtime_renderer.dart index ac8fdbbf8c..b2acdd56a7 100644 --- a/tool/mustachio/codegen_runtime_renderer.dart +++ b/tool/mustachio/codegen_runtime_renderer.dart @@ -10,6 +10,7 @@ library; import 'dart:collection'; import 'package:analyzer/dart/element/element.dart'; +import 'package:analyzer/dart/element/element2.dart'; import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/dart/element/type_provider.dart'; @@ -30,7 +31,7 @@ String buildRuntimeRenderers(Set specs, Uri sourceUri, var visibleElements = specs .map((spec) => spec.visibleTypes) .reduce((value, element) => value.union(element)) - .map((type) => type.documentableElement2.asElement!) + .map((type) => type.documentableElement2!) .toSet(); var raw = RuntimeRenderersBuilder( sourceUri, typeProvider, typeSystem, visibleElements, @@ -63,7 +64,7 @@ class RuntimeRenderersBuilder { final TypeProvider _typeProvider; final TypeSystem _typeSystem; - final Set _allVisibleElements; + final Set _allVisibleElements; /// Whether renderer classes are public. This should only be true for testing. final bool _rendererClassesArePublic; @@ -326,7 +327,7 @@ import '${path.basename(_sourceUri.path)}'; /// Returns whether [element] or any of its supertypes are "visible" to /// Mustache. bool _isVisibleToMustache(InterfaceElement element) { - if (_allVisibleElements.contains(element)) { + if (_allVisibleElements.contains(element.asElement2)) { return true; } var supertype = element.supertype;