Skip to content

Commit

Permalink
Version 3.8.0-66.0.dev
Browse files Browse the repository at this point in the history
Merge 152963b into dev
  • Loading branch information
Dart CI committed Feb 3, 2025
2 parents 07624c6 + 152963b commit 45efb7a
Show file tree
Hide file tree
Showing 14 changed files with 147 additions and 138 deletions.
37 changes: 15 additions & 22 deletions pkg/analyzer/lib/src/dart/element/class_hierarchy.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +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/dart/element/element.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/element/element.dart';
Expand All @@ -14,36 +11,33 @@ import 'package:analyzer/src/dart/element/type_system.dart';
import 'package:analyzer/src/utilities/extensions/collection.dart';

class ClassHierarchy {
final Map<InterfaceElementImpl, _Hierarchy> _map = {};
final Map<InterfaceElementImpl2, _Hierarchy> _map = {};

List<ClassHierarchyError> errors(InterfaceElementImpl element) {
List<ClassHierarchyError> errors(InterfaceElementImpl2 element) {
return _getHierarchy(element).errors;
}

List<InterfaceType> implementedInterfaces(InterfaceElementImpl element) {
List<InterfaceType> implementedInterfaces(InterfaceElementImpl2 element) {
return _getHierarchy(element).interfaces;
}

void remove(InterfaceElementImpl element) {
assert(element.augmentationTarget == null);
void remove(InterfaceElementImpl2 element) {
element.resetCachedAllSupertypes();
_map.remove(element);
}

/// Remove hierarchies for classes defined in specified libraries.
void removeOfLibraries(Set<Uri> uriSet) {
_map.removeWhere((element, _) {
if (uriSet.contains(element.librarySource.uri)) {
if (uriSet.contains(element.library2.uri)) {
element.resetCachedAllSupertypes();
return true;
}
return false;
});
}

_Hierarchy _getHierarchy(InterfaceElementImpl element) {
var augmented = element.augmented;

_Hierarchy _getHierarchy(InterfaceElementImpl2 element) {
var hierarchy = _map[element];
if (hierarchy != null) {
return hierarchy;
Expand All @@ -55,8 +49,7 @@ class ClassHierarchy {
);
_map[element] = hierarchy;

var library = element.library;
var typeSystem = library.typeSystem;
var typeSystem = element.library2.typeSystem;
var interfacesMerger = InterfacesMerger(typeSystem);

void append(InterfaceTypeImpl? type) {
Expand All @@ -67,7 +60,7 @@ class ClassHierarchy {
interfacesMerger.add(type);

var substitution = Substitution.fromInterfaceType(type);
var element = type.element;
var element = type.element3;
var rawInterfaces = implementedInterfaces(element);
for (var rawInterface in rawInterfaces) {
var newInterface =
Expand All @@ -77,15 +70,15 @@ class ClassHierarchy {
}

append(element.supertype);
if (augmented is MixinElementImpl2) {
for (var type in augmented.superclassConstraints) {
if (element is MixinElementImpl2) {
for (var type in element.superclassConstraints) {
append(type);
}
}
for (var type in augmented.interfaces) {
for (var type in element.interfaces) {
append(type);
}
for (var type in augmented.mixins) {
for (var type in element.mixins) {
append(type);
}

Expand Down Expand Up @@ -127,7 +120,7 @@ class IncompatibleInterfacesClassHierarchyError extends ClassHierarchyError {

class InterfacesMerger {
final TypeSystemImpl _typeSystem;
final Map<InterfaceElement, _ClassInterfaceType> _map = {};
final Map<InterfaceElementImpl2, _ClassInterfaceType> _map = {};

InterfacesMerger(this._typeSystem);

Expand All @@ -136,12 +129,12 @@ class InterfacesMerger {
}

void add(InterfaceTypeImpl type) {
var element = type.element;
var element = type.element3;
var classResult = _map[element];
if (classResult == null) {
classResult = _ClassInterfaceType(
_typeSystem,
element is ClassElementImpl && element.isDartCoreObject,
element is ClassElementImpl2 && element.isDartCoreObject,
);
_map[element] = classResult;
}
Expand Down
29 changes: 18 additions & 11 deletions pkg/analyzer/lib/src/dart/element/element.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3022,7 +3022,7 @@ abstract class ElementImpl implements Element, Element2 {
LibraryElementImpl? get library => thisOrAncestorOfType();

@override
LibraryElement2? get library2 => thisOrAncestorOfType2();
LibraryElementImpl? get library2 => thisOrAncestorOfType2();

@override
Source? get librarySource => library?.source;
Expand Down Expand Up @@ -4654,6 +4654,10 @@ class FormalParameterElementImpl extends PromotableElementImpl2
// TODO(augmentations): Implement the merge of formal parameters.
TypeImpl get type => wrappedElement.type;

set type(TypeImpl value) {
wrappedElement.type = value;
}

@override
// TODO(augmentations): Implement the merge of formal parameters.
List<TypeParameterElement2> get typeParameters2 => const [];
Expand Down Expand Up @@ -5802,7 +5806,7 @@ abstract class InstanceElementImpl2 extends ElementImpl2
ElementKind get kind => firstFragment.kind;

@override
LibraryElement2 get library2 => firstFragment.library2!;
LibraryElementImpl get library2 => firstFragment.library2!;

@override
List<ElementAnnotation> get metadata => firstFragment.metadata;
Expand Down Expand Up @@ -6147,7 +6151,7 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
@override
List<InterfaceType> get allSupertypes {
return _allSupertypes ??=
library.session.classHierarchy.implementedInterfaces(this);
library.session.classHierarchy.implementedInterfaces(element);
}

@override
Expand Down Expand Up @@ -6605,8 +6609,7 @@ abstract class InterfaceElementImpl2 extends InstanceElementImpl2
}

InheritanceManager3 get inheritanceManager {
var library = library2 as LibraryElementImpl;
return library.session.inheritanceManager;
return library2.session.inheritanceManager;
}

@override
Expand Down Expand Up @@ -6785,6 +6788,10 @@ abstract class InterfaceElementImpl2 extends InstanceElementImpl2
)
.ifTypeOrNull();
}

void resetCachedAllSupertypes() {
firstFragment._allSupertypes = null;
}
}

class JoinPatternVariableElementImpl extends PatternVariableElementImpl
Expand Down Expand Up @@ -6951,12 +6958,12 @@ class LabelElementImpl extends ElementImpl
ElementKind get kind => ElementKind.LABEL;

@override
LibraryElement2 get library2 {
LibraryElementImpl get library2 {
return libraryFragment.element;
}

@override
LibraryFragment get libraryFragment => enclosingUnit as LibraryFragment;
CompilationUnitElementImpl get libraryFragment => enclosingUnit;

@override
String get name => super.name!;
Expand Down Expand Up @@ -7295,7 +7302,7 @@ class LibraryElementImpl extends ElementImpl
LibraryElementImpl get library => this;

@override
LibraryElement2 get library2 => this;
LibraryElementImpl get library2 => this;

LibraryDeclarations get libraryDeclarations {
return _libraryDeclarations ??= LibraryDeclarations(this);
Expand Down Expand Up @@ -7832,12 +7839,12 @@ class LocalVariableElementImpl extends NonParameterVariableElementImpl
ElementKind get kind => ElementKind.LOCAL_VARIABLE;

@override
LibraryElement2 get library2 {
LibraryElementImpl get library2 {
return libraryFragment.element;
}

@override
LibraryFragment get libraryFragment => enclosingUnit as LibraryFragment;
CompilationUnitElementImpl get libraryFragment => enclosingUnit;

@override
// TODO(scheglov): make it a nullable field
Expand Down Expand Up @@ -9767,7 +9774,7 @@ class PrefixElementImpl extends _ExistingElementImpl implements PrefixElement {
ElementKind get kind => ElementKind.PREFIX;

@override
LibraryElement2 get library2 => library as LibraryElement2;
LibraryElementImpl get library2 => library;

@override
String get name {
Expand Down
16 changes: 8 additions & 8 deletions pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -55,20 +55,20 @@ class ReplacementVisitor

DartType? createFunctionTypeBuilder({
required FunctionTypeBuilder type,
required List<TypeParameterElement2>? newTypeParameters,
required List<FormalParameterElement>? newParameters,
required List<TypeParameterElementImpl2>? newTypeParameters,
required List<FormalParameterElementImpl>? newFormalParameters,
required TypeImpl? newReturnType,
required NullabilitySuffix? newNullability,
}) {
if (newNullability == null &&
newReturnType == null &&
newParameters == null) {
newFormalParameters == null) {
return null;
}

return FunctionTypeBuilder.v2(
typeParameters: newTypeParameters ?? type.typeParameters,
formalParameters: newParameters ?? type.formalParameters,
formalParameters: newFormalParameters ?? type.formalParameters,
returnType: newReturnType ?? type.returnType,
nullabilitySuffix: newNullability ?? type.nullabilitySuffix,
);
Expand Down Expand Up @@ -330,7 +330,7 @@ class ReplacementVisitor

changeVariance();

List<FormalParameterElement>? newParameters;
List<FormalParameterElementImpl>? newFormalParameters;
for (var i = 0; i < node.formalParameters.length; i++) {
var parameter = node.formalParameters[i];

Expand All @@ -341,8 +341,8 @@ class ReplacementVisitor
var newKind = visitParameterKind(kind);

if (newType != null || newKind != null) {
newParameters ??= node.formalParameters.toList(growable: false);
newParameters[i] = parameter.copyWith(
newFormalParameters ??= node.formalParameters.toList(growable: false);
newFormalParameters[i] = parameter.copyWith(
type: newType,
kind: newKind,
);
Expand All @@ -354,7 +354,7 @@ class ReplacementVisitor
return createFunctionTypeBuilder(
type: node,
newTypeParameters: newTypeParameters,
newParameters: newParameters,
newFormalParameters: newFormalParameters,
newReturnType: newReturnType,
newNullability: newNullability,
);
Expand Down
19 changes: 11 additions & 8 deletions pkg/analyzer/lib/src/dart/element/type_algebra.dart
Original file line number Diff line number Diff line change
Expand Up @@ -544,18 +544,21 @@ abstract class _TypeSubstitutor
int before = useCounter;

var inner = this;
var typeFormals = type.typeFormals;
if (typeFormals.isNotEmpty) {
var typeParameters = type.typeParameters;
if (typeParameters.isNotEmpty) {
inner = newInnerEnvironment();
typeFormals = inner.freshTypeParameters(typeFormals);
typeParameters = inner
.freshTypeParameters(typeParameters.map((e) => e.asElement).toList())
.map((e) => e.asElement2 as TypeParameterElementImpl2)
.toList();
}

// Invert the variance when translating parameters.
inner.invertVariance();

var parameters = type.parameters.map((parameter) {
var type = parameter.type.accept(inner);
return parameter.copyWith(type: type);
var formalParameters = type.formalParameters.map((formalParameter) {
var type = formalParameter.type.accept(inner);
return formalParameter.copyWith(type: type);
}).toList();

inner.invertVariance();
Expand All @@ -567,8 +570,8 @@ abstract class _TypeSubstitutor
if (useCounter == before) return type;

return FunctionTypeBuilder(
typeFormals,
parameters,
typeParameters,
formalParameters,
returnType,
type.nullabilitySuffix,
);
Expand Down
Loading

0 comments on commit 45efb7a

Please sign in to comment.