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: 4 additions & 0 deletions packages/freezed/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## Unreleased 3.2.0-dev

- Use `build` 3.0.0-dev.
- Use `source_gen` 3.0.0-dev.
- Support Dart 3.8.0 and analyzer 7.5.9 as a minumum.

## 3.1.0 - 2025-07-02
Expand Down
46 changes: 21 additions & 25 deletions packages/freezed/lib/src/ast.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';

extension AstX on AstNode {
String? get documentation {
Expand All @@ -22,16 +22,16 @@ extension AstX on AstNode {

extension ClassX on ClassDeclaration {
bool get hasCustomToString {
final element = declaredElement!;
final element = declaredFragment!.element;

for (final type in [
element,
...element.allSupertypes
.where((e) => !e.isDartCoreObject)
.map((e) => e.element),
.map((e) => e.element3),
]) {
for (final method in type.methods) {
if (method.name == 'toString') {
for (final method in type.methods2) {
if (method.name3 == 'toString') {
return true;
}
}
Expand All @@ -40,56 +40,52 @@ extension ClassX on ClassDeclaration {
return false;
}

bool get hasSuperEqual => declaredElement!.allSupertypes
bool get hasSuperEqual => declaredFragment!.element.allSupertypes
.where((e) => !e.isDartCoreObject)
.map((e) => e.element)
.map((e) => e.element3)
.any((e) => e.hasEqual);

bool get hasCustomEquals => declaredElement!.hasEqual;
bool get hasCustomEquals => declaredFragment!.element.hasEqual;

bool get hasSuperHashCode => declaredElement!.allSupertypes
bool get hasSuperHashCode => declaredFragment!.element.allSupertypes
.where((e) => !e.isDartCoreObject)
.map((e) => e.element)
.map((e) => e.element3)
.any((e) => e.hasHashCode);
}

extension on InterfaceElement {
bool get hasEqual => methods.any(((e) => e.isOperator && e.name == '=='));
extension on InterfaceElement2 {
bool get hasEqual => methods2.any(((e) => e.isOperator && e.name3 == '=='));

bool get hasHashCode =>
accessors.where((e) => e.isGetter).any((e) => e.name == 'hashCode');
bool get hasHashCode => getters2.any((e) => e.name3 == 'hashCode');
}

extension ConstructorX on ConstructorDeclaration {
String get fullName {
// ignore: deprecated_member_use, latest analyzer with enclosingElement3 not available in stable channel
final classElement = declaredElement!.enclosingElement3;
final classElement = declaredFragment!.element.enclosingElement2;

var generics = classElement.typeParameters
.map((e) => '\$${e.name}')
var generics = classElement.typeParameters2
.map((e) => '\$${e.name3}')
.join(', ');
if (generics.isNotEmpty) {
generics = '<$generics>';
}

// ignore: deprecated_member_use, latest analyzer with enclosingElement3 not available in stable channel
final className = classElement.enclosingElement3.name;
final className = classElement.enclosingElement2.name3;

return name == null ? '$className$generics' : '$className$generics.$name';
}

String get escapedName {
// ignore: deprecated_member_use, latest analyzer with enclosingElement3 not available in stable channel
final classElement = declaredElement!.enclosingElement3;
final classElement = declaredFragment!.element.enclosingElement2;

var generics = classElement.typeParameters
.map((e) => '\$${e.name}')
var generics = classElement.typeParameters2
.map((e) => '\$${e.name3}')
.join(', ');
if (generics.isNotEmpty) {
generics = '<$generics>';
}

final escapedElementName = classElement.name.replaceAll(r'$', r'\$');
final escapedElementName = classElement.name3!.replaceAll(r'$', r'\$');
final escapedConstructorName = name?.lexeme.replaceAll(r'$', r'\$');

return escapedConstructorName == null
Expand Down
Loading