Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion lib/src/model/library.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import 'package:analyzer/dart/element/scope.dart';
import 'package:analyzer/source/line_info.dart';
// ignore: implementation_imports
import 'package:analyzer/src/dart/element/element.dart';
// ignore: implementation_imports
import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/kind.dart';
import 'package:dartdoc/src/model/model.dart';
Expand Down Expand Up @@ -315,7 +316,7 @@ class Library extends ModelElement

/// The real packageMeta, as opposed to the package we are documenting with.
late final PackageMeta? packageMeta =
packageGraph.packageMetaProvider.fromElement(element2, config.sdkDir);
packageGraph.packageMetaProvider.fromElement(element as LibraryElementImpl, config.sdkDir);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need specifically LibraryElementImpl here, or LibraryElement2?
Can we use .asElement2 instead?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done.


late final List<Class> classesAndExceptions = [
..._localElementsOfType<ClassElement, Class>(),
Expand Down
10 changes: 10 additions & 0 deletions lib/src/warnings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ import 'dart:io';
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';
Expand Down Expand Up @@ -498,6 +501,13 @@ class PackageWarningCounter {
UnmodifiableMapView<Element?, Map<PackageWarning, Set<String>>>
get countedWarnings => UnmodifiableMapView(_countedWarnings);

/// An unmodifiable map view of all counted warnings related by their element,
/// warning type, and message.
UnmodifiableMapView<Element2?, Map<PackageWarning, Set<String>>>
get countedWarnings2 => UnmodifiableMapView(_countedWarnings.map((key,
value) =>
MapEntry(key != null ? (key.asElement2 as Element2) : null, value)));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a strange cast key.asElement2 as Element2.
We expect to get Element2 from asElement2, right?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missed that, fixed. Would attribute this to the auto complete AI plugin.


PackageWarningCounter(this.packageGraph);

/// Logs [packageWarning].
Expand Down
6 changes: 2 additions & 4 deletions test/documentation_comment_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// 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 'package:analyzer/file_system/file_system.dart';
import 'package:dartdoc/src/dartdoc_options.dart';
import 'package:dartdoc/src/model/model.dart';
Expand All @@ -30,7 +28,7 @@ class DocumentationCommentTest extends DartdocTestBase {
late ModelElement libraryModel;

void expectNoWarnings() {
expect(packageGraph.packageWarningCounter.countedWarnings, isEmpty);
expect(packageGraph.packageWarningCounter.countedWarnings2, isEmpty);
expect(packageGraph.packageWarningCounter.hasWarnings, isFalse);
}

Expand Down Expand Up @@ -863,7 +861,7 @@ class _HasWarning extends Matcher {
Map<Object?, Object?> matchState, bool verbose) {
if (actual is ModelElement) {
var warnings = actual
.packageGraph.packageWarningCounter.countedWarnings[actual.element];
.packageGraph.packageWarningCounter.countedWarnings2[actual.element2];
if (warnings == null) {
return mismatchDescription.add('has no warnings');
}
Expand Down
4 changes: 1 addition & 3 deletions test/end2end/dartdoc_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// 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:async';

import 'package:analyzer/file_system/file_system.dart';
Expand Down Expand Up @@ -84,7 +82,7 @@ void main() {
await buildDartdoc(['--allow-tools'], testPackageToolError, tempDir);
var results = await dartdoc.generateDocsBase();
var p = results.packageGraph;
var unresolvedToolErrors = p.packageWarningCounter.countedWarnings.values
var unresolvedToolErrors = p.packageWarningCounter.countedWarnings2.values
.map((e) => e[PackageWarning.toolError] ?? {})
.expand((element) => element);

Expand Down
48 changes: 23 additions & 25 deletions test/mustachio/runtime_renderer_builder_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,21 @@
// 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

@TestOn('vm && !windows')
@Timeout.factor(2)
library;

import 'dart:io';

import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:test/test.dart';
import 'package:test_descriptor/test_descriptor.dart' as d;

import 'builder_test_base.dart';

void main() {
group('builds a renderer class', () {
late final LibraryElement renderersLibrary;
late final LibraryElement2 renderersLibrary;
late final String generatedContent;

// Builders are fairly expensive (about 4 seconds per `testBuilder` call),
Expand All @@ -42,7 +40,7 @@ abstract class Foo extends FooBase with Mix<int> {
class Bar {}
class Baz {}
''');
renderersLibrary = await resolveGeneratedLibrary(runtimeRenderersPath);
renderersLibrary = await resolveGeneratedLibrary2(runtimeRenderersPath);
generatedContent = await File(runtimeRenderersPath).readAsString();
});

Expand All @@ -63,23 +61,23 @@ class Baz {}
test('for a class which is extended by a rendered class', () {
// No render function is necessary.
expect(renderersLibrary.getTopLevelFunction('_render_FooBase'), isNull);
expect(renderersLibrary.getClass('_Renderer_FooBase'), isNotNull);
expect(renderersLibrary.getClass2('_Renderer_FooBase'), isNotNull);
});

test('for a class which is mixed into a rendered class', () {
// No render function is necessary.
expect(renderersLibrary.getTopLevelFunction('_render_Mix'), isNull);
expect(renderersLibrary.getClass('_Renderer_Mix'), isNotNull);
expect(renderersLibrary.getClass2('_Renderer_Mix'), isNotNull);
});

test('for a type found in a getter', () {
expect(renderersLibrary.getTopLevelFunction('_render_Bar'), isNotNull);
expect(renderersLibrary.getClass('_Renderer_Bar'), isNotNull);
expect(renderersLibrary.getClass2('_Renderer_Bar'), isNotNull);
});

test('for a generic, bounded type found in a getter', () {
expect(renderersLibrary.getTopLevelFunction('_render_Baz'), isNotNull);
expect(renderersLibrary.getClass('_Renderer_Baz'), isNotNull);
expect(renderersLibrary.getClass2('_Renderer_Baz'), isNotNull);
});

test('with a property map', () {
Expand Down Expand Up @@ -190,12 +188,12 @@ class Baz {}
library foo;
import 'annotations.dart';
''');
var renderersLibrary = await resolveGeneratedLibrary(runtimeRenderersPath);
var renderersLibrary = await resolveGeneratedLibrary2(runtimeRenderersPath);

expect(renderersLibrary.getTopLevelFunction('renderFoo'), isNotNull);
expect(renderersLibrary.getTopLevelFunction('renderBar'), isNotNull);
expect(renderersLibrary.getClass('_Renderer_Foo'), isNotNull);
expect(renderersLibrary.getClass('_Renderer_Bar'), isNotNull);
expect(renderersLibrary.getClass2('_Renderer_Foo'), isNotNull);
expect(renderersLibrary.getClass2('_Renderer_Bar'), isNotNull);
});

group('builds a renderer class for a generic type', () {
Expand Down Expand Up @@ -267,21 +265,21 @@ class Foo<T extends num> {
class Bar {}
class Baz {}
''');
var renderersLibrary = await resolveGeneratedLibrary(runtimeRenderersPath);
var renderersLibrary = await resolveGeneratedLibrary2(runtimeRenderersPath);

var fooRenderFunction = renderersLibrary.getTopLevelFunction('renderFoo')!;
expect(fooRenderFunction.typeParameters, hasLength(1));
var fBound = fooRenderFunction.typeParameters.single.bound!;
expect(fooRenderFunction.typeParameters2, hasLength(1));
var fBound = fooRenderFunction.typeParameters2.single.bound!;
expect(fBound.getDisplayString(), equals('num'));

var fooRendererClass = renderersLibrary.getClass('_Renderer_Foo')!;
expect(fooRendererClass.typeParameters, hasLength(1));
var cBound = fooRenderFunction.typeParameters.single.bound!;
var fooRendererClass = renderersLibrary.getClass2('_Renderer_Foo')!;
expect(fooRendererClass.typeParameters2, hasLength(1));
var cBound = fooRenderFunction.typeParameters2.single.bound!;
expect(cBound.getDisplayString(), equals('num'));
});

group('does not generate a renderer', () {
late final LibraryElement renderersLibrary;
late final LibraryElement2 renderersLibrary;

setUpAll(() async {
await testMustachioBuilder('''
Expand All @@ -299,32 +297,32 @@ class Private {}
class Setter {}
class Method {}
''');
renderersLibrary = await resolveGeneratedLibrary(runtimeRenderersPath);
renderersLibrary = await resolveGeneratedLibrary2(runtimeRenderersPath);
});

test('found in a static getter', () {
expect(renderersLibrary.getTopLevelFunction('_render_Static'), isNull);
expect(renderersLibrary.getClass('_Renderer_Static'), isNull);
expect(renderersLibrary.getClass2('_Renderer_Static'), isNull);
});

test('found in a private getter', () {
expect(renderersLibrary.getTopLevelFunction('_render_Private'), isNull);
expect(renderersLibrary.getClass('_Renderer_Private'), isNull);
expect(renderersLibrary.getClass2('_Renderer_Private'), isNull);
});

test('found in a setter', () {
expect(renderersLibrary.getTopLevelFunction('_render_Setter'), isNull);
expect(renderersLibrary.getClass('_Renderer_Setter'), isNull);
expect(renderersLibrary.getClass2('_Renderer_Setter'), isNull);
});

test('found in a method', () {
expect(renderersLibrary.getTopLevelFunction('_render_Method'), isNull);
expect(renderersLibrary.getClass('_Renderer_Method'), isNull);
expect(renderersLibrary.getClass2('_Renderer_Method'), isNull);
});

test('for types not @visibleToMustache', () {
expect(renderersLibrary.getTopLevelFunction('_render_String'), isNull);
expect(renderersLibrary.getClass('_Renderer_String'), isNull);
expect(renderersLibrary.getClass2('_Renderer_String'), isNull);
});
});
}
Expand Down
2 changes: 0 additions & 2 deletions test/src/utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// 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';

import 'package:analyzer/file_system/file_system.dart';
Expand Down
60 changes: 29 additions & 31 deletions tool/mustachio/codegen_aot_compiler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';

import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_provider.dart';
import 'package:analyzer/dart/element/type_system.dart';
Expand Down Expand Up @@ -217,22 +215,22 @@ Future<String> _redirectingMethod(
var buffer = StringBuffer()..write('String ${compiler._rendererName}');

buffer.writeTypeParameters(
compiler._usedContextStack.expand((c) => c.type.element.typeParameters));
compiler._usedContextStack.expand((c) => c.type.element3.typeParameters2));
buffer.write('(');

for (var context in compiler._usedContextStack) {
var contextElement = context.type.element;
var contextElement = context.type.element3;
buffer.write(contextElement.displayName);
if (contextElement.typeParameters.isNotEmpty) {
if (contextElement.typeParameters2.isNotEmpty) {
buffer.write('<');
}
for (var tp in contextElement.typeParameters) {
buffer.write(tp.name);
if (tp != contextElement.typeParameters.last) {
for (var tp in contextElement.typeParameters2) {
buffer.write(tp.name3);
if (tp != contextElement.typeParameters2.last) {
buffer.write(', ');
}
}
if (contextElement.typeParameters.isNotEmpty) {
if (contextElement.typeParameters2.isNotEmpty) {
buffer.write('>');
}
buffer.write(' ${context.name}');
Expand Down Expand Up @@ -372,27 +370,27 @@ class _AotCompiler {
// this should be perfectly possible.

var referenceElements = buffer.writeTypeParameters(
_usedContexts.expand((c) => c.type.element.typeParameters),
_usedContexts.expand((c) => c.type.element3.typeParameters2),
);
for (var element in referenceElements) {
referenceUris.add(_elementUri(element));
}
buffer.write('(');

for (var context in _usedContexts) {
var contextElement = context.type.element;
var contextElement = context.type.element3;
referenceUris.add(_elementUri(contextElement));
buffer.write(contextElement.displayName);
if (contextElement.typeParameters.isNotEmpty) {
if (contextElement.typeParameters2.isNotEmpty) {
buffer.write('<');
}
for (var tp in contextElement.typeParameters) {
buffer.write(tp.name);
if (tp != contextElement.typeParameters.last) {
for (var tp in contextElement.typeParameters2) {
buffer.write(tp.name3);
if (tp != contextElement.typeParameters2.last) {
buffer.write(', ');
}
}
if (contextElement.typeParameters.isNotEmpty) {
if (contextElement.typeParameters2.isNotEmpty) {
buffer.write('>');
}
buffer.write(' ${context.name}');
Expand All @@ -410,9 +408,9 @@ class _AotCompiler {
}

/// Returns the URI of [element] for use in generated import directives.
String _elementUri(Element element) {
var libraryElement = element.library!;
var libraryUri = libraryElement.source.uri;
String _elementUri(Element2 element) {
var libraryElement = element.library2!;
var libraryUri = libraryElement.firstFragment.source.uri;
if (libraryUri.scheme == 'file') {
return path.relative(libraryUri.path,
from: path.absolute(path.dirname(_buildData._sourcePath)));
Expand Down Expand Up @@ -581,8 +579,8 @@ class _BlockCompiler {
// for [Iterable], and then use [DartType.asInstanceOf] to ultimately
// determine that the inner type of the loop is, for example,
// `Future<int>`.
var iterableElement = typeProvider.iterableElement;
var iterableType = variableLookup.type.asInstanceOf(iterableElement)!;
var iterableElement = typeProvider.iterableElement2;
var iterableType = variableLookup.type.asInstanceOf2(iterableElement)!;
var innerContextType = iterableType.typeArguments.first as InterfaceType;
var innerContext = _VariableLookup(innerContextType, newContextName);
_contextStack.push(innerContext);
Expand Down Expand Up @@ -638,9 +636,9 @@ class _BlockCompiler {
var primaryName = key[0];

late _VariableLookup context;
PropertyAccessorElement? getter;
GetterElement? getter;
for (var c in _contextStack) {
getter = c.type.lookUpGetter2(primaryName, contextType.element.library);
getter = c.type.lookUpGetter3(primaryName, contextType.element3.library2);
if (getter != null) {
context = c;
_usedContextTypes.add(c);
Expand All @@ -665,7 +663,7 @@ class _BlockCompiler {
: '${context.name}.$primaryName';
var remainingNames = [...key.skip(1)];
for (var secondaryKey in remainingNames) {
getter = type.lookUpGetter2(secondaryKey, type.element.library);
getter = type.lookUpGetter3(secondaryKey, type.element3.library2);
if (getter == null) {
throw MustachioResolutionException(node.keySpan.message(
"Failed to resolve '$secondaryKey' on ${context.type} while "
Expand Down Expand Up @@ -923,9 +921,9 @@ extension<T> on List<T> {
}

extension on StringBuffer {
Set<Element> writeTypeParameters(
Iterable<TypeParameterElement> typeParameters) {
var referencedElements = <Element>{};
Set<Element2> writeTypeParameters(
Iterable<TypeParameterElement2> typeParameters) {
var referencedElements = <Element2>{};
var hasTypeParameters = false;
for (var typeParameter in typeParameters) {
if (!hasTypeParameters) {
Expand All @@ -937,11 +935,11 @@ extension on StringBuffer {

var bound = typeParameter.bound;
if (bound == null) {
write(typeParameter.name);
write(typeParameter.name3);
} else {
var boundElement = bound.documentableElement!;
var boundElement = bound.documentableElement2!;
referencedElements.add(boundElement);
write('${typeParameter.name} extends ${boundElement.name!}');
write('${typeParameter.name3} extends ${boundElement.name3!}');
}
}
if (hasTypeParameters) {
Expand Down
Loading