Skip to content

Commit

Permalink
Version 3.7.0-145.0.dev
Browse files Browse the repository at this point in the history
Merge 91db72c into dev
  • Loading branch information
Dart CI committed Nov 14, 2024
2 parents a3f5713 + 91db72c commit a3b6652
Show file tree
Hide file tree
Showing 17 changed files with 353 additions and 188 deletions.
8 changes: 4 additions & 4 deletions DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ vars = {
# self-service update these by following the go/dart-engprod/browsers.md
# instructions. d8, the V8 shell, is always checked out.
"checkout_javascript_engines": False,
"d8_tag": "version:13.2.70",
"jsshell_tag": "version:131.0.3",
"jsc_tag": "version:285702",
"d8_tag": "version:13.3.33",
"jsshell_tag": "version:132.0.2",
"jsc_tag": "version:286531",

# https://chrome-infra-packages.appspot.com/p/fuchsia/third_party/clang
"clang_version": "git_revision:388d7f144880dcd85ff31f06793304405a9f44b6",
Expand Down Expand Up @@ -184,7 +184,7 @@ vars = {
# meant to be downloaded by users for local testing. You can self-service
# update these by following the go/dart-engprod/browsers.md instructions.
"download_chrome": False,
"chrome_tag": "131.0.6778.24",
"chrome_tag": "131.0.6778.33",
"download_firefox": False,
"firefox_tag": "132.0",

Expand Down
4 changes: 0 additions & 4 deletions pkg/analyzer/analyzer_use_new_elements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -108,17 +108,13 @@ lib/src/error/correct_override.dart
lib/src/error/dead_code_verifier.dart
lib/src/error/deprecated_member_use_verifier.dart
lib/src/error/duplicate_definition_verifier.dart
lib/src/error/error_handler_verifier.dart
lib/src/error/getter_setter_types_verifier.dart
lib/src/error/imports_verifier.dart
lib/src/error/inheritance_override.dart
lib/src/error/literal_element_verifier.dart
lib/src/error/must_call_super_verifier.dart
lib/src/error/nullable_dereference_verifier.dart
lib/src/error/override_verifier.dart
lib/src/error/required_parameters_verifier.dart
lib/src/error/unused_local_elements_verifier.dart
lib/src/error/use_result_verifier.dart
lib/src/generated/element_resolver.dart
lib/src/generated/element_walker.dart
lib/src/generated/error_detection_helpers.dart
Expand Down
12 changes: 12 additions & 0 deletions pkg/analyzer/lib/dart/element/element2.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1139,6 +1139,18 @@ abstract class InstanceElement2

/// The type of a `this` expression.
DartType get thisType;

/// Returns the field from [fields2] that has the given [name].
FieldElement2? getField2(String name);

/// Returns the getter from [getters2] that has the given [name].
GetterElement? getGetter2(String name);

/// Returns the method from [methods2] that has the given [name].
MethodElement2? getMethod2(String name);

/// Returns the setter from [setters2] that has the given [name].
SetterElement? getSetter2(String name);
}

/// The portion of an [InstanceElement2] contributed by a single declaration.
Expand Down
21 changes: 21 additions & 0 deletions pkg/analyzer/lib/error/listener.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:analyzer/dart/ast/ast.dart'
import 'package:analyzer/dart/ast/syntactic_entity.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/diagnostic/diagnostic.dart';
import 'package:analyzer/error/error.dart';
Expand All @@ -15,6 +16,7 @@ import 'package:analyzer/src/dart/element/extensions.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/diagnostic/diagnostic.dart';
import 'package:analyzer/src/utilities/extensions/collection.dart';
import 'package:analyzer/src/utilities/extensions/element.dart';
import 'package:meta/meta.dart';
import 'package:source_span/source_span.dart';

Expand Down Expand Up @@ -116,6 +118,25 @@ class ErrorReporter {
);
}

/// Report an error with the given [errorCode] and [arguments].
/// The [element] is used to compute the location of the error.
@experimental
void atElement2(
Element2 element,
ErrorCode errorCode, {
List<Object>? arguments,
List<DiagnosticMessage>? contextMessages,
Object? data,
}) {
atElement(
element.asElement!,
errorCode,
arguments: arguments,
contextMessages: contextMessages,
data: data,
);
}

/// Report an error with the given [errorCode] and [arguments].
/// The [entity] is used to compute the location of the error.
void atEntity(
Expand Down
28 changes: 26 additions & 2 deletions pkg/analyzer/lib/src/dart/element/element.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3789,6 +3789,11 @@ abstract class ExecutableElementImpl2 extends FunctionTypedElementImpl2
implements ExecutableElement2 {
@override
ExecutableElement2 get baseElement => this;

bool get invokesSuperSelf {
var firstFragment = this.firstFragment as ExecutableElementImpl;
return firstFragment.hasModifier(Modifier.INVOKES_SUPER_SELF);
}
}

/// A concrete implementation of an [ExtensionElement].
Expand Down Expand Up @@ -5477,6 +5482,11 @@ abstract class InstanceElementImpl2 extends ElementImpl2
return null;
}

@override
FieldElement2? getField2(String name) {
return fields2.firstWhereOrNull((e) => e.name3 == name);
}

@override
PropertyAccessorElement? getGetter(String name) {
var length = accessors.length;
Expand All @@ -5489,6 +5499,11 @@ abstract class InstanceElementImpl2 extends ElementImpl2
return null;
}

@override
GetterElement? getGetter2(String name) {
return getters2.firstWhereOrNull((e) => e.name3 == name);
}

@override
MethodElement? getMethod(String name) {
var length = methods.length;
Expand All @@ -5501,6 +5516,11 @@ abstract class InstanceElementImpl2 extends ElementImpl2
return null;
}

@override
MethodElement2? getMethod2(String name) {
return methods2.firstWhereOrNull((e) => e.name3 == name);
}

@override
PropertyAccessorElement? getSetter(String name) {
if (!name.endsWith('=')) {
Expand All @@ -5510,6 +5530,11 @@ abstract class InstanceElementImpl2 extends ElementImpl2
(accessor) => accessor.isSetter && accessor.name == name);
}

@override
SetterElement? getSetter2(String name) {
return setters2.firstWhereOrNull((e) => e.name3 == name);
}

@override
bool isAccessibleIn2(LibraryElement2 library) =>
firstFragment.isAccessibleIn(library as LibraryElement);
Expand Down Expand Up @@ -7058,8 +7083,7 @@ class LocalFunctionElementImpl extends ExecutableElementImpl2
Element2? get enclosingElement2 => null;

@override
LocalFunctionFragment get firstFragment =>
_wrappedElement as LocalFunctionFragment;
FunctionElementImpl get firstFragment => _wrappedElement;

@override
List<FormalParameterElement> get formalParameters =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,10 @@ class TypeSystemOperations
@override
TypeClassification classifyType(SharedTypeView<DartType> type) {
DartType unwrapped = type.unwrapTypeView();
if (isSubtypeOfInternal(unwrapped, typeSystem.typeProvider.objectType)) {
if (type is InvalidType) {
return TypeClassification.potentiallyNullable;
} else if (isSubtypeOfInternal(
unwrapped, typeSystem.typeProvider.objectType)) {
return TypeClassification.nonNullable;
} else if (isSubtypeOfInternal(
unwrapped, typeSystem.typeProvider.nullType)) {
Expand Down
10 changes: 5 additions & 5 deletions pkg/analyzer/lib/src/error/error_handler_verifier.dart
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ class ErrorHandlerVerifier {
);
}

var parameters = expressionType.parameters;
var parameters = expressionType.formalParameters;
if (parameters.isEmpty) {
return report();
}
Expand Down Expand Up @@ -226,8 +226,8 @@ class ErrorHandlerVerifier {
var callbackType = callback.staticType as FunctionType;
_checkErrorHandlerFunctionType(
callback, callbackType, expectedReturnType);
var catchErrorOnErrorExecutable = EnclosingExecutableContext(
callback.declaredElement,
var catchErrorOnErrorExecutable = EnclosingExecutableContext.tmp(
callback.declaredElement2,
isAsynchronous: true,
catchErrorOnErrorReturnType: expectedReturnType);
var returnStatementVerifier =
Expand Down Expand Up @@ -263,8 +263,8 @@ class ErrorHandlerVerifier {
/// the 'dart:async' library.
bool _isDartCoreAsyncType(DartType type, String typeName) =>
type is InterfaceType &&
type.element.name == typeName &&
type.element.library.isDartAsync;
type.element3.name3 == typeName &&
type.element3.library2.isDartAsync;
}

/// Visits a function body, looking for return statements.
Expand Down
103 changes: 55 additions & 48 deletions pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// 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.

import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
Expand All @@ -22,59 +22,59 @@ class GetterSetterTypesVerifier {
}) : _typeSystem = typeSystem,
_errorReporter = errorReporter;

void checkExtension(ExtensionElement element) {
for (var getter in element.accessors) {
if (getter.isGetter) {
_checkLocalGetter(getter);
}
void checkExtension(ExtensionElement2 element) {
for (var getter in element.getters2) {
_checkLocalGetter(getter);
}
}

void checkExtensionType(ExtensionTypeElement element, Interface interface) {
void checkExtensionType(ExtensionTypeElement2 element, Interface interface) {
checkInterface(element, interface);
checkStaticAccessors(element.accessors);
checkStaticGetters(element.getters2);
}

void checkInterface(InterfaceElement element, Interface interface) {
var libraryUri = element.library.source.uri;
void checkInterface(InterfaceElement2 element, Interface interface) {
var libraryUri = element.library2.firstFragment.source.uri;

for (var name in interface.map.keys) {
if (!name.isAccessibleFor(libraryUri)) continue;
var interfaceMap = interface.map2;
for (var entry in interfaceMap.entries) {
var getterName = entry.key;
if (!getterName.isAccessibleFor(libraryUri)) continue;

var getter = interface.map[name]!;
var getter = entry.value;
if (getter.kind == ElementKind.GETTER) {
var setter = interface.map[Name(libraryUri, '${name.name}=')];
if (setter != null && setter.parameters.length == 1) {
var setter = interfaceMap[getterName.forSetter];
if (setter != null && setter.formalParameters.length == 1) {
var getterType = getter.returnType;
var setterType = setter.parameters[0].type;
var setterType = setter.formalParameters[0].type;
if (!_typeSystem.isSubtypeOf(getterType, setterType)) {
Element errorElement;
if (getter.enclosingElement3 == element) {
if (element is ExtensionTypeElement &&
element.representation.getter == getter) {
Element2 errorElement;
if (getter.enclosingElement2 == element) {
if (element is ExtensionTypeElement2 &&
element.representation2.getter2 == getter) {
errorElement = setter;
} else {
errorElement = getter;
}
} else if (setter.enclosingElement3 == element) {
} else if (setter.enclosingElement2 == element) {
errorElement = setter;
} else {
errorElement = element;
}

var getterName = getter.displayName;
if (getter.enclosingElement3 != element) {
var getterClassName = getter.enclosingElement3.displayName;
if (getter.enclosingElement2 != element) {
var getterClassName = getter.enclosingElement2!.displayName;
getterName = '$getterClassName.$getterName';
}

var setterName = setter.displayName;
if (setter.enclosingElement3 != element) {
var setterClassName = setter.enclosingElement3.displayName;
if (setter.enclosingElement2 != element) {
var setterClassName = setter.enclosingElement2!.displayName;
setterName = '$setterClassName.$setterName';
}

_errorReporter.atElement(
_errorReporter.atElement2(
errorElement,
CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES,
arguments: [getterName, getterType, setterType, setterName],
Expand All @@ -85,41 +85,48 @@ class GetterSetterTypesVerifier {
}
}

void checkStaticAccessors(List<PropertyAccessorElement> accessors) {
for (var getter in accessors) {
if (getter.isStatic && getter.isGetter) {
void checkStaticGetters(List<GetterElement> getters) {
for (var getter in getters) {
if (getter.isStatic) {
_checkLocalGetter(getter);
}
}
}

void _checkLocalGetter(PropertyAccessorElement getter) {
assert(getter.isGetter);
var setter = getter.correspondingSetter;
if (setter != null) {
var getterType = _getGetterType(getter);
var setterType = _getSetterType(setter);
if (setterType != null) {
if (!_typeSystem.isSubtypeOf(getterType, setterType)) {
var name = getter.name;
_errorReporter.atElement(
getter,
CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES,
arguments: [name, getterType, setterType, name],
);
}
}
void _checkLocalGetter(GetterElement getter) {
var name = getter.name3;
if (name == null) {
return;
}

var setter = getter.variable3?.setter2;
if (setter == null) {
return;
}

var setterType = _getSetterType(setter);
if (setterType == null) {
return;
}

var getterType = _getGetterType(getter);
if (!_typeSystem.isSubtypeOf(getterType, setterType)) {
_errorReporter.atElement2(
getter,
CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES,
arguments: [name, getterType, setterType, name],
);
}
}

/// Return the return type of the [getter].
static DartType _getGetterType(PropertyAccessorElement getter) {
static DartType _getGetterType(GetterElement getter) {
return getter.returnType;
}

/// Return the type of the first parameter of the [setter].
static DartType? _getSetterType(PropertyAccessorElement setter) {
var parameters = setter.parameters;
static DartType? _getSetterType(SetterElement setter) {
var parameters = setter.formalParameters;
if (parameters.isNotEmpty) {
return parameters[0].type;
} else {
Expand Down
2 changes: 1 addition & 1 deletion pkg/analyzer/lib/src/error/inheritance_override.dart
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ class _ClassVerifier {
GetterSetterTypesVerifier(
typeSystem: typeSystem,
errorReporter: reporter,
).checkInterface(declaration, interface);
).checkInterface(fragment.asElement2, interface);

if (declaration is ClassElement && !declaration.isAbstract ||
declaration is EnumElement) {
Expand Down
Loading

0 comments on commit a3b6652

Please sign in to comment.