Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
4 changes: 2 additions & 2 deletions packages/catalyst_builder/lib/src/builder/helpers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import 'constants.dart';
extension ElementAnnotationExtension on ElementAnnotation {
/// Checks if the annotation is part of the catalyst_builder package.
bool isLibraryAnnotation(String name) {
if (element?.enclosingElement3?.name != name) {
if (element2?.enclosingElement2?.displayName != name) {
return false;
}
var packageUri = element!.library?.source.uri.toString();
var packageUri = element2!.library2?.uri.toString();
if (packageUri == null) {
return false;
}
Expand Down
91 changes: 46 additions & 45 deletions packages/catalyst_builder/lib/src/builder/preflight_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'dart:async';
import 'dart:convert';

import 'package:analyzer/dart/constant/value.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:build/build.dart';
import 'package:catalyst_builder_contracts/catalyst_builder_contracts.dart';
Expand All @@ -26,7 +26,7 @@ class PreflightBuilder implements Builder {
return;
}

LibraryElement libraryElement;
LibraryElement2 libraryElement;
try {
libraryElement = await buildStep.inputLibrary;
} catch (e) {
Expand All @@ -45,35 +45,33 @@ class PreflightBuilder implements Builder {
);
}

PreflightPart _extractAnnotations(LibraryElement entryLib) {
PreflightPart _extractAnnotations(LibraryElement2 entryLib) {
var services = <ExtractedService>[];

for (var lib in entryLib.topLevelElements) {
for (var lib in entryLib.children2.whereType<Annotatable>()) {
services.addAll(_extractFromTopLevelElement(lib));
}

return PreflightPart(
services: services,
);
return PreflightPart(services: services);
}

List<ExtractedService> _extractFromTopLevelElement(Element el) {
List<ExtractedService> _extractFromTopLevelElement(Annotatable el) {
var services = <ExtractedService>[];
var isPreloaded = el.metadata.any((a) => a.isLibraryAnnotation('Preload'));
var isPreloaded = el.metadata2.annotations.any(
(a) => a.isLibraryAnnotation('Preload'),
);

for (var annotation in el.metadata) {
for (var annotation in el.metadata2.annotations) {
if (annotation.isLibraryAnnotation('ServiceMap')) {
services.addAll(
_extractServicesFromServiceMap(annotation, isPreloaded),
);
}
if (annotation.isLibraryAnnotation('Service') && el is ClassElement) {
if (annotation.isLibraryAnnotation('Service') && el is ClassElement2) {
var serviceAnnotation = annotation.computeConstantValue();
services.add(_mapToExtractedService(
el,
serviceAnnotation,
isPreloaded,
));
services.add(
_mapToExtractedService(el, serviceAnnotation, isPreloaded),
);
}
}
return services;
Expand All @@ -93,22 +91,20 @@ class PreflightBuilder implements Builder {
continue;
}

var keyElement = typed.element;
if (keyElement is! ClassElement) {
var keyElement = typed.element3;
if (keyElement is! ClassElement2) {
continue;
}

serviceMapServices.add(_mapToExtractedService(
keyElement,
kvp.value,
isPreloaded,
));
serviceMapServices.add(
_mapToExtractedService(keyElement, kvp.value, isPreloaded),
);
}
return serviceMapServices;
}

ExtractedService _mapToExtractedService(
ClassElement serviceClass,
ClassElement2 serviceClass,
DartObject? serviceAnnotation,
bool isPreloaded,
) {
Expand All @@ -117,8 +113,8 @@ class PreflightBuilder implements Builder {
return ExtractedService(
lifetime: lifetime.toString(),
service: SymbolReference(
symbolName: serviceClass.name,
library: serviceClass.librarySource.uri.toString(),
symbolName: serviceClass.displayName,
library: serviceClass.library2.uri.toString(),
),
constructorArgs: _extractConstructorArgs(serviceClass),
exposeAs: _getExposeAs(serviceAnnotation),
Expand All @@ -133,11 +129,11 @@ class PreflightBuilder implements Builder {
return null;
}

var exposeAsElement = typed.element;
var exposeAsElement = typed.element3;

return SymbolReference(
symbolName: exposeAsElement.name,
library: exposeAsElement.librarySource.uri.toString(),
symbolName: exposeAsElement.displayName,
library: exposeAsElement.library2.uri.toString(),
);
}

Expand All @@ -149,19 +145,27 @@ class PreflightBuilder implements Builder {
return ServiceLifetime.values[lifetimeIndex ?? 1];
}

List<ConstructorArg> _extractConstructorArgs(ClassElement el) {
return el.constructors
.firstWhere((ctor) => !ctor.isFactory && ctor.name == '')
.parameters
.map(_buildConstructorArg)
List<ConstructorArg> _extractConstructorArgs(ClassElement2 el) {
var constructors = el.children2
.whereType<ConstructorElement2>()
.where(
(ctor) =>
!ctor.isFactory &&
(ctor.firstFragment.name2 == '' ||
ctor.firstFragment.name2 == 'new'),
)
.toList();
return constructors.firstOrNull?.formalParameters
.map(_buildConstructorArg)
.toList() ??
[];
}

ConstructorArg _buildConstructorArg(ParameterElement param) {
var annotations = param.metadata.cast<ElementAnnotation?>();
ConstructorArg _buildConstructorArg(FormalParameterElement param) {
var annotations = param.metadata2.annotations;

return ConstructorArg(
name: param.name,
name: param.displayName,
isOptional: param.isOptional,
isPositional: param.isPositional,
isNamed: param.isNamed,
Expand All @@ -173,10 +177,10 @@ class PreflightBuilder implements Builder {
InjectAnnotation? _extractInjectAnnotation(
List<ElementAnnotation?> annotations,
) {
var injectAnnotation = annotations.firstWhere(
(a) => a!.isLibraryAnnotation('Inject'),
orElse: () => null,
);
var injectAnnotation = annotations.cast<ElementAnnotation?>().firstWhere(
(a) => a!.isLibraryAnnotation('Inject'),
orElse: () => null,
);

if (injectAnnotation == null) {
return null;
Expand All @@ -186,10 +190,7 @@ class PreflightBuilder implements Builder {
var tag = constantValue?.getField('tag')?.toSymbolValue();
var parameter = constantValue?.getField('parameter')?.toStringValue();

return InjectAnnotation(
tag: tag,
parameter: parameter,
);
return InjectAnnotation(tag: tag, parameter: parameter);
}

List<String> _getTags(DartObject? serviceAnnotation) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'dart:async';
import 'dart:convert';

import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:build/build.dart';
import 'package:code_builder/code_builder.dart';
import 'package:dart_style/dart_style.dart';
Expand All @@ -20,16 +20,17 @@ class ServiceContainerPluginBuilder implements Builder {
if (!await buildStep.resolver.isLibrary(buildStep.inputId)) {
return;
}
LibraryElement libraryElement;
LibraryElement2 libraryElement;
try {
libraryElement = (await buildStep.inputLibrary);
} catch (e) {
log.warning('Error while processing input library. Skip for now.', e);
return;
}

var annotation = libraryElement.topLevelElements
.map((el) => el.metadata.where(
var annotation = libraryElement.children2
.whereType<Annotatable>()
.map((el) => el.metadata2.annotations.where(
(m) => m.isLibraryAnnotation('GenerateServiceContainerPlugin')))
.fold(<ElementAnnotation>[], (prev, e) => [...prev, ...e]).firstOrNull;

Expand Down
4 changes: 2 additions & 2 deletions packages/catalyst_builder/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ environment:
dependencies:
code_builder: ^4.2.0
dart_style: ^3.0.1
build: ^2.1.0
build: ^3.0.0
glob: ^2.1.0
path: ^1.8.0
analyzer: '>=6.2.0 <8.0.0'
analyzer: '>=7.4.0 <9.0.0'
yaml: ^3.0.0
catalyst_builder_contracts: ^2.0.0

Expand Down