Skip to content
Open
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
10 changes: 5 additions & 5 deletions lib/import_resolver.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:path/path.dart' as p;

class ImportResolver {
final List<LibraryElement2> libs;
final List<LibraryElement> libs;
final String targetFilePath;

const ImportResolver(this.libs, this.targetFilePath);

String? resolve(Element2? element) {
String? resolve(Element? element) {
// return early if source is null or element is a core type
final elementSourceUri = _sourceUriOfElement(element);
if (elementSourceUri == null || _isCoreDartType(element)) {
Expand Down Expand Up @@ -49,7 +49,7 @@ class ImportResolver {

Set<String> resolveAll(DartType type) {
final imports = <String>{};
final resolvedValue = resolve(type.element3);
final resolvedValue = resolve(type.element);
if (resolvedValue != null) {
imports.add(resolvedValue);
}
Expand All @@ -61,7 +61,7 @@ class ImportResolver {
final imports = <String>{};
if (typeToCheck is ParameterizedType) {
for (DartType type in typeToCheck.typeArguments) {
final resolvedValue = resolve(type.element3);
final resolvedValue = resolve(type.element);
if (resolvedValue != null) {
imports.add(resolvedValue);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:analyzer/dart/constant/value.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:source_gen/source_gen.dart';
import 'package:stacked_generator/import_resolver.dart';
import 'package:stacked_generator/src/generators/bottomsheets/bottomsheet_config.dart';
Expand All @@ -21,15 +21,19 @@ class BottomsheetConfigResolver {
final bottomsheetClassType =
bottomsheetReader.read('classType').typeValue;

final classElement = bottomsheetClassType.element3 as ClassElement2?;
final classElement = bottomsheetClassType.element as ClassElement?;

// Get the import of the class type that's defined for the bottomSheet
final import = importResolver.resolve(classElement!);

final className = toDisplayString(bottomsheetClassType);

bottomSheetConfig.add(BottomsheetConfig(
bottomsheetClassName: className, import: import ?? ''));
bottomSheetConfig.add(
BottomsheetConfig(
bottomsheetClassName: className,
import: import ?? '',
),
);
}

return bottomSheetConfig;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dart:async';

import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:build/build.dart';
import 'package:source_gen/source_gen.dart';
import 'package:stacked_generator/import_resolver.dart';
Expand All @@ -12,7 +12,7 @@ import 'bottomsheet_config_resolver.dart';
class StackedBottomsheetGenerator extends GeneratorForAnnotation<StackedApp> {
@override
FutureOr<String> generateForAnnotatedElement(
Element2 element,
Element element,
ConstantReader annotation,
BuildStep buildStep,
) async {
Expand All @@ -35,7 +35,9 @@ class StackedBottomsheetGenerator extends GeneratorForAnnotation<StackedApp> {
importResolver,
);

return BottomsheetClassGenerator(dialogConfig, locatorName: locatorName)
.generate();
return BottomsheetClassGenerator(
dialogConfig,
locatorName: locatorName,
).generate();
}
}
11 changes: 5 additions & 6 deletions lib/src/generators/dialogs/resolve/dialog_config_resolver.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:analyzer/dart/constant/value.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:source_gen/source_gen.dart';
import 'package:stacked_generator/import_resolver.dart';
import 'package:stacked_generator/src/generators/dialogs/dialog_config.dart';
Expand All @@ -21,17 +21,16 @@ class DialogConfigResolver {
// Get the type of the dialog that we want to register
final dialogClassType = dialogReader.read('classType').typeValue;

final classElement = dialogClassType.element3 as ClassElement2?;
final classElement = dialogClassType.element as ClassElement?;

// Get the import of the class type that's defined for the dialog
final import = importResolver.resolve(classElement!);

final className = toDisplayString(dialogClassType);

dialogConfigs.add(DialogConfig(
dialogClassName: className,
import: import ?? '',
));
dialogConfigs.add(
DialogConfig(dialogClassName: className, import: import ?? ''),
);
}

return dialogConfigs;
Expand Down
15 changes: 7 additions & 8 deletions lib/src/generators/dialogs/resolve/stacked_dialog_generator.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dart:async';

import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:build/build.dart';
import 'package:source_gen/source_gen.dart';
import 'package:stacked_generator/import_resolver.dart';
Expand All @@ -12,7 +12,7 @@ import 'dialog_config_resolver.dart';
class StackedDialogGenerator extends GeneratorForAnnotation<StackedApp> {
@override
FutureOr<String> generateForAnnotatedElement(
Element2 element,
Element element,
ConstantReader annotation,
BuildStep buildStep,
) async {
Expand All @@ -30,12 +30,11 @@ class StackedDialogGenerator extends GeneratorForAnnotation<StackedApp> {

if (dialogsConfig == null) return '';

final dialogConfig = dialogResolver.resolve(
dialogsConfig,
importResolver,
);
final dialogConfig = dialogResolver.resolve(dialogsConfig, importResolver);

return DialogClassGenerator(dialogConfig, locatorName: locatorName)
.generate();
return DialogClassGenerator(
dialogConfig,
locatorName: locatorName,
).generate();
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/element.dart';

class InvalidGeneratorInputException implements Exception {
final String message;
final String? todo;
final Element2? element;
final Element? element;
const InvalidGeneratorInputException(this.message, {this.todo, this.element});

@override
Expand Down
5 changes: 3 additions & 2 deletions lib/src/generators/forms/field_config.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// ignore_for_file: unnecessary_this

import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/element.dart';

/// Described a single field to be generated.
///
Expand Down Expand Up @@ -55,7 +55,8 @@ class ExecutableElementData {
});

factory ExecutableElementData.fromExecutableElement(
ExecutableElement executableElement) {
ExecutableElement executableElement,
) {
final enclosingElementName = executableElement.enclosingElement?.name;
return ExecutableElementData(
returnType: executableElement.returnType.toString(),
Expand Down
97 changes: 51 additions & 46 deletions lib/src/generators/forms/stacked_form_generator.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'dart:async';

import 'package:analyzer/dart/constant/value.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:build/build.dart';
import 'package:source_gen/source_gen.dart';
import 'package:stacked_generator/import_resolver.dart';
Expand All @@ -14,14 +14,16 @@ class StackedFormGenerator extends GeneratorForAnnotation<FormView> {
@override
FutureOr<String> generateForAnnotatedElement(
// ignore: avoid_renaming_method_parameters
Element2 classForAnnotation,
Element classForAnnotation,
// ignore: avoid_renaming_method_parameters
ConstantReader formView,
BuildStep buildStep,
) async {
var libs = await buildStep.resolver.libraries.toList();
var importResolver =
ImportResolver(libs, classForAnnotation.firstFragment.libraryFragment?.source.uri.path ?? '');
var importResolver = ImportResolver(
libs,
classForAnnotation.firstFragment.libraryFragment?.source.uri.path ?? '',
);

final viewName = classForAnnotation.displayName;

Expand All @@ -32,10 +34,12 @@ class StackedFormGenerator extends GeneratorForAnnotation<FormView> {

if (fieldsConfig != null) {
for (final fieldConfig in fieldsConfig) {
final serialisedField = _readFieldConfig(
fieldConfig: fieldConfig, importResolver: importResolver);
final serializedField = _readFieldConfig(
fieldConfig: fieldConfig,
importResolver: importResolver,
);

fields.add(serialisedField);
fields.add(serializedField);
}
}

Expand All @@ -55,28 +59,31 @@ FieldConfig _readFieldConfig({
}) {
var fieldReader = ConstantReader(fieldConfig);

bool isTextField = fieldReader.instanceOf(const TypeChecker.typeNamed(
FormTextField,
inPackage: 'stacked_shared',
));
bool isDateField = fieldReader.instanceOf(const TypeChecker.typeNamed(
FormDateField,
inPackage: 'stacked_shared',
));
bool isDropdownField = fieldReader.instanceOf(const TypeChecker.typeNamed(
FormDropdownField,
inPackage: 'stacked_shared',
));
bool isTextField = fieldReader.instanceOf(
const TypeChecker.typeNamed(FormTextField, inPackage: 'stacked_shared'),
);
bool isDateField = fieldReader.instanceOf(
const TypeChecker.typeNamed(FormDateField, inPackage: 'stacked_shared'),
);
bool isDropdownField = fieldReader.instanceOf(
const TypeChecker.typeNamed(FormDropdownField, inPackage: 'stacked_shared'),
);

if (isTextField) {
return _readTextFieldConfig(
fieldReader: fieldReader, importResolver: importResolver);
fieldReader: fieldReader,
importResolver: importResolver,
);
} else if (isDateField) {
return _readDateFieldConfig(
fieldReader: fieldReader, importResolver: importResolver);
fieldReader: fieldReader,
importResolver: importResolver,
);
} else if (isDropdownField) {
return _readDropdownFieldConfig(
fieldReader: fieldReader, importResolver: importResolver);
fieldReader: fieldReader,
importResolver: importResolver,
);
} else {
throw ArgumentError('Unknown form field $fieldConfig');
}
Expand All @@ -88,21 +95,24 @@ FieldConfig _readTextFieldConfig({
}) {
final String name = (fieldReader.peek('name')?.stringValue) ?? '';
final String? initialValue = (fieldReader.peek('initialValue')?.stringValue);
final ExecutableElement2? validatorFunction =
(fieldReader.peek('validator')?.objectValue)?.toFunctionValue2();
final ExecutableElement2? customTextEditingController =
final ExecutableElement? validatorFunction =
(fieldReader.peek('validator')?.objectValue)?.toFunctionValue();
final ExecutableElement? customTextEditingController =
(fieldReader.peek('customTextEditingController')?.objectValue)
?.toFunctionValue2();
?.toFunctionValue();
return TextFieldConfig(
name: name,
initialValue: initialValue,
validatorFunction: validatorFunction == null
? null
: ExecutableElementData.fromExecutableElement(validatorFunction),
customTextEditingController: customTextEditingController == null
? null
: ExecutableElementData.fromExecutableElement(
customTextEditingController),
validatorFunction:
validatorFunction == null
? null
: ExecutableElementData.fromExecutableElement(validatorFunction),
customTextEditingController:
customTextEditingController == null
? null
: ExecutableElementData.fromExecutableElement(
customTextEditingController,
),
);
}

Expand All @@ -111,9 +121,7 @@ FieldConfig _readDateFieldConfig({
required ImportResolver importResolver,
}) {
final String name = (fieldReader.peek('name')?.stringValue) ?? '';
return DateFieldConfig(
name: name,
);
return DateFieldConfig(name: name);
}

FieldConfig _readDropdownFieldConfig({
Expand All @@ -123,15 +131,12 @@ FieldConfig _readDropdownFieldConfig({
final String name = (fieldReader.peek('name')?.stringValue) ?? '';
final List<DropdownFieldItem> items =
(fieldReader.peek('items')?.listValue.map((dartObject) {
final itemReader = ConstantReader(dartObject);
final title = itemReader.peek('title')?.stringValue ?? '';
final value = itemReader.peek('value')?.stringValue ?? '';
final itemReader = ConstantReader(dartObject);
final title = itemReader.peek('title')?.stringValue ?? '';
final value = itemReader.peek('value')?.stringValue ?? '';

return DropdownFieldItem(title: title, value: value);
}).toList()) ??
<DropdownFieldItem>[];
return DropdownFieldConfig(
name: name,
items: items,
);
return DropdownFieldItem(title: title, value: value);
}).toList()) ??
<DropdownFieldItem>[];
return DropdownFieldConfig(name: name, items: items);
}
Loading