Version 2.11.0-260.0.dev
Merge commit '8f193a3e8675469f68f7f77cb853f74566ff00da' into 'dev'
diff --git a/pkg/dartdev/lib/dartdev.dart b/pkg/dartdev/lib/dartdev.dart
index 9010a8c..e2648b5 100644
--- a/pkg/dartdev/lib/dartdev.dart
+++ b/pkg/dartdev/lib/dartdev.dart
@@ -184,7 +184,7 @@
}
}
-class DartdevRunner<int> extends CommandRunner {
+class DartdevRunner extends CommandRunner {
@override
final ArgParser argParser =
ArgParser(usageLineLength: dartdevUsageLineLength);
diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart
index 80ef119..e13413f 100644
--- a/pkg/dartdev/lib/src/commands/analyze.dart
+++ b/pkg/dartdev/lib/src/commands/analyze.dart
@@ -14,7 +14,7 @@
import '../sdk.dart';
import '../utils.dart';
-class AnalyzeCommand extends DartdevCommand<int> {
+class AnalyzeCommand extends DartdevCommand {
static const String cmdName = 'analyze';
/// The maximum length of any of the existing severity labels.
diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart
index 491d7ae..9e8f0fe 100644
--- a/pkg/dartdev/lib/src/commands/compile.dart
+++ b/pkg/dartdev/lib/src/commands/compile.dart
@@ -239,7 +239,7 @@
}
}
-abstract class CompileSubcommandCommand extends DartdevCommand<int> {
+abstract class CompileSubcommandCommand extends DartdevCommand {
CompileSubcommandCommand(String name, String description,
{bool hidden = false})
: super(name, description, hidden: hidden);
@@ -252,7 +252,7 @@
);
}
-class CompileCommand extends DartdevCommand<int> {
+class CompileCommand extends DartdevCommand {
static const String cmdName = 'compile';
CompileCommand() : super(cmdName, 'Compile Dart to various formats.') {
diff --git a/pkg/dartdev/lib/src/commands/create.dart b/pkg/dartdev/lib/src/commands/create.dart
index 920de13..647e2f2 100644
--- a/pkg/dartdev/lib/src/commands/create.dart
+++ b/pkg/dartdev/lib/src/commands/create.dart
@@ -16,7 +16,7 @@
import '../sdk.dart';
/// A command to create a new project from a set of templates.
-class CreateCommand extends DartdevCommand<int> {
+class CreateCommand extends DartdevCommand {
static const String cmdName = 'create';
static String defaultTemplateId = 'console-simple';
diff --git a/pkg/dartdev/lib/src/commands/fix.dart b/pkg/dartdev/lib/src/commands/fix.dart
index 7fd3750..718c215 100644
--- a/pkg/dartdev/lib/src/commands/fix.dart
+++ b/pkg/dartdev/lib/src/commands/fix.dart
@@ -15,7 +15,7 @@
import '../sdk.dart';
import '../utils.dart';
-class FixCommand extends DartdevCommand<int> {
+class FixCommand extends DartdevCommand {
static const String cmdName = 'fix';
// This command is hidden as its currently experimental.
diff --git a/pkg/dartdev/lib/src/commands/pub.dart b/pkg/dartdev/lib/src/commands/pub.dart
index c30bc61..9d1da3f 100644
--- a/pkg/dartdev/lib/src/commands/pub.dart
+++ b/pkg/dartdev/lib/src/commands/pub.dart
@@ -13,7 +13,7 @@
import '../sdk.dart';
import '../vm_interop_handler.dart';
-class PubCommand extends DartdevCommand<int> {
+class PubCommand extends DartdevCommand {
static const String cmdName = 'pub';
PubCommand() : super(cmdName, 'Work with packages.');
diff --git a/pkg/dartdev/lib/src/commands/run.dart b/pkg/dartdev/lib/src/commands/run.dart
index 03df87d..f7aa5d6 100644
--- a/pkg/dartdev/lib/src/commands/run.dart
+++ b/pkg/dartdev/lib/src/commands/run.dart
@@ -18,7 +18,7 @@
import '../utils.dart';
import '../vm_interop_handler.dart';
-class RunCommand extends DartdevCommand<int> {
+class RunCommand extends DartdevCommand {
static const String cmdName = 'run';
// kErrorExitCode, as defined in runtime/bin/error_exit.h
diff --git a/pkg/dartdev/lib/src/commands/test.dart b/pkg/dartdev/lib/src/commands/test.dart
index beba8c8..167a6dc 100644
--- a/pkg/dartdev/lib/src/commands/test.dart
+++ b/pkg/dartdev/lib/src/commands/test.dart
@@ -16,7 +16,7 @@
/// Implement `dart test`.
///
/// This command largely delegates to `pub run test`.
-class TestCommand extends DartdevCommand<int> {
+class TestCommand extends DartdevCommand {
static const String cmdName = 'test';
TestCommand() : super(cmdName, 'Run tests in this package.');
diff --git a/pkg/dartdev/lib/src/core.dart b/pkg/dartdev/lib/src/core.dart
index 5694415..4a98629 100644
--- a/pkg/dartdev/lib/src/core.dart
+++ b/pkg/dartdev/lib/src/core.dart
@@ -20,7 +20,7 @@
Logger log;
bool isDiagnostics = false;
-abstract class DartdevCommand<int> extends Command {
+abstract class DartdevCommand extends Command {
final String _name;
final String _description;
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 5584775..04790c5 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -18,6 +18,7 @@
import '../kernel/class_hierarchy_builder.dart';
import '../kernel/kernel_builder.dart' show ImplicitFieldType;
import '../kernel/late_lowering.dart' as late_lowering;
+import '../kernel/member_covariance.dart';
import '../modifier.dart' show covariantMask, hasInitializerMask, lateMask;
@@ -697,6 +698,8 @@
@override
final SourceFieldBuilder memberBuilder;
+ Covariance _covariance;
+
@override
final bool forSetter;
@@ -720,6 +723,13 @@
}
@override
+ Covariance getCovariance(ClassHierarchyBuilder hierarchy) {
+ return _covariance ??= forSetter
+ ? new Covariance.fromMember(getMember(hierarchy), forSetter: forSetter)
+ : const Covariance.empty();
+ }
+
+ @override
bool get isSourceDeclaration => true;
@override
@@ -1325,6 +1335,8 @@
final Member _member;
+ Covariance _covariance;
+
@override
final bool forSetter;
@@ -1341,6 +1353,12 @@
}
@override
+ Covariance getCovariance(ClassHierarchyBuilder hierarchy) {
+ return _covariance ??=
+ new Covariance.fromMember(getMember(hierarchy), forSetter: forSetter);
+ }
+
+ @override
void inferType(ClassHierarchyBuilder hierarchy) {
fieldBuilder._ensureType(hierarchy);
}
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index d31c661..2ac1790 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -251,9 +251,6 @@
bool get isStatic => memberBuilder.isStatic;
@override
- Member getMember(ClassHierarchyBuilder hierarchy) => memberBuilder.member;
-
- @override
bool isObjectMember(ClassBuilder objectClass) {
return classBuilder == objectClass;
}
diff --git a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
index 654aef2..1b81273 100644
--- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
@@ -13,6 +13,7 @@
import '../kernel/class_hierarchy_builder.dart';
import '../kernel/forest.dart';
import '../kernel/internal_ast.dart';
+import '../kernel/member_covariance.dart';
import '../kernel/redirecting_factory_body.dart' show RedirectingFactoryBody;
import '../loader.dart' show Loader;
@@ -593,6 +594,8 @@
@override
final SourceProcedureBuilder memberBuilder;
+ Covariance _covariance;
+
SourceProcedureMember(this.memberBuilder);
@override
@@ -615,6 +618,12 @@
}
@override
+ Covariance getCovariance(ClassHierarchyBuilder hierarchy) {
+ return _covariance ??=
+ new Covariance.fromMember(getMember(hierarchy), forSetter: forSetter);
+ }
+
+ @override
bool get forSetter => isSetter;
@override
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
index c22b13b..700d6a9 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
@@ -13,6 +13,7 @@
import '../kernel/class_hierarchy_builder.dart'
show ClassHierarchyBuilder, ClassMember;
+import '../kernel/member_covariance.dart';
import '../kernel/kernel_builder.dart'
show isRedirectingGenerativeConstructorImplementation;
@@ -223,6 +224,8 @@
@override
final DillMemberBuilder memberBuilder;
+ Covariance _covariance;
+
@override
final bool forSetter;
@@ -253,6 +256,15 @@
}
@override
+ Member getMember(ClassHierarchyBuilder hierarchy) => memberBuilder.member;
+
+ @override
+ Covariance getCovariance(ClassHierarchyBuilder hierarchy) {
+ return _covariance ??=
+ new Covariance.fromMember(memberBuilder.member, forSetter: forSetter);
+ }
+
+ @override
bool get isFunction => !isProperty;
@override
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 73e6525..ff35840 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -2070,11 +2070,8 @@
Name n = new Name(name, libraryBuilder.nameOrigin);
if (!isQualified && isDeclarationInstanceContext) {
assert(declaration == null);
- if (inLateFieldInitializer) {
- // Implicit access on 'this' is allowed in a late field initializer.
- return new ThisPropertyAccessGenerator(this, token, n);
- }
- if (constantContext != ConstantContext.none || member.isField) {
+ if (constantContext != ConstantContext.none ||
+ (inFieldInitializer && !inLateFieldInitializer) && !inInitializer) {
return new UnresolvedNameGenerator(this, token, n);
}
if (extensionThis != null) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index 88124b4..ef7586e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -81,6 +81,8 @@
import 'combined_member_signature.dart';
+import 'member_covariance.dart';
+
import 'forwarding_node.dart' show ForwardingNode;
import 'kernel_builder.dart' show ImplicitFieldType;
@@ -233,6 +235,10 @@
/// Returns `true` if this member is a field, getter or setter.
bool get isProperty;
Member getMember(ClassHierarchyBuilder hierarchy);
+
+ /// Returns the member [Covariance] for this class member.
+ Covariance getCovariance(ClassHierarchyBuilder hierarchy);
+
bool get isDuplicate;
String get fullName;
String get fullNameForErrors;
@@ -978,84 +984,10 @@
assert(!declaredMember.isGetter && !declaredMember.isSetter);
// Trigger computation of method type.
Procedure declaredProcedure = declaredMember.getMember(hierarchy);
- FunctionNode declaredFunction = declaredProcedure.function;
- List<TypeParameter> declaredTypeParameters =
- declaredFunction.typeParameters;
- List<VariableDeclaration> declaredPositional =
- declaredFunction.positionalParameters;
- List<VariableDeclaration> declaredNamed = declaredFunction.namedParameters;
for (ClassMember overriddenMember
in toSet(declaredMember.classBuilder, overriddenMembers)) {
- Member bMember = overriddenMember.getMember(hierarchy);
- if (bMember is! Procedure) {
- debug?.log("Giving up 1");
- continue;
- }
- Procedure bProcedure = bMember;
- FunctionNode bFunction = bProcedure.function;
-
- List<TypeParameter> bTypeParameters = bFunction.typeParameters;
- int typeParameterCount = declaredTypeParameters.length;
- if (typeParameterCount != bTypeParameters.length) {
- debug?.log("Giving up 2");
- continue;
- }
- if (typeParameterCount != 0) {
- for (int i = 0; i < typeParameterCount; i++) {
- copyTypeParameterCovariance(declaredMember.classBuilder,
- declaredTypeParameters[i], bTypeParameters[i]);
- }
- }
-
- if (declaredFunction.requiredParameterCount >
- bFunction.requiredParameterCount) {
- debug?.log("Giving up 4");
- continue;
- }
- List<VariableDeclaration> bPositional = bFunction.positionalParameters;
- if (declaredPositional.length < bPositional.length) {
- debug?.log("Giving up 5");
- continue;
- }
-
- for (int i = 0; i < bPositional.length; i++) {
- VariableDeclaration aParameter = declaredPositional[i];
- VariableDeclaration bParameter = bPositional[i];
- copyParameterCovariance(
- declaredMember.classBuilder, aParameter, bParameter);
- }
-
- List<VariableDeclaration> bNamed = bFunction.namedParameters;
- named:
- if (declaredNamed.isNotEmpty || bNamed.isNotEmpty) {
- if (declaredPositional.length != bPositional.length) {
- debug?.log("Giving up 9");
- break named;
- }
- if (declaredFunction.requiredParameterCount !=
- bFunction.requiredParameterCount) {
- debug?.log("Giving up 10");
- break named;
- }
-
- declaredNamed = declaredNamed.toList()..sort(compareNamedParameters);
- bNamed = bNamed.toList()..sort(compareNamedParameters);
- int aCount = 0;
- for (int bCount = 0; bCount < bNamed.length; bCount++) {
- String name = bNamed[bCount].name;
- for (; aCount < declaredNamed.length; aCount++) {
- if (declaredNamed[aCount].name == name) break;
- }
- if (aCount == declaredNamed.length) {
- debug?.log("Giving up 11");
- break named;
- }
- VariableDeclaration aParameter = declaredNamed[aCount];
- VariableDeclaration bParameter = bNamed[bCount];
- copyParameterCovariance(
- declaredMember.classBuilder, aParameter, bParameter);
- }
- }
+ Covariance covariance = overriddenMember.getCovariance(hierarchy);
+ covariance.applyCovariance(declaredProcedure);
}
}
@@ -1072,30 +1004,10 @@
assert(declaredMember.isSetter);
// Trigger computation of the getter type.
Procedure declaredSetter = declaredMember.getMember(hierarchy);
- VariableDeclaration setterParameter =
- declaredSetter.function.positionalParameters.single;
for (ClassMember overriddenMember
in toSet(declaredMember.classBuilder, overriddenMembers)) {
- Member bTarget = overriddenMember.getMember(hierarchy);
- if (bTarget is Field) {
- copyParameterCovarianceFromField(
- declaredMember.classBuilder, setterParameter, bTarget);
- } else if (bTarget is Procedure) {
- if (overriddenMember.isSetter) {
- VariableDeclaration bParameter =
- bTarget.function.positionalParameters.single;
- copyParameterCovariance(
- declaredMember.classBuilder, setterParameter, bParameter);
- } else if (overriddenMember.isGetter) {
- // No variance to copy from getter.
- } else {
- debug?.log("Giving up (not accessor: ${bTarget.kind})");
- continue;
- }
- } else {
- debug?.log("Giving up (not field/procedure: ${bTarget.runtimeType})");
- return;
- }
+ Covariance covariance = overriddenMember.getCovariance(hierarchy);
+ covariance.applyCovariance(declaredSetter);
}
}
@@ -1546,74 +1458,8 @@
Field declaredField = declaredMember.getMember(hierarchy);
for (ClassMember overriddenMember
in toSet(declaredMember.classBuilder, overriddenMembers)) {
- Member bTarget = overriddenMember.getMember(hierarchy);
- if (bTarget is Procedure) {
- if (bTarget.isSetter) {
- VariableDeclaration parameter =
- bTarget.function.positionalParameters.single;
- copyFieldCovarianceFromParameter(
- declaredMember.classBuilder, declaredField, parameter);
- }
- } else if (bTarget is Field) {
- copyFieldCovariance(
- declaredMember.classBuilder, declaredField, bTarget);
- }
- }
- }
-
- void copyParameterCovariance(Builder parent, VariableDeclaration aParameter,
- VariableDeclaration bParameter) {
- if (parent == classBuilder) {
- if (bParameter.isCovariant) {
- aParameter.isCovariant = true;
- }
- if (bParameter.isGenericCovariantImpl) {
- aParameter.isGenericCovariantImpl = true;
- }
- }
- }
-
- void copyParameterCovarianceFromField(
- Builder parent, VariableDeclaration aParameter, Field bField) {
- if (parent == classBuilder) {
- if (bField.isCovariant) {
- aParameter.isCovariant = true;
- }
- if (bField.isGenericCovariantImpl) {
- aParameter.isGenericCovariantImpl = true;
- }
- }
- }
-
- void copyFieldCovariance(Builder parent, Field aField, Field bField) {
- if (parent == classBuilder) {
- if (bField.isCovariant) {
- aField.isCovariant = true;
- }
- if (bField.isGenericCovariantImpl) {
- aField.isGenericCovariantImpl = true;
- }
- }
- }
-
- void copyFieldCovarianceFromParameter(
- Builder parent, Field aField, VariableDeclaration bParameter) {
- if (parent == classBuilder) {
- if (bParameter.isCovariant) {
- aField.isCovariant = true;
- }
- if (bParameter.isGenericCovariantImpl) {
- aField.isGenericCovariantImpl = true;
- }
- }
- }
-
- void copyTypeParameterCovariance(
- Builder parent, TypeParameter aParameter, TypeParameter bParameter) {
- if (parent == classBuilder) {
- if (bParameter.isGenericCovariantImpl) {
- aParameter.isGenericCovariantImpl = true;
- }
+ Covariance covariance = overriddenMember.getCovariance(hierarchy);
+ covariance.applyCovariance(declaredField);
}
}
@@ -3146,7 +2992,8 @@
/// has conflicts with methods inherited from an interface. The concrete
/// implementation is the first element of [declarations].
class InheritedImplementationInterfaceConflict extends DelayedMember {
- Member combinedMemberSignatureResult;
+ Member _member;
+ Covariance _covariance;
final ClassMember concreteMember;
@override
@@ -3193,25 +3040,36 @@
isInheritableConflict == other.isInheritableConflict;
}
- @override
- Member getMember(ClassHierarchyBuilder hierarchy) {
- if (combinedMemberSignatureResult != null) {
- return combinedMemberSignatureResult;
- }
- if (!classBuilder.isAbstract) {
- if (classBuilder is SourceClassBuilder) {
- for (int i = 0; i < declarations.length; i++) {
- if (concreteMember != declarations[i]) {
- new DelayedOverrideCheck(
- classBuilder, concreteMember, declarations[i])
- .check(hierarchy);
+ void _ensureMemberAndCovariance(ClassHierarchyBuilder hierarchy) {
+ if (_member == null) {
+ if (!classBuilder.isAbstract) {
+ if (classBuilder is SourceClassBuilder) {
+ for (int i = 0; i < declarations.length; i++) {
+ if (concreteMember != declarations[i]) {
+ new DelayedOverrideCheck(
+ classBuilder, concreteMember, declarations[i])
+ .check(hierarchy);
+ }
}
}
}
+ InterfaceConflict interfaceConflict = new InterfaceConflict(classBuilder,
+ declarations, isProperty, isSetter, modifyKernel, isAbstract, name);
+ _member = interfaceConflict.getMember(hierarchy);
+ _covariance = interfaceConflict.getCovariance(hierarchy);
}
- return combinedMemberSignatureResult = new InterfaceConflict(classBuilder,
- declarations, isProperty, isSetter, modifyKernel, isAbstract, name)
- .getMember(hierarchy);
+ }
+
+ @override
+ Member getMember(ClassHierarchyBuilder hierarchy) {
+ _ensureMemberAndCovariance(hierarchy);
+ return _member;
+ }
+
+ @override
+ Covariance getCovariance(ClassHierarchyBuilder hierarchy) {
+ _ensureMemberAndCovariance(hierarchy);
+ return _covariance;
}
@override
@@ -3288,7 +3146,8 @@
@override
bool get isAbstract => isExplicitlyAbstract || isImplicitlyAbstract;
- Member combinedMemberSignatureResult;
+ Member _member;
+ Covariance _covariance;
@override
String toString() {
@@ -3314,14 +3173,14 @@
isImplicitlyAbstract == other.isImplicitlyAbstract;
}
- @override
- Member getMember(ClassHierarchyBuilder hierarchy) {
- if (combinedMemberSignatureResult != null) {
- return combinedMemberSignatureResult;
+ void _ensureMemberAndCovariance(ClassHierarchyBuilder hierarchy) {
+ if (_member != null) {
+ return;
}
if (classBuilder.library is! SourceLibraryBuilder) {
- return combinedMemberSignatureResult =
- declarations.first.getMember(hierarchy);
+ _member = declarations.first.getMember(hierarchy);
+ _covariance = declarations.first.getCovariance(hierarchy);
+ return;
}
CombinedClassMemberSignature combinedMemberSignature =
@@ -3345,8 +3204,9 @@
context: context);
// TODO(johnniwinther): Maybe we should have an invalid marker to avoid
// cascading errors.
- return combinedMemberSignatureResult =
- declarations.first.getMember(hierarchy);
+ _member = declarations.first.getMember(hierarchy);
+ _covariance = declarations.first.getCovariance(hierarchy);
+ return;
}
debug?.log("Combined Member Signature of ${fullNameForErrors}: "
"${combinedMemberSignature.canonicalMember.fullName}");
@@ -3368,7 +3228,7 @@
"$declarations, $kind)");
Member stub =
new ForwardingNode(combinedMemberSignature, kind).finalize();
- if (classBuilder.cls == stub.enclosingClass) {
+ if (stub != null && classBuilder.cls == stub.enclosingClass) {
classBuilder.cls.addMember(stub);
SourceLibraryBuilder library = classBuilder.library;
Member bestMemberSoFar =
@@ -3378,14 +3238,34 @@
}
debug?.log("Combined Member Signature of ${fullNameForErrors}: "
"added stub $stub");
- return combinedMemberSignatureResult = stub;
+ _member = stub;
+ _covariance = combinedMemberSignature.combinedMemberSignatureCovariance;
+ assert(
+ _covariance ==
+ new Covariance.fromMember(_member, forSetter: forSetter),
+ "Unexpected covariance for combined members signature "
+ "$_member. Found $_covariance, expected "
+ "${new Covariance.fromMember(_member, forSetter: forSetter)}.");
+ return;
}
}
debug?.log(
"Combined Member Signature of ${fullNameForErrors}: picked bestSoFar");
- return combinedMemberSignatureResult =
- combinedMemberSignature.canonicalMember.getMember(hierarchy);
+ _member = combinedMemberSignature.canonicalMember.getMember(hierarchy);
+ _covariance = combinedMemberSignature.combinedMemberSignatureCovariance;
+ }
+
+ @override
+ Member getMember(ClassHierarchyBuilder hierarchy) {
+ _ensureMemberAndCovariance(hierarchy);
+ return _member;
+ }
+
+ @override
+ Covariance getCovariance(ClassHierarchyBuilder hierarchy) {
+ _ensureMemberAndCovariance(hierarchy);
+ return _covariance;
}
@override
@@ -3464,8 +3344,7 @@
bool _isChecked = false;
- @override
- Member getMember(ClassHierarchyBuilder hierarchy) {
+ void _ensureMemberAndCovariance(ClassHierarchyBuilder hierarchy) {
if (!_isChecked) {
_isChecked = true;
if (!classBuilder.isAbstract &&
@@ -3492,10 +3371,21 @@
.finalize();
}
}
+ }
+
+ @override
+ Member getMember(ClassHierarchyBuilder hierarchy) {
+ _ensureMemberAndCovariance(hierarchy);
return abstractMember.getMember(hierarchy);
}
@override
+ Covariance getCovariance(ClassHierarchyBuilder hierarchy) {
+ _ensureMemberAndCovariance(hierarchy);
+ return abstractMember.getCovariance(hierarchy);
+ }
+
+ @override
DelayedMember withParent(ClassBuilder parent) {
return parent == this.classBuilder
? this
diff --git a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
index 54f0dbd..5bc4ffe 100644
--- a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
@@ -2,8 +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.
-library fasta.class_hierarchy_builder;
-
import 'package:kernel/ast.dart' hide MapEntry;
import 'package:kernel/class_hierarchy.dart' show ClassHierarchyBase;
@@ -23,6 +21,7 @@
import '../source/source_class_builder.dart';
import 'class_hierarchy_builder.dart';
+import 'member_covariance.dart';
/// Class used for computing and inspecting the combined member signature for
/// a set of overridden/inherited members.
@@ -66,6 +65,8 @@
/// Cache for the types of [members] as inherited into [classBuilder].
List<DartType> _memberTypes;
+ List<Covariance> _memberCovariances;
+
/// Cache for the this type of [classBuilder].
DartType _thisType;
@@ -80,9 +81,19 @@
/// If the combined member signature type is undefined this is set to `null`.
DartType _combinedMemberSignatureType;
- /// Accumulated result for [neededLegacyErasure]. This is fully computed when
- /// [combinedMemberSignatureType] has been computed.
- bool _neededLegacyErasure = false;
+ /// The indices for the members whose type needed legacy erasure.
+ ///
+ /// This is fully computed when [combinedMemberSignatureType] has been
+ /// computed.
+ Set<int> _neededLegacyErasureIndices;
+
+ bool _neededNnbdTopMerge = false;
+
+ bool _needsCovarianceMerging = false;
+
+ bool _isCombinedMemberSignatureCovarianceComputed = false;
+
+ Covariance _combinedMemberSignatureCovariance;
/// Creates a [CombinedClassMemberSignature] whose canonical member is already
/// defined.
@@ -201,7 +212,25 @@
/// different type.
bool get neededLegacyErasure {
_ensureCombinedMemberSignatureType();
- return _neededLegacyErasure;
+ return _neededLegacyErasureIndices?.contains(canonicalMemberIndex) ?? false;
+ }
+
+ /// Returns `true` if nnbd top merge and normalization was needed to compute
+ /// the combined member signature type.
+ bool get neededNnbdTopMerge {
+ _ensureCombinedMemberSignatureType();
+ return _neededNnbdTopMerge;
+ }
+
+ /// Returns `true` if the covariance of the combined member signature is
+ /// different from the covariance of the overridden member in the superclass.
+ ///
+ /// If `true` a concrete forwarding stub that checks the covariance must
+ /// be generated.
+ // TODO(johnniwinther): This is imprecise. It assumes that the 0th member is
+ // from the superclass which might not be the case.
+ bool get needsSuperImpl {
+ return _getMemberCovariance(0) != combinedMemberSignatureCovariance;
}
/// The this type of [classBuilder].
@@ -210,6 +239,18 @@
classBuilder.cls, classBuilder.library.nonNullable);
}
+ /// Returns `true` if the canonical member is declared in [classBuilder].
+ bool get isCanonicalMemberDeclared {
+ return _canonicalMemberIndex != null &&
+ _getMember(_canonicalMemberIndex).enclosingClass == classBuilder.cls;
+ }
+
+ /// Returns `true` if the canonical member is the 0th.
+ // TODO(johnniwinther): This is currently used under the assumption that the
+ // 0th member is either from the superclass or the one found if looked up
+ // the class hierarchy. This is a very brittle assumption.
+ bool get isCanonicalMemberFirst => _canonicalMemberIndex == 0;
+
/// Returns type of the [index]th member in [members] as inherited in
/// [classBuilder].
DartType getMemberType(int index) {
@@ -223,7 +264,8 @@
if (!classBuilder.library.isNonNullableByDefault) {
DartType legacyErasure = rawLegacyErasure(_coreTypes, candidateType);
if (legacyErasure != null) {
- _neededLegacyErasure = true;
+ _neededLegacyErasureIndices ??= {};
+ _neededLegacyErasureIndices.add(index);
candidateType = legacyErasure;
}
}
@@ -239,7 +281,8 @@
return null;
}
if (classBuilder.library.isNonNullableByDefault) {
- _combinedMemberSignatureType = getMemberType(_canonicalMemberIndex);
+ DartType canonicalMemberType =
+ _combinedMemberSignatureType = getMemberType(_canonicalMemberIndex);
if (_mutualSubtypes != null) {
_combinedMemberSignatureType =
norm(_coreTypes, _combinedMemberSignatureType);
@@ -251,6 +294,8 @@
norm(_coreTypes, getMemberType(index)));
}
}
+ _neededNnbdTopMerge =
+ canonicalMemberType != _combinedMemberSignatureType;
}
} else {
_combinedMemberSignatureType = getMemberType(_canonicalMemberIndex);
@@ -264,6 +309,47 @@
return _combinedMemberSignatureType;
}
+ Covariance _getMemberCovariance(int index);
+
+ void _ensureCombinedMemberSignatureCovariance() {
+ if (!_isCombinedMemberSignatureCovarianceComputed) {
+ _isCombinedMemberSignatureCovarianceComputed = true;
+ if (canonicalMemberIndex == null) {
+ return;
+ }
+ Covariance canonicalMemberCovariance =
+ _combinedMemberSignatureCovariance =
+ _getMemberCovariance(canonicalMemberIndex);
+ if (members.length == 1) {
+ return;
+ }
+ for (int index = 0; index < members.length; index++) {
+ if (index != canonicalMemberIndex) {
+ _combinedMemberSignatureCovariance =
+ _combinedMemberSignatureCovariance
+ .merge(_getMemberCovariance(index));
+ }
+ }
+ _needsCovarianceMerging =
+ canonicalMemberCovariance != _combinedMemberSignatureCovariance;
+ }
+ }
+
+ // Returns `true` if the covariance of [members] needs to be merged into
+ // the combined member signature.
+ bool get needsCovarianceMerging {
+ if (members.length != 1) {
+ _ensureCombinedMemberSignatureCovariance();
+ }
+ return _needsCovarianceMerging;
+ }
+
+ /// Returns [Covariance] for the combined member signature.
+ Covariance get combinedMemberSignatureCovariance {
+ _ensureCombinedMemberSignatureCovariance();
+ return _combinedMemberSignatureCovariance;
+ }
+
/// Returns the type of the combined member signature, if defined, with
/// all method type parameters substituted with [typeParameters].
///
@@ -316,25 +402,30 @@
return null;
}
Member member = _getMember(canonicalMemberIndex);
+ Procedure combinedMemberSignature;
if (member is Procedure) {
switch (member.kind) {
case ProcedureKind.Getter:
- return _createGetterMemberSignature(
+ combinedMemberSignature = _createGetterMemberSignature(
member, combinedMemberSignatureType,
copyLocation: copyLocation);
+ break;
case ProcedureKind.Setter:
VariableDeclaration parameter =
member.function.positionalParameters.first;
- return _createSetterMemberSignature(
+ combinedMemberSignature = _createSetterMemberSignature(
member, combinedMemberSignatureType,
isGenericCovariantImpl: parameter.isGenericCovariantImpl,
isCovariant: parameter.isCovariant,
parameterName: parameter.name,
copyLocation: copyLocation);
+ break;
case ProcedureKind.Method:
case ProcedureKind.Operator:
- return _createMethodSignature(member, combinedMemberSignatureType,
+ combinedMemberSignature = _createMethodSignature(
+ member, combinedMemberSignatureType,
copyLocation: copyLocation);
+ break;
case ProcedureKind.Factory:
default:
throw new UnsupportedError(
@@ -342,18 +433,22 @@
}
} else if (member is Field) {
if (forSetter) {
- return _createSetterMemberSignature(member, combinedMemberSignatureType,
+ combinedMemberSignature = _createSetterMemberSignature(
+ member, combinedMemberSignatureType,
isGenericCovariantImpl: member.isGenericCovariantImpl,
isCovariant: member.isCovariant,
copyLocation: copyLocation);
} else {
- return _createGetterMemberSignature(member, combinedMemberSignatureType,
+ combinedMemberSignature = _createGetterMemberSignature(
+ member, combinedMemberSignatureType,
copyLocation: copyLocation);
}
} else {
throw new UnsupportedError(
'Unexpected canonical member $member (${member.runtimeType})');
}
+ combinedMemberSignatureCovariance.applyCovariance(combinedMemberSignature);
+ return combinedMemberSignature;
}
/// Creates a getter member signature for [member] with the given
@@ -377,17 +472,22 @@
fileOffset = member.fileOffset;
} else {
fileUri = enclosingClass.fileUri;
- startFileOffset = fileOffset = enclosingClass.fileOffset;
+ fileOffset = startFileOffset = enclosingClass.fileOffset;
}
- return new Procedure(member.name, ProcedureKind.Getter,
- new FunctionNode(null, returnType: type),
- isAbstract: true,
- isMemberSignature: true,
- fileUri: fileUri,
- memberSignatureOrigin: member.memberSignatureOrigin ?? member,
- reference: referenceFrom?.reference)
+ return new Procedure(
+ member.name,
+ ProcedureKind.Getter,
+ new FunctionNode(null, returnType: type),
+ isAbstract: true,
+ isMemberSignature: true,
+ fileUri: fileUri,
+ memberSignatureOrigin: member.memberSignatureOrigin ?? member,
+ reference: referenceFrom?.reference,
+ )
..startFileOffset = startFileOffset
..fileOffset = fileOffset
+ ..isNonNullableByDefault =
+ enclosingClass.enclosingLibrary.isNonNullableByDefault
..parent = enclosingClass;
}
@@ -418,7 +518,7 @@
fileOffset = member.fileOffset;
} else {
fileUri = enclosingClass.fileUri;
- startFileOffset = fileOffset = enclosingClass.fileOffset;
+ fileOffset = startFileOffset = enclosingClass.fileOffset;
}
return new Procedure(
member.name,
@@ -437,6 +537,8 @@
reference: referenceFrom?.reference)
..startFileOffset = startFileOffset
..fileOffset = fileOffset
+ ..isNonNullableByDefault =
+ enclosingClass.enclosingLibrary.isNonNullableByDefault
..parent = enclosingClass;
}
@@ -458,7 +560,7 @@
fileOffset = procedure.fileOffset;
} else {
fileUri = enclosingClass.fileUri;
- startFileOffset = fileOffset = enclosingClass.fileOffset;
+ fileOffset = startFileOffset = enclosingClass.fileOffset;
}
FunctionNode function = procedure.function;
List<VariableDeclaration> positionalParameters = [];
@@ -511,6 +613,8 @@
reference: referenceFrom?.reference)
..startFileOffset = startFileOffset
..fileOffset = fileOffset
+ ..isNonNullableByDefault =
+ enclosingClass.enclosingLibrary.isNonNullableByDefault
..parent = enclosingClass;
}
@@ -592,6 +696,15 @@
"No member computed for ${candidate} (${candidate.runtimeType})");
return target;
}
+
+ @override
+ Covariance _getMemberCovariance(int index) {
+ ClassMember candidate = members[index];
+ Covariance covariance = candidate.getCovariance(hierarchy);
+ assert(covariance != null,
+ "No covariance computed for ${candidate} (${candidate.runtimeType})");
+ return covariance;
+ }
}
/// Class used for computing and inspecting the combined member signature for
@@ -615,4 +728,15 @@
@override
Member _getMember(int index) => members[index];
+
+ @override
+ Covariance _getMemberCovariance(int index) {
+ _memberCovariances ??= new List<Covariance>(members.length);
+ Covariance covariance = _memberCovariances[index];
+ if (covariance == null) {
+ _memberCovariances[index] = covariance =
+ new Covariance.fromMember(members[index], forSetter: forSetter);
+ }
+ return covariance;
+ }
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
index 3538b3b..53f6b2d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
@@ -7,9 +7,7 @@
Arguments,
Class,
DartType,
- DynamicType,
Expression,
- Field,
FunctionNode,
Member,
Name,
@@ -20,64 +18,25 @@
SuperMethodInvocation,
SuperPropertyGet,
SuperPropertySet,
- TypeParameter,
TypeParameterType,
- VariableDeclaration,
- VariableGet,
- Variance,
- VoidType;
+ VariableGet;
import 'package:kernel/transformations/flags.dart' show TransformerFlag;
-import "package:kernel/type_algebra.dart" show Substitution;
-
-import "package:kernel/src/legacy_erasure.dart";
-import "package:kernel/src/nnbd_top_merge.dart";
-import "package:kernel/src/norm.dart";
-
import "../source/source_class_builder.dart";
import "../problems.dart" show unhandled;
-import "../type_inference/type_inference_engine.dart"
- show IncludesTypeParametersNonCovariantly;
-
-import "../type_inference/type_inferrer.dart" show getNamedFormal;
-
import 'class_hierarchy_builder.dart';
import 'combined_member_signature.dart';
class ForwardingNode {
- ClassHierarchyBuilder get hierarchy => _combinedMemberSignature.hierarchy;
-
- SourceClassBuilder get classBuilder => _combinedMemberSignature.classBuilder;
-
- // TODO(johnniwinther): Use [_combinedMemberSignature] more directly in
- // the forwarding node computation.
final CombinedClassMemberSignature _combinedMemberSignature;
- ClassMember get combinedMemberSignatureResult =>
- _combinedMemberSignature.canonicalMember;
-
- /// The index of [combinedMemberSignatureResult] in [_candidates].
- int get _combinedMemberIndex => _combinedMemberSignature.canonicalMemberIndex;
-
final ProcedureKind kind;
- /// A list containing the directly implemented and directly inherited
- /// procedures of the class in question.
- List<ClassMember> get _candidates => _combinedMemberSignature.members;
-
- /// The indices of the [_candidates] whose types need to be merged to compute
- /// the resulting member type.
- Set<int> get _mergeIndices => _combinedMemberSignature.mutualSubtypeIndices;
-
ForwardingNode(this._combinedMemberSignature, this.kind);
- Name get name => combinedMemberSignatureResult.name;
-
- Class get enclosingClass => classBuilder.cls;
-
/// Finishes handling of this node by propagating covariance and creating
/// forwarding stubs if necessary.
Member finalize() => _computeCovarianceFixes();
@@ -93,8 +52,12 @@
/// they would not be checked in an inherited implementation, a forwarding
/// stub is introduced as a place to put the checks.
Member _computeCovarianceFixes() {
- Member interfaceMember = combinedMemberSignatureResult.getMember(hierarchy);
- if (_candidates.length == 1) {
+ SourceClassBuilder classBuilder = _combinedMemberSignature.classBuilder;
+ ClassMember canonicalMember = _combinedMemberSignature.canonicalMember;
+ Member interfaceMember =
+ canonicalMember.getMember(_combinedMemberSignature.hierarchy);
+
+ if (_combinedMemberSignature.members.length == 1) {
// Covariance can only come from [interfaceMember] so we never need a
// forwarding stub.
if (_combinedMemberSignature.neededLegacyErasure) {
@@ -108,360 +71,54 @@
}
}
- List<TypeParameter> interfaceMemberTypeParameters =
- interfaceMember.function?.typeParameters ?? [];
-
- List<TypeParameter> stubTypeParameters;
- if (interfaceMember.enclosingClass != enclosingClass &&
- interfaceMemberTypeParameters.isNotEmpty) {
- // Create type parameters for the stub up front. These are needed to
- // ensure the [substitutions] are alpha renamed to the same type
- // parameters.
- stubTypeParameters = new List<TypeParameter>.filled(
- interfaceMemberTypeParameters.length, null);
- for (int i = 0; i < interfaceMemberTypeParameters.length; i++) {
- TypeParameter targetTypeParameter = interfaceMemberTypeParameters[i];
- TypeParameter typeParameter = new TypeParameter(
- targetTypeParameter.name, null)
- ..isGenericCovariantImpl = targetTypeParameter.isGenericCovariantImpl;
- stubTypeParameters[i] = typeParameter;
- }
- }
-
- List<Substitution> substitutions =
- new List<Substitution>(_candidates.length);
- Substitution substitution;
- for (int j = 0; j < _candidates.length; j++) {
- Member otherMember = getCandidateAt(j);
- substitutions[j] =
- _substitutionFor(stubTypeParameters, otherMember, enclosingClass);
- if (otherMember == interfaceMember) {
- substitution = substitutions[j];
- }
- }
- // We always create a forwarding stub when we've inherited a member from an
- // interface other than the first override candidate. This is to work
- // around a bug in the Kernel type checker where it chooses the first
- // override candidate.
- //
- // TODO(kmillikin): Fix the Kernel type checker and stop creating these
- // extra stubs.
- Member stub = interfaceMember.enclosingClass == enclosingClass ||
- interfaceMember == getCandidateAt(0)
- ? interfaceMember
- : _createForwardingStub(
- stubTypeParameters, substitution, interfaceMember);
-
- FunctionNode interfaceFunction = interfaceMember.function;
- List<VariableDeclaration> interfacePositionalParameters =
- getPositionalParameters(interfaceMember);
- List<VariableDeclaration> interfaceNamedParameters =
- interfaceFunction?.namedParameters ?? [];
- List<TypeParameter> interfaceTypeParameters =
- interfaceFunction?.typeParameters ?? [];
-
- void createStubIfNeeded({bool forMemberSignature: false}) {
- if (stub != interfaceMember) {
- Procedure procedure = stub;
- if (forMemberSignature) {
- procedure.isMemberSignature = true;
- procedure.memberSignatureOrigin =
+ bool cannotReuseExistingMember =
+ !(_combinedMemberSignature.isCanonicalMemberFirst ||
+ _combinedMemberSignature.isCanonicalMemberDeclared);
+ bool needsTypeOrCovarianceUpdate =
+ _combinedMemberSignature.neededNnbdTopMerge ||
+ _combinedMemberSignature.neededLegacyErasure ||
+ _combinedMemberSignature.needsCovarianceMerging;
+ bool stubNeeded = cannotReuseExistingMember ||
+ (canonicalMember.classBuilder != classBuilder &&
+ needsTypeOrCovarianceUpdate);
+ if (stubNeeded) {
+ Procedure stub = _combinedMemberSignature.createMemberFromSignature(
+ copyLocation: false);
+ if (_combinedMemberSignature.needsCovarianceMerging ||
+ _combinedMemberSignature.needsSuperImpl) {
+ // This is a forward stub.
+ Member finalTarget;
+ if (interfaceMember is Procedure && interfaceMember.isForwardingStub) {
+ finalTarget = interfaceMember.forwardingStubInterfaceTarget;
+ } else {
+ finalTarget =
interfaceMember.memberSignatureOrigin ?? interfaceMember;
- } else {
- procedure.isForwardingStub = true;
}
- return;
+ stub.isMemberSignature = false;
+ stub.memberSignatureOrigin = null;
+ stub.isForwardingStub = true;
+ stub.forwardingStubInterfaceTarget = finalTarget;
+ if (_combinedMemberSignature.needsSuperImpl) {
+ _createForwardingImplIfNeeded(
+ stub.function, stub.name, classBuilder.cls);
+ }
}
- if (interfaceMember.enclosingClass == enclosingClass) return;
- stub = _createForwardingStub(
- stubTypeParameters, substitution, interfaceMember,
- memberSignatureTarget: forMemberSignature
- ? interfaceMember.memberSignatureOrigin ?? interfaceMember
- : null);
+ return stub;
+ } else {
+ if (_combinedMemberSignature.needsCovarianceMerging) {
+ _combinedMemberSignature.combinedMemberSignatureCovariance
+ .applyCovariance(interfaceMember);
+ }
+ if (_combinedMemberSignature.needsSuperImpl) {
+ _createForwardingImplIfNeeded(
+ interfaceMember.function, interfaceMember.name, classBuilder.cls);
+ }
+ return interfaceMember;
}
-
- bool isImplCreated = false;
- void createImplIfNeeded() {
- if (isImplCreated) return;
- createStubIfNeeded();
- _createForwardingImplIfNeeded(stub.function);
- isImplCreated = true;
- }
-
- IncludesTypeParametersNonCovariantly needsCheckVisitor =
- enclosingClass.typeParameters.isEmpty
- ? null
- // TODO(ahe): It may be necessary to cache this object.
- : new IncludesTypeParametersNonCovariantly(
- enclosingClass.typeParameters,
- // We are checking the parameter types and these are in a
- // contravariant position.
- initialVariance: Variance.contravariant);
- bool needsCheck(DartType type) => needsCheckVisitor == null
- ? false
- : substitution.substituteType(type).accept(needsCheckVisitor);
- bool isNonNullableByDefault = classBuilder.library.isNonNullableByDefault;
-
- DartType initialType(int candidateIndex, DartType a) {
- if (isNonNullableByDefault) {
- if (_mergeIndices != null && _mergeIndices.contains(candidateIndex)) {
- return norm(hierarchy.coreTypes, a);
- } else {
- return a;
- }
- } else {
- return legacyErasure(hierarchy.coreTypes, a);
- }
- }
-
- DartType mergeTypes(int index, DartType a, DartType b) {
- if (a == null) return null;
- if (isNonNullableByDefault &&
- _mergeIndices != null &&
- _mergeIndices.contains(index)) {
- return nnbdTopMerge(
- hierarchy.coreTypes, a, norm(hierarchy.coreTypes, b));
- } else {
- return a;
- }
- }
-
- for (int parameterIndex = 0;
- parameterIndex < interfacePositionalParameters.length;
- parameterIndex++) {
- VariableDeclaration parameter =
- interfacePositionalParameters[parameterIndex];
- DartType parameterType = substitution.substituteType(parameter.type);
- DartType type = initialType(_combinedMemberIndex, parameterType);
- if (parameterIndex == 0 &&
- hierarchy
- .coreTypes.objectClass.enclosingLibrary.isNonNullableByDefault &&
- !classBuilder.library.isNonNullableByDefault &&
- interfaceMember == hierarchy.coreTypes.objectEquals) {
- // In legacy code we special case `Object.==` to infer `dynamic`
- // instead `Object!`.
- type = const DynamicType();
- }
- bool isGenericCovariantImpl =
- parameter.isGenericCovariantImpl || needsCheck(parameter.type);
- bool isCovariant = parameter.isCovariant;
- VariableDeclaration superParameter = parameter;
- for (int candidateIndex = 0;
- candidateIndex < _candidates.length;
- candidateIndex++) {
- Member otherMember = getCandidateAt(candidateIndex);
- List<VariableDeclaration> otherPositionalParameters =
- getPositionalParameters(otherMember);
- if (otherPositionalParameters.length <= parameterIndex) continue;
- VariableDeclaration otherParameter =
- otherPositionalParameters[parameterIndex];
- if (candidateIndex == 0) superParameter = otherParameter;
- if (identical(otherMember, interfaceMember)) continue;
- if (otherParameter.isGenericCovariantImpl) {
- isGenericCovariantImpl = true;
- }
- if (otherParameter.isCovariant) {
- isCovariant = true;
- }
- DartType candidateType =
- substitutions[candidateIndex].substituteType(otherParameter.type);
- if (parameterIndex == 0 &&
- hierarchy.coreTypes.objectClass.enclosingLibrary
- .isNonNullableByDefault &&
- !classBuilder.library.isNonNullableByDefault &&
- otherMember == hierarchy.coreTypes.objectEquals) {
- // In legacy code we special case `Object.==` to infer `dynamic`
- // instead `Object!`.
- candidateType = const DynamicType();
- }
-
- type = mergeTypes(candidateIndex, type, candidateType);
- }
- if (isGenericCovariantImpl) {
- if (!superParameter.isGenericCovariantImpl) {
- createImplIfNeeded();
- }
- if (!parameter.isGenericCovariantImpl) {
- createStubIfNeeded();
- stub.function.positionalParameters[parameterIndex]
- .isGenericCovariantImpl = true;
- }
- }
- if (isCovariant) {
- if (!superParameter.isCovariant) {
- createImplIfNeeded();
- }
- if (!parameter.isCovariant) {
- createStubIfNeeded();
- stub.function.positionalParameters[parameterIndex].isCovariant = true;
- }
- }
- if (type != null && type != parameterType) {
- // TODO(johnniwinther): Report an error when [type] is null; this
- // means that nnbd-top-merge was not defined.
- createStubIfNeeded(forMemberSignature: true);
- stub.function.positionalParameters[parameterIndex].type = type;
- }
- }
- for (int parameterIndex = 0;
- parameterIndex < interfaceNamedParameters.length;
- parameterIndex++) {
- VariableDeclaration parameter = interfaceNamedParameters[parameterIndex];
- DartType parameterType = substitution.substituteType(parameter.type);
- DartType type = initialType(_combinedMemberIndex, parameterType);
- bool isGenericCovariantImpl =
- parameter.isGenericCovariantImpl || needsCheck(parameter.type);
- bool isCovariant = parameter.isCovariant;
- VariableDeclaration superParameter = parameter;
- for (int candidateIndex = 0;
- candidateIndex < _candidates.length;
- candidateIndex++) {
- Member otherMember = getCandidateAt(candidateIndex);
- if (otherMember is ForwardingNode) continue;
- VariableDeclaration otherParameter =
- getNamedFormal(otherMember.function, parameter.name);
- if (otherParameter == null) continue;
- if (candidateIndex == 0) superParameter = otherParameter;
- if (identical(otherMember, interfaceMember)) continue;
- if (otherParameter.isGenericCovariantImpl) {
- isGenericCovariantImpl = true;
- }
- if (otherParameter.isCovariant) {
- isCovariant = true;
- }
- type = mergeTypes(candidateIndex, type,
- substitutions[candidateIndex].substituteType(otherParameter.type));
- }
- if (isGenericCovariantImpl) {
- if (!superParameter.isGenericCovariantImpl) {
- createImplIfNeeded();
- }
- if (!parameter.isGenericCovariantImpl) {
- createStubIfNeeded();
- stub.function.namedParameters[parameterIndex].isGenericCovariantImpl =
- true;
- }
- }
- if (isCovariant) {
- if (!superParameter.isCovariant) {
- createImplIfNeeded();
- }
- if (!parameter.isCovariant) {
- createStubIfNeeded();
- stub.function.namedParameters[parameterIndex].isCovariant = true;
- }
- }
- if (type != null && type != parameterType) {
- // TODO(johnniwinther): Report an error when [type] is null; this
- // means that nnbd-top-merge was not defined.
- createStubIfNeeded(forMemberSignature: true);
- stub.function.namedParameters[parameterIndex].type = type;
- }
- }
- for (int parameterIndex = 0;
- parameterIndex < interfaceTypeParameters.length;
- parameterIndex++) {
- TypeParameter typeParameter = interfaceTypeParameters[parameterIndex];
- DartType parameterBound =
- substitution.substituteType(typeParameter.bound);
- DartType bound = initialType(_combinedMemberIndex, parameterBound);
- DartType parameterDefaultType =
- substitution.substituteType(typeParameter.defaultType);
- DartType defaultType =
- initialType(_combinedMemberIndex, parameterDefaultType);
- bool isGenericCovariantImpl =
- typeParameter.isGenericCovariantImpl || needsCheck(parameterBound);
- TypeParameter superTypeParameter = typeParameter;
- for (int candidateIndex = 0;
- candidateIndex < _candidates.length;
- candidateIndex++) {
- Member otherMember = getCandidateAt(candidateIndex);
- if (otherMember is ForwardingNode) continue;
- List<TypeParameter> otherTypeParameters =
- otherMember.function.typeParameters;
- if (otherTypeParameters.length <= parameterIndex) continue;
- TypeParameter otherTypeParameter = otherTypeParameters[parameterIndex];
- if (candidateIndex == 0) superTypeParameter = otherTypeParameter;
- if (identical(otherMember, interfaceMember)) continue;
- if (otherTypeParameter.isGenericCovariantImpl) {
- isGenericCovariantImpl = true;
- }
- }
- if (isGenericCovariantImpl) {
- if (!superTypeParameter.isGenericCovariantImpl) {
- createImplIfNeeded();
- }
- if (!typeParameter.isGenericCovariantImpl) {
- createStubIfNeeded();
- stub.function.typeParameters[parameterIndex].isGenericCovariantImpl =
- true;
- }
- }
- if (bound != null && bound != parameterBound) {
- createStubIfNeeded(forMemberSignature: true);
- stub.function.typeParameters[parameterIndex].bound = bound;
- }
- if (defaultType != null && defaultType != parameterDefaultType) {
- createStubIfNeeded(forMemberSignature: true);
- stub.function.typeParameters[parameterIndex].defaultType = defaultType;
- }
- }
- DartType returnType =
- substitution.substituteType(getReturnType(interfaceMember));
- DartType type = initialType(_combinedMemberIndex, returnType);
- for (int candidateIndex = 0;
- candidateIndex < _candidates.length;
- candidateIndex++) {
- Member otherMember = getCandidateAt(candidateIndex);
- type = mergeTypes(
- candidateIndex,
- type,
- substitutions[candidateIndex]
- .substituteType(getReturnType(otherMember)));
- }
- if (type != null && type != returnType) {
- // TODO(johnniwinther): Report an error when [type] is null; this
- // means that nnbd-top-merge was not defined.
- createStubIfNeeded(forMemberSignature: true);
- stub.function.returnType = type;
- }
- assert(
- !(stub is Procedure &&
- (stub as Procedure).isMemberSignature &&
- stub.memberSignatureOrigin == null),
- "No member signature origin for member signature $stub.");
- if (stub != interfaceMember && stub is Procedure) {
- Procedure procedure = stub;
- if (procedure.isForwardingStub || procedure.isForwardingSemiStub) {
- procedure.isMemberSignature = false;
- procedure.memberSignatureOrigin = null;
- } else {
- procedure.forwardingStubInterfaceTarget = null;
- procedure.forwardingStubSuperTarget = null;
- }
- assert(
- !(procedure.isMemberSignature && procedure.isForwardingStub),
- "Procedure is both member signature and forwarding stub: "
- "$procedure.");
- assert(
- !(procedure.isMemberSignature && procedure.isForwardingSemiStub),
- "Procedure is both member signature and forwarding semi stub: "
- "$procedure.");
- assert(
- !(procedure.forwardingStubInterfaceTarget is Procedure &&
- (procedure.forwardingStubInterfaceTarget as Procedure)
- .isMemberSignature),
- "Forwarding stub interface target is member signature: $procedure.");
- assert(
- !(procedure.forwardingStubSuperTarget is Procedure &&
- (procedure.forwardingStubSuperTarget as Procedure)
- .isMemberSignature),
- "Forwarding stub super target is member signature: $procedure.");
- }
- return stub;
}
- void _createForwardingImplIfNeeded(FunctionNode function) {
+ void _createForwardingImplIfNeeded(
+ FunctionNode function, Name name, Class enclosingClass) {
if (function.body != null) {
// There is already an implementation; nothing further needs to be done.
return;
@@ -472,8 +129,9 @@
Class superclass = enclosingClass.superclass;
if (superclass == null) return;
Procedure procedure = function.parent;
- Member superTarget = hierarchy.getDispatchTargetKernel(
- superclass, procedure.name, kind == ProcedureKind.Setter);
+ Member superTarget = _combinedMemberSignature.hierarchy
+ .getDispatchTargetKernel(
+ superclass, procedure.name, kind == ProcedureKind.Setter);
if (superTarget == null) return;
if (superTarget is Procedure && superTarget.isForwardingStub) {
Procedure superProcedure = superTarget;
@@ -524,144 +182,4 @@
procedure.transformerFlags |= TransformerFlag.superCalls;
procedure.forwardingStubSuperTarget = superTarget;
}
-
- /// Creates a forwarding stub based on the given [target].
- Procedure _createForwardingStub(List<TypeParameter> typeParameters,
- Substitution substitution, Member target,
- {Member memberSignatureTarget}) {
- VariableDeclaration copyParameter(VariableDeclaration parameter) {
- return new VariableDeclaration(parameter.name,
- type: substitution.substituteType(parameter.type),
- isCovariant: parameter.isCovariant)
- ..isGenericCovariantImpl = parameter.isGenericCovariantImpl;
- }
-
- List<TypeParameter> targetTypeParameters =
- target.function?.typeParameters ?? [];
- if (typeParameters != null) {
- Map<TypeParameter, DartType> additionalSubstitution =
- <TypeParameter, DartType>{};
- for (int i = 0; i < targetTypeParameters.length; i++) {
- TypeParameter targetTypeParameter = targetTypeParameters[i];
- additionalSubstitution[targetTypeParameter] =
- new TypeParameterType.forAlphaRenaming(
- targetTypeParameter, typeParameters[i]);
- }
- substitution = Substitution.combine(
- substitution, Substitution.fromMap(additionalSubstitution));
- for (int i = 0; i < typeParameters.length; i++) {
- typeParameters[i].bound =
- substitution.substituteType(targetTypeParameters[i].bound);
- typeParameters[i].defaultType =
- substitution.substituteType(targetTypeParameters[i].defaultType);
- }
- }
- List<VariableDeclaration> positionalParameters =
- getPositionalParameters(target).map(copyParameter).toList();
- List<VariableDeclaration> namedParameters =
- target.function?.namedParameters?.map(copyParameter)?.toList() ?? [];
- FunctionNode function = new FunctionNode(null,
- positionalParameters: positionalParameters,
- namedParameters: namedParameters,
- typeParameters: typeParameters,
- requiredParameterCount: getRequiredParameterCount(target),
- returnType: substitution.substituteType(getReturnType(target)));
- Member finalTarget;
- if (target is Procedure && target.isForwardingStub) {
- finalTarget = target.forwardingStubInterfaceTarget;
- } else {
- finalTarget = target.memberSignatureOrigin ?? target;
- }
- Procedure referenceFrom;
- if (classBuilder.referencesFromIndexed != null) {
- if (kind == ProcedureKind.Setter) {
- referenceFrom =
- classBuilder.referencesFromIndexed.lookupProcedureSetter(name.text);
- } else {
- referenceFrom = classBuilder.referencesFromIndexed
- .lookupProcedureNotSetter(name.text);
- }
- }
- return new Procedure(name, kind, function,
- isAbstract: true,
- isForwardingStub: memberSignatureTarget == null,
- isMemberSignature: memberSignatureTarget != null,
- fileUri: enclosingClass.fileUri,
- forwardingStubInterfaceTarget: finalTarget,
- reference: referenceFrom?.reference,
- memberSignatureOrigin: memberSignatureTarget)
- ..startFileOffset = enclosingClass.fileOffset
- ..fileOffset = enclosingClass.fileOffset
- ..parent = enclosingClass
- ..isNonNullableByDefault =
- enclosingClass.enclosingLibrary.isNonNullableByDefault;
- }
-
- /// Returns the [i]th element of [_candidates], finalizing it if necessary.
- Member getCandidateAt(int i) {
- ClassMember candidate = _candidates[i];
- return candidate.getMember(hierarchy);
- }
-
- Substitution _substitutionFor(
- List<TypeParameter> stubTypeParameters, Member candidate, Class class_) {
- Substitution substitution = Substitution.fromInterfaceType(
- hierarchy.getTypeAsInstanceOf(
- hierarchy.coreTypes
- .thisInterfaceType(class_, class_.enclosingLibrary.nonNullable),
- candidate.enclosingClass,
- class_.enclosingLibrary,
- hierarchy.coreTypes));
- if (stubTypeParameters != null) {
- // If the stub is generic ensure that type parameters are alpha renamed
- // to the [stubTypeParameters].
- Map<TypeParameter, TypeParameterType> map = {};
- for (int i = 0; i < stubTypeParameters.length; i++) {
- TypeParameter typeParameter = candidate.function.typeParameters[i];
- map[typeParameter] = new TypeParameterType.forAlphaRenaming(
- typeParameter, stubTypeParameters[i]);
- }
- substitution =
- Substitution.combine(substitution, Substitution.fromMap(map));
- }
- return substitution;
- }
-
- List<VariableDeclaration> getPositionalParameters(Member member) {
- if (member is Field) {
- if (kind == ProcedureKind.Setter) {
- return <VariableDeclaration>[
- new VariableDeclaration("_",
- type: member.type, isCovariant: member.isCovariant)
- ..isGenericCovariantImpl = member.isGenericCovariantImpl
- ];
- } else {
- return <VariableDeclaration>[];
- }
- } else {
- return member.function.positionalParameters;
- }
- }
-
- int getRequiredParameterCount(Member member) {
- switch (kind) {
- case ProcedureKind.Getter:
- return 0;
- case ProcedureKind.Setter:
- return 1;
- default:
- return member.function.requiredParameterCount;
- }
- }
-
- DartType getReturnType(Member member) {
- switch (kind) {
- case ProcedureKind.Getter:
- return member is Field ? member.type : member.function.returnType;
- case ProcedureKind.Setter:
- return const VoidType();
- default:
- return member.function.returnType;
- }
- }
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/member_covariance.dart b/pkg/front_end/lib/src/fasta/kernel/member_covariance.dart
new file mode 100644
index 0000000..956f0fd
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/member_covariance.dart
@@ -0,0 +1,357 @@
+// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// 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 'dart:math';
+
+import 'package:kernel/ast.dart' hide MapEntry;
+
+/// Class that holds the covariant and generic-covariant-impl information for
+/// a member.
+// TODO(johnniwinther): Cache this in ClassMember.
+// TODO(johnniwinther): Maybe compact initial positional masks into a single
+// int.
+class Covariance {
+ static const int GenericCovariantImpl = 1;
+ static const int Covariant = 2;
+
+ /// Returns the covariance mask for [parameter].
+ static int covarianceFromParameter(VariableDeclaration parameter) =>
+ (parameter.isCovariant ? Covariant : 0) |
+ (parameter.isGenericCovariantImpl ? GenericCovariantImpl : 0);
+
+ /// Returns the covariance mask for [field].
+ static int covarianceFromField(Field field) =>
+ (field.isCovariant ? Covariant : 0) |
+ (field.isGenericCovariantImpl ? GenericCovariantImpl : 0);
+
+ /// Applies the [covariance] mask to [parameter].
+ static void covarianceToParameter(
+ int covariance, VariableDeclaration parameter) {
+ if ((covariance & Covariant) != 0) {
+ parameter.isCovariant = true;
+ }
+ if ((covariance & GenericCovariantImpl) != 0) {
+ parameter.isGenericCovariantImpl = true;
+ }
+ }
+
+ /// Applies the [covariance] mask to parameter.
+ static void covarianceToField(int covariance, Field field) {
+ if ((covariance & Covariant) != 0) {
+ field.isCovariant = true;
+ }
+ if ((covariance & GenericCovariantImpl) != 0) {
+ field.isGenericCovariantImpl = true;
+ }
+ }
+
+ /// The covariance mask for the positional parameters.
+ ///
+ /// If no positional parameters have covariance, this is `null`.
+ final List<int> _positionalParameters;
+
+ /// The covariance mask for the named parameters with name covariance.
+ ///
+ /// If no named parameters have covariance, this is `null`.
+ final Map<String, int> _namedParameters;
+
+ /// The generic-covariant-impl state for the type parameters.
+ ///
+ /// If no type parameters are generic-covariant-impl, this is `null`.
+ final List<bool> _typeParameters;
+
+ const Covariance.internal(
+ this._positionalParameters, this._namedParameters, this._typeParameters);
+
+ /// The empty covariance.
+ ///
+ /// This is used for all members that do not use any covariance, regardless
+ /// of parameter structure.
+ const Covariance.empty() : this.internal(null, null, null);
+
+ /// Computes the covariance for the setter aspect of [field].
+ ///
+ /// The getter aspect of a field never uses covariance.
+ factory Covariance.fromField(Field field) {
+ int covariance = covarianceFromField(field);
+ if (covariance == 0) {
+ return const Covariance.empty();
+ }
+ return new Covariance.internal(<int>[covariance], null, null);
+ }
+
+ /// Computes the covariance for the [setter].
+ factory Covariance.fromSetter(Procedure setter) {
+ int covariance =
+ covarianceFromParameter(setter.function.positionalParameters.first);
+ if (covariance == 0) {
+ return const Covariance.empty();
+ }
+ return new Covariance.internal(<int>[covariance], null, null);
+ }
+
+ /// Computes the covariance for the [procedure].
+ factory Covariance.fromMethod(Procedure procedure) {
+ FunctionNode function = procedure.function;
+ List<int> positionalParameters;
+ if (function.positionalParameters.isNotEmpty) {
+ for (int index = 0;
+ index < function.positionalParameters.length;
+ index++) {
+ int covariance =
+ covarianceFromParameter(function.positionalParameters[index]);
+ if (covariance != 0) {
+ positionalParameters ??=
+ new List<int>.filled(function.positionalParameters.length, 0);
+ positionalParameters[index] = covariance;
+ }
+ }
+ }
+ Map<String, int> namedParameters;
+ if (function.namedParameters.isNotEmpty) {
+ for (int index = 0; index < function.namedParameters.length; index++) {
+ VariableDeclaration parameter = function.namedParameters[index];
+ int covariance = covarianceFromParameter(parameter);
+ if (covariance != 0) {
+ namedParameters ??= {};
+ namedParameters[parameter.name] = covariance;
+ }
+ }
+ }
+ List<bool> typeParameters;
+ if (function.typeParameters.isNotEmpty) {
+ for (int index = 0; index < function.typeParameters.length; index++) {
+ if (function.typeParameters[index].isGenericCovariantImpl) {
+ typeParameters ??=
+ new List<bool>.filled(function.typeParameters.length, false);
+ typeParameters[index] = true;
+ }
+ }
+ }
+ if (positionalParameters == null &&
+ namedParameters == null &&
+ typeParameters == null) {
+ return const Covariance.empty();
+ }
+ return new Covariance.internal(
+ positionalParameters, namedParameters, typeParameters);
+ }
+
+ /// Computes the covariance for [member].
+ ///
+ /// If [forSetter] is `true`, the covariance is computed for the setter
+ /// aspect of [member]. Otherwise, the covariance for the getter/method aspect
+ /// of [member] is computed.
+ factory Covariance.fromMember(Member member, {bool forSetter}) {
+ assert(forSetter != null);
+ if (member is Procedure) {
+ if (member.kind == ProcedureKind.Getter) {
+ return const Covariance.empty();
+ } else if (member.kind == ProcedureKind.Setter) {
+ return new Covariance.fromSetter(member);
+ } else {
+ return new Covariance.fromMethod(member);
+ }
+ } else if (member is Field) {
+ if (forSetter) {
+ return new Covariance.fromField(member);
+ } else {
+ return const Covariance.empty();
+ }
+ } else {
+ throw new UnsupportedError(
+ "Unexpected member $member (${member.runtimeType})");
+ }
+ }
+
+ /// Returns `true` if this is the empty covariance.
+ bool get isEmpty =>
+ _positionalParameters == null &&
+ _namedParameters == null &&
+ _typeParameters == null;
+
+ /// Returns the covariance mask for the [index]th positional parameter.
+ int getPositionalVariance(int index) =>
+ _positionalParameters != null && index < _positionalParameters.length
+ ? _positionalParameters[index]
+ : 0;
+
+ /// Returns the covariance mask for the named parameter with the [name].
+ int getNamedVariance(String name) =>
+ _namedParameters != null ? (_namedParameters[name] ?? 0) : 0;
+
+ /// Returns `true` if the [index]th type parameter is generic-covariant-impl.
+ bool isTypeParameterGenericCovariantImpl(int index) =>
+ _typeParameters != null && index < _typeParameters.length
+ ? _typeParameters[index]
+ : false;
+
+ /// Returns the merge of this covariance with [other] in which parameters are
+ /// covariant if they are covariant in either [this] or [other].
+ Covariance merge(Covariance other) {
+ if (identical(this, other)) return this;
+ List<int> positionalParameters;
+ if (_positionalParameters == null) {
+ positionalParameters = other._positionalParameters;
+ } else if (other._positionalParameters == null) {
+ positionalParameters = _positionalParameters;
+ } else {
+ positionalParameters = new List<int>(max(
+ _positionalParameters.length, other._positionalParameters.length));
+ for (int index = 0; index < positionalParameters.length; index++) {
+ positionalParameters[index] =
+ getPositionalVariance(index) | other.getPositionalVariance(index);
+ }
+ }
+ Map<String, int> namedParameters;
+ if (_namedParameters == null) {
+ namedParameters = other._namedParameters;
+ } else if (other._namedParameters == null) {
+ namedParameters = _namedParameters;
+ } else {
+ namedParameters = {};
+ Set<String> names = {
+ ..._namedParameters.keys,
+ ...other._namedParameters.keys
+ };
+ for (String name in names) {
+ namedParameters[name] =
+ getNamedVariance(name) | other.getNamedVariance(name);
+ }
+ }
+ List<bool> typeParameters;
+ if (_typeParameters == null) {
+ typeParameters = other._typeParameters;
+ } else if (other._typeParameters == null) {
+ typeParameters = _typeParameters;
+ } else {
+ typeParameters = new List<bool>(
+ max(_typeParameters.length, other._typeParameters.length));
+ for (int index = 0; index < typeParameters.length; index++) {
+ typeParameters[index] = isTypeParameterGenericCovariantImpl(index) ||
+ other.isTypeParameterGenericCovariantImpl(index);
+ }
+ }
+ if (positionalParameters == null &&
+ namedParameters == null &&
+ typeParameters == null) {
+ return const Covariance.empty();
+ }
+ return new Covariance.internal(
+ positionalParameters, namedParameters, typeParameters);
+ }
+
+ /// Update [member] to have the covariant flags set with the covariance in
+ /// [this].
+ ///
+ /// No covariance bits are removed from [member] during this process.
+ void applyCovariance(Member member) {
+ if (isEmpty) return;
+ if (member is Procedure) {
+ FunctionNode function = member.function;
+ if (_positionalParameters != null) {
+ for (int index = 0; index < _positionalParameters.length; index++) {
+ if (index < function.positionalParameters.length) {
+ covarianceToParameter(_positionalParameters[index],
+ function.positionalParameters[index]);
+ }
+ }
+ }
+ if (_namedParameters != null) {
+ for (VariableDeclaration parameter in function.namedParameters) {
+ covarianceToParameter(getNamedVariance(parameter.name), parameter);
+ }
+ }
+ if (_typeParameters != null) {
+ for (int index = 0; index < _typeParameters.length; index++) {
+ if (index < function.typeParameters.length) {
+ if (_typeParameters[index]) {
+ function.typeParameters[index].isGenericCovariantImpl = true;
+ }
+ }
+ }
+ }
+ } else if (member is Field) {
+ if (_positionalParameters != null) {
+ covarianceToField(getPositionalVariance(0), member);
+ }
+ } else {
+ throw new UnsupportedError(
+ "Unexpected member $member (${member.runtimeType})");
+ }
+ }
+
+ @override
+ int get hashCode {
+ int hash = 0;
+ if (_positionalParameters != null) {
+ for (int covariance in _positionalParameters) {
+ hash = hash * 13 + covariance.hashCode * 17;
+ }
+ }
+ if (_namedParameters != null) {
+ for (String name in _namedParameters.keys) {
+ hash += name.hashCode * 19 + _namedParameters[name].hashCode * 23;
+ }
+ }
+ if (_typeParameters != null) {
+ for (bool covariance in _typeParameters) {
+ hash = hash * 29 + covariance.hashCode * 31;
+ }
+ }
+ return hash;
+ }
+
+ @override
+ bool operator ==(Object other) {
+ if (identical(this, other)) return true;
+ if (other is Covariance) {
+ if (_positionalParameters != other._positionalParameters) {
+ if (_positionalParameters == null ||
+ other._positionalParameters == null) {
+ return false;
+ }
+ if (_positionalParameters.length !=
+ other._positionalParameters.length) {
+ return false;
+ }
+ for (int i = 0; i < _positionalParameters.length; i++) {
+ if (_positionalParameters[i] != other._positionalParameters[i]) {
+ return false;
+ }
+ }
+ }
+ if (_namedParameters != other._namedParameters) {
+ if (_namedParameters == null || other._namedParameters == null) {
+ return false;
+ }
+ if (_namedParameters.length != other._namedParameters.length) {
+ return false;
+ }
+ for (String name in _namedParameters.keys) {
+ int covariance = _namedParameters[name];
+ int otherCovariance = other._namedParameters[name];
+ if (covariance != otherCovariance) {
+ return false;
+ }
+ }
+ }
+ if (_typeParameters != other._typeParameters) {
+ if (_typeParameters == null || other._typeParameters == null) {
+ return false;
+ }
+ if (_typeParameters.length != other._typeParameters.length) {
+ return false;
+ }
+ for (int i = 0; i < _typeParameters.length; i++) {
+ if (_typeParameters[i] != other._typeParameters[i]) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index badb39d..de76fc2 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -674,6 +674,8 @@
clsHasUserDefinedNoSuchMethod, member, cls, concreteMembers,
isPatch: member.fileUri != member.enclosingClass.fileUri) &&
!existingForwarders.contains(member)) {
+ assert(!combinedMemberSignature.needsCovarianceMerging,
+ "Needed covariant merging for ${members}");
if (ClassHierarchy.findMemberByName(declaredMembers, member.name) !=
null) {
_transformProcedureToNoSuchMethodForwarder(
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index a0d5c8c..2acc197 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -241,6 +241,7 @@
corrections
cosmetic
counters
+covariances
cr
creator
criterion
@@ -515,6 +516,7 @@
imply
implying
importantly
+imprecise
inapplicable
inc
incomparable
@@ -635,6 +637,7 @@
manipulation
markdown
masking
+masks
master
mb
mc
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.outline.expect
index 8352c73..2f6b693 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.outline.expect
@@ -78,12 +78,12 @@
class D extends self::A implements self::I {
synthetic constructor •() → self::D*
;
- abstract forwarding-stub method foo([dynamic a]) → void;
+ abstract member-signature method foo([dynamic a]) → void; -> self::I::foo
}
abstract class E extends self::A implements self::I {
synthetic constructor •() → self::E*
;
- abstract forwarding-stub method foo([dynamic a]) → void;
+ abstract member-signature method foo([dynamic a]) → void; -> self::I::foo
}
class F extends self::E {
synthetic constructor •() → self::F*
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.expect
index 50a2d15..0529482 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.expect
@@ -82,13 +82,13 @@
synthetic constructor •() → self::D*
: super self::A::•()
;
- abstract forwarding-stub method foo([dynamic a = #C1]) → void;
+ abstract member-signature method foo([dynamic a = #C1]) → void; -> self::I::foo
}
abstract class E extends self::A implements self::I {
synthetic constructor •() → self::E*
: super self::A::•()
;
- abstract forwarding-stub method foo([dynamic a = #C1]) → void;
+ abstract member-signature method foo([dynamic a = #C1]) → void; -> self::I::foo
}
class F extends self::E {
synthetic constructor •() → self::F*
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.transformed.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.transformed.expect
index 50a2d15..0529482 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.transformed.expect
@@ -82,13 +82,13 @@
synthetic constructor •() → self::D*
: super self::A::•()
;
- abstract forwarding-stub method foo([dynamic a = #C1]) → void;
+ abstract member-signature method foo([dynamic a = #C1]) → void; -> self::I::foo
}
abstract class E extends self::A implements self::I {
synthetic constructor •() → self::E*
: super self::A::•()
;
- abstract forwarding-stub method foo([dynamic a = #C1]) → void;
+ abstract member-signature method foo([dynamic a = #C1]) → void; -> self::I::foo
}
class F extends self::E {
synthetic constructor •() → self::F*
diff --git a/pkg/front_end/testcases/general/assert_super.dart.strong.expect b/pkg/front_end/testcases/general/assert_super.dart.strong.expect
deleted file mode 100644
index 59fd8cc..0000000
--- a/pkg/front_end/testcases/general/assert_super.dart.strong.expect
+++ /dev/null
@@ -1,27 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-class Super extends core::Object {
- synthetic constructor •() → self::Super*
- : super core::Object::•()
- ;
- get property() → core::bool*
- return true;
- abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
- abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
- abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
- abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
- abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
- abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
- abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
- abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
- abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class Class extends self::Super {
- constructor •() → self::Class*
- : assert(this.{self::Super::property}), super self::Super::•()
- ;
-}
-static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/assert_super.dart.strong.transformed.expect b/pkg/front_end/testcases/general/assert_super.dart.strong.transformed.expect
deleted file mode 100644
index 59fd8cc..0000000
--- a/pkg/front_end/testcases/general/assert_super.dart.strong.transformed.expect
+++ /dev/null
@@ -1,27 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-class Super extends core::Object {
- synthetic constructor •() → self::Super*
- : super core::Object::•()
- ;
- get property() → core::bool*
- return true;
- abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
- abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
- abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
- abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
- abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
- abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
- abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
- abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
- abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class Class extends self::Super {
- constructor •() → self::Class*
- : assert(this.{self::Super::property}), super self::Super::•()
- ;
-}
-static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/assert_super.dart.textual_outline.expect b/pkg/front_end/testcases/general/assert_super.dart.textual_outline.expect
deleted file mode 100644
index c320010..0000000
--- a/pkg/front_end/testcases/general/assert_super.dart.textual_outline.expect
+++ /dev/null
@@ -1,9 +0,0 @@
-class Super {
- bool get property => true;
-}
-
-class Class extends Super {
- Class() : assert(property);
-}
-
-main() {}
diff --git a/pkg/front_end/testcases/general/assert_super.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/assert_super.dart.textual_outline_modelled.expect
deleted file mode 100644
index aa85ac3..0000000
--- a/pkg/front_end/testcases/general/assert_super.dart.textual_outline_modelled.expect
+++ /dev/null
@@ -1,9 +0,0 @@
-class Class extends Super {
- Class() : assert(property);
-}
-
-class Super {
- bool get property => true;
-}
-
-main() {}
diff --git a/pkg/front_end/testcases/general/assert_super.dart b/pkg/front_end/testcases/general/covariant_field_override.dart
similarity index 68%
rename from pkg/front_end/testcases/general/assert_super.dart
rename to pkg/front_end/testcases/general/covariant_field_override.dart
index 93a32ef..120fd23 100644
--- a/pkg/front_end/testcases/general/assert_super.dart
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart
@@ -2,12 +2,16 @@
// 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.
-class Super {
- bool get property => true;
+class A {
+ num field;
}
-class Class extends Super {
- Class() : assert(property);
+class B {
+ covariant num field;
+}
+
+class C extends A implements B {
+ num field;
}
main() {}
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.outline.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.outline.expect
new file mode 100644
index 0000000..d5cf801
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.outline.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field core::num* field;
+ synthetic constructor •() → self::A*
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+ covariant field core::num* field;
+ synthetic constructor •() → self::B*
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::A implements self::B {
+ covariant field core::num* field;
+ synthetic constructor •() → self::C*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.strong.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.strong.expect
new file mode 100644
index 0000000..22e490c
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.strong.expect
@@ -0,0 +1,43 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field core::num* field = null;
+ synthetic constructor •() → self::A*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+ covariant field core::num* field = null;
+ synthetic constructor •() → self::B*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::A implements self::B {
+ covariant field core::num* field = null;
+ synthetic constructor •() → self::C*
+ : super self::A::•()
+ ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.strong.transformed.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.strong.transformed.expect
new file mode 100644
index 0000000..22e490c
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.strong.transformed.expect
@@ -0,0 +1,43 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field core::num* field = null;
+ synthetic constructor •() → self::A*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+ covariant field core::num* field = null;
+ synthetic constructor •() → self::B*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::A implements self::B {
+ covariant field core::num* field = null;
+ synthetic constructor •() → self::C*
+ : super self::A::•()
+ ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline.expect
new file mode 100644
index 0000000..d01b911
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+class A {
+ num field;
+}
+
+class B {
+ covariant num field;
+}
+
+class C extends A implements B {
+ num field;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d01b911
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+class A {
+ num field;
+}
+
+class B {
+ covariant num field;
+}
+
+class C extends A implements B {
+ num field;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart b/pkg/front_end/testcases/general/covariant_type_parameter.dart
new file mode 100644
index 0000000..07f2186
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// 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.
+
+class A<S> {
+ void method<T extends S>(S s) {}
+}
+
+class B<S> {
+ void method<T extends S>(covariant S s) {}
+}
+
+class C<S> extends A<S> implements B<S> {
+ void method<T extends S>(S s);
+}
+
+class D<S> extends A<S> implements B<S> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.outline.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.outline.expect
new file mode 100644
index 0000000..7b6fa81
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.outline.expect
@@ -0,0 +1,50 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<S extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::A<self::A::S*>*
+ ;
+ method method<generic-covariant-impl T extends self::A::S* = self::A::S*>(generic-covariant-impl self::A::S* s) → void
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<S extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::B<self::B::S*>*
+ ;
+ method method<generic-covariant-impl T extends self::B::S* = self::B::S*>(covariant generic-covariant-impl self::B::S* s) → void
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<S extends core::Object* = dynamic> extends self::A<self::C::S*> implements self::B<self::C::S*> {
+ synthetic constructor •() → self::C<self::C::S*>*
+ ;
+ forwarding-stub forwarding-semi-stub method method<generic-covariant-impl T extends self::C::S* = self::C::S*>(covariant generic-covariant-impl self::C::S* s) → void
+ return super.{self::A::method}<self::C::method::T*>(s);
+}
+class D<S extends core::Object* = dynamic> extends self::A<self::D::S*> implements self::B<self::D::S*> {
+ synthetic constructor •() → self::D<self::D::S*>*
+ ;
+ forwarding-stub method method<generic-covariant-impl T extends self::D::S* = self::D::S*>(covariant generic-covariant-impl self::D::S* s) → void
+ return super.{self::A::method}<self::D::method::T*>(s);
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.strong.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.strong.expect
new file mode 100644
index 0000000..02336a0
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.strong.expect
@@ -0,0 +1,51 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<S extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::A<self::A::S*>*
+ : super core::Object::•()
+ ;
+ method method<generic-covariant-impl T extends self::A::S* = self::A::S*>(generic-covariant-impl self::A::S* s) → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<S extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::B<self::B::S*>*
+ : super core::Object::•()
+ ;
+ method method<generic-covariant-impl T extends self::B::S* = self::B::S*>(covariant generic-covariant-impl self::B::S* s) → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<S extends core::Object* = dynamic> extends self::A<self::C::S*> implements self::B<self::C::S*> {
+ synthetic constructor •() → self::C<self::C::S*>*
+ : super self::A::•()
+ ;
+ forwarding-stub forwarding-semi-stub method method<generic-covariant-impl T extends self::C::S* = self::C::S*>(covariant generic-covariant-impl self::C::S* s) → void
+ return super.{self::A::method}<self::C::method::T*>(s);
+}
+class D<S extends core::Object* = dynamic> extends self::A<self::D::S*> implements self::B<self::D::S*> {
+ synthetic constructor •() → self::D<self::D::S*>*
+ : super self::A::•()
+ ;
+ forwarding-stub method method<generic-covariant-impl T extends self::D::S* = self::D::S*>(covariant generic-covariant-impl self::D::S* s) → void
+ return super.{self::A::method}<self::D::method::T*>(s);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.strong.transformed.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.strong.transformed.expect
new file mode 100644
index 0000000..02336a0
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.strong.transformed.expect
@@ -0,0 +1,51 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<S extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::A<self::A::S*>*
+ : super core::Object::•()
+ ;
+ method method<generic-covariant-impl T extends self::A::S* = self::A::S*>(generic-covariant-impl self::A::S* s) → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<S extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::B<self::B::S*>*
+ : super core::Object::•()
+ ;
+ method method<generic-covariant-impl T extends self::B::S* = self::B::S*>(covariant generic-covariant-impl self::B::S* s) → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<S extends core::Object* = dynamic> extends self::A<self::C::S*> implements self::B<self::C::S*> {
+ synthetic constructor •() → self::C<self::C::S*>*
+ : super self::A::•()
+ ;
+ forwarding-stub forwarding-semi-stub method method<generic-covariant-impl T extends self::C::S* = self::C::S*>(covariant generic-covariant-impl self::C::S* s) → void
+ return super.{self::A::method}<self::C::method::T*>(s);
+}
+class D<S extends core::Object* = dynamic> extends self::A<self::D::S*> implements self::B<self::D::S*> {
+ synthetic constructor •() → self::D<self::D::S*>*
+ : super self::A::•()
+ ;
+ forwarding-stub method method<generic-covariant-impl T extends self::D::S* = self::D::S*>(covariant generic-covariant-impl self::D::S* s) → void
+ return super.{self::A::method}<self::D::method::T*>(s);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline.expect
new file mode 100644
index 0000000..c11d77c
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class A<S> {
+ void method<T extends S>(S s) {}
+}
+
+class B<S> {
+ void method<T extends S>(covariant S s) {}
+}
+
+class C<S> extends A<S> implements B<S> {
+ void method<T extends S>(S s);
+}
+
+class D<S> extends A<S> implements B<S> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c11d77c
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class A<S> {
+ void method<T extends S>(S s) {}
+}
+
+class B<S> {
+ void method<T extends S>(covariant S s) {}
+}
+
+class C<S> extends A<S> implements B<S> {
+ void method<T extends S>(S s);
+}
+
+class D<S> extends A<S> implements B<S> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.outline.expect b/pkg/front_end/testcases/general/issue41210a.dart.outline.expect
index ff689d2..f56ad37 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.outline.expect
@@ -93,12 +93,12 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract forwarding-stub method method(core::num* i, {core::String* s}) → core::String*;
+ abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> self::A::method
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
;
- abstract forwarding-stub method method(core::num* i, {core::String* s}) → core::String*;
+ abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> self::A::method
}
abstract class D extends core::Object implements self::Interface, self::Interface2 {
synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.strong.expect b/pkg/front_end/testcases/general/issue41210a.dart.strong.expect
index 85cb4c7..024bfb0 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.strong.expect
@@ -96,13 +96,13 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract forwarding-stub method method(core::num* i, {core::String* s = #C1}) → core::String*;
+ abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::A::method
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
: super self::_C&Object&A&B::•()
;
- abstract forwarding-stub method method(core::num* i, {core::String* s = #C1}) → core::String*;
+ abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::A::method
}
abstract class D extends core::Object implements self::Interface, self::Interface2 {
synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect
index 10de15c..ac3f13c 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect
@@ -27,12 +27,12 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract forwarding-stub method method(core::num* i, {core::String* s}) → core::String*;
+ abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> iss::A::method
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
;
- abstract forwarding-stub method method(core::num* i, {core::String* s}) → core::String*;
+ abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> iss::A::method
}
abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_E&Object&A*
@@ -48,7 +48,7 @@
class E extends self::_E&Object&A&D {
synthetic constructor •() → self::E*
;
- abstract forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*;
+ abstract member-signature method method(covariant core::num* i, {core::String* s}) → core::String*; -> self::_E&Object&A&D::method
}
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect
index 1bf6467..daad075 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect
@@ -27,13 +27,13 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract forwarding-stub method method(core::num* i, {core::String* s = #C1}) → core::String*;
+ abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> iss::A::method
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
: super self::_C&Object&A&B::•()
;
- abstract forwarding-stub method method(core::num* i, {core::String* s = #C1}) → core::String*;
+ abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> iss::A::method
}
abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_E&Object&A*
@@ -50,7 +50,7 @@
synthetic constructor •() → self::E*
: super self::_E&Object&A&D::•()
;
- abstract forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*;
+ abstract member-signature method method(covariant core::num* i, {core::String* s = #C1}) → core::String*; -> self::_E&Object&A&D::method
}
static method main() → dynamic {
core::print(new self::C::•().{self::C::method}(0));
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
index bb83e39..7ea8f01 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
@@ -203,7 +203,7 @@
synthetic constructor •() → self::A0*
: super self::S::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
+ abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
}
abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A1&S&M1*
@@ -214,7 +214,7 @@
synthetic constructor •() → self::A1*
: super self::_A1&S&M1::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
+ abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
}
abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A2&S&M1*
@@ -230,13 +230,13 @@
synthetic constructor •() → self::A2*
: super self::_A2&S&M1&M2::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
+ abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
}
abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A0X&S&M*
: super self::S::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
+ abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
}
class A0X = self::_A0X&S&M with self::MX {
synthetic constructor •() → self::A0X*
@@ -252,7 +252,7 @@
synthetic constructor •() → self::_A1X&S&M1&M*
: super self::_A1X&S&M1::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
+ abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
}
class A1X = self::_A1X&S&M1&M with self::MX {
synthetic constructor •() → self::A1X*
@@ -273,7 +273,7 @@
synthetic constructor •() → self::_A2X&S&M1&M2&M*
: super self::_A2X&S&M1&M2::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
+ abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
}
class A2X = self::_A2X&S&M1&M2&M with self::MX {
synthetic constructor •() → self::A2X*
@@ -284,7 +284,7 @@
synthetic constructor •() → self::_B0&S&M*
: super self::S::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
+ abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
}
class B0 extends self::_B0&S&M {
synthetic constructor •() → self::B0*
@@ -299,7 +299,7 @@
synthetic constructor •() → self::_B1&S&M1&M*
: super self::_B1&S&M1::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
+ abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
}
class B1 extends self::_B1&S&M1&M {
synthetic constructor •() → self::B1*
@@ -319,7 +319,7 @@
synthetic constructor •() → self::_B2&S&M1&M2&M*
: super self::_B2&S&M1&M2::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
+ abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
}
class B2 extends self::_B2&S&M1&M2&M {
synthetic constructor •() → self::B2*
@@ -329,7 +329,7 @@
synthetic constructor •() → self::_B0X&S&M*
: super self::S::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
+ abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
}
abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B0X&S&M&MX*
@@ -349,7 +349,7 @@
synthetic constructor •() → self::_B1X&S&M1&M*
: super self::_B1X&S&M1::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
+ abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
}
abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B1X&S&M1&M&MX*
@@ -374,7 +374,7 @@
synthetic constructor •() → self::_B2X&S&M1&M2&M*
: super self::_B2X&S&M1&M2::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
+ abstract member-signature method foo([dynamic x]) → dynamic; -> self::S::foo
}
abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B2X&S&M1&M2&M&MX*
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.strong.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.strong.expect
index f7fe382..5279085 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.strong.expect
@@ -206,7 +206,7 @@
synthetic constructor •() → self::A0*
: super self::S::•()
;
- abstract forwarding-stub method foo([dynamic x = #C1]) → dynamic;
+ abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
}
abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A1&S&M1*
@@ -217,7 +217,7 @@
synthetic constructor •() → self::A1*
: super self::_A1&S&M1::•()
;
- abstract forwarding-stub method foo([dynamic x = #C1]) → dynamic;
+ abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
}
abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A2&S&M1*
@@ -233,13 +233,13 @@
synthetic constructor •() → self::A2*
: super self::_A2&S&M1&M2::•()
;
- abstract forwarding-stub method foo([dynamic x = #C1]) → dynamic;
+ abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
}
abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A0X&S&M*
: super self::S::•()
;
- abstract forwarding-stub method foo([dynamic x = #C1]) → dynamic;
+ abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
}
class A0X = self::_A0X&S&M with self::MX {
synthetic constructor •() → self::A0X*
@@ -255,7 +255,7 @@
synthetic constructor •() → self::_A1X&S&M1&M*
: super self::_A1X&S&M1::•()
;
- abstract forwarding-stub method foo([dynamic x = #C1]) → dynamic;
+ abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
}
class A1X = self::_A1X&S&M1&M with self::MX {
synthetic constructor •() → self::A1X*
@@ -276,7 +276,7 @@
synthetic constructor •() → self::_A2X&S&M1&M2&M*
: super self::_A2X&S&M1&M2::•()
;
- abstract forwarding-stub method foo([dynamic x = #C1]) → dynamic;
+ abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
}
class A2X = self::_A2X&S&M1&M2&M with self::MX {
synthetic constructor •() → self::A2X*
@@ -287,7 +287,7 @@
synthetic constructor •() → self::_B0&S&M*
: super self::S::•()
;
- abstract forwarding-stub method foo([dynamic x = #C1]) → dynamic;
+ abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
}
class B0 extends self::_B0&S&M {
synthetic constructor •() → self::B0*
@@ -303,7 +303,7 @@
synthetic constructor •() → self::_B1&S&M1&M*
: super self::_B1&S&M1::•()
;
- abstract forwarding-stub method foo([dynamic x = #C1]) → dynamic;
+ abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
}
class B1 extends self::_B1&S&M1&M {
synthetic constructor •() → self::B1*
@@ -324,7 +324,7 @@
synthetic constructor •() → self::_B2&S&M1&M2&M*
: super self::_B2&S&M1&M2::•()
;
- abstract forwarding-stub method foo([dynamic x = #C1]) → dynamic;
+ abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
}
class B2 extends self::_B2&S&M1&M2&M {
synthetic constructor •() → self::B2*
@@ -335,7 +335,7 @@
synthetic constructor •() → self::_B0X&S&M*
: super self::S::•()
;
- abstract forwarding-stub method foo([dynamic x = #C1]) → dynamic;
+ abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
}
abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B0X&S&M&MX*
@@ -356,7 +356,7 @@
synthetic constructor •() → self::_B1X&S&M1&M*
: super self::_B1X&S&M1::•()
;
- abstract forwarding-stub method foo([dynamic x = #C1]) → dynamic;
+ abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
}
abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B1X&S&M1&M&MX*
@@ -382,7 +382,7 @@
synthetic constructor •() → self::_B2X&S&M1&M2&M*
: super self::_B2X&S&M1&M2::•()
;
- abstract forwarding-stub method foo([dynamic x = #C1]) → dynamic;
+ abstract member-signature method foo([dynamic x = #C1]) → dynamic; -> self::S::foo
}
abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B2X&S&M1&M2&M&MX*
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart b/pkg/front_end/testcases/general/nsm_covariance.dart
new file mode 100644
index 0000000..3ee3063
--- /dev/null
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// 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 'nsm_covariance_lib.dart';
+
+abstract class D1 implements A<int>, B {}
+
+abstract class D2 implements B, A<int> {}
+
+class D3 implements A<int>, B {
+ @override
+ noSuchMethod(Invocation invocation) => null;
+}
+
+class D4 implements B, A<int> {
+ @override
+ noSuchMethod(Invocation invocation) => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.outline.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.outline.expect
new file mode 100644
index 0000000..b434cfe
--- /dev/null
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.outline.expect
@@ -0,0 +1,298 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "nsm_covariance_lib.dart" as nsm;
+
+import "org-dartlang-testcase:///nsm_covariance_lib.dart";
+
+abstract class D1 extends core::Object implements nsm::A<core::int*>, nsm::B {
+ synthetic constructor •() → self::D1*
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void;
+ abstract forwarding-stub method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void;
+ abstract forwarding-stub method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void;
+ abstract forwarding-stub method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void;
+}
+abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int*> {
+ synthetic constructor •() → self::D2*
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void;
+ abstract forwarding-stub method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void;
+ abstract forwarding-stub method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void;
+ abstract forwarding-stub method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void;
+}
+class D3 extends core::Object implements nsm::A<core::int*>, nsm::B {
+ synthetic constructor •() → self::D3*
+ ;
+ @core::override
+ method noSuchMethod(core::Invocation* invocation) → dynamic
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
+ return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+ no-such-method-forwarder method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void
+ return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d})));
+ no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
+ return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+ no-such-method-forwarder method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void
+ return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b})));
+}
+class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
+ synthetic constructor •() → self::D4*
+ ;
+ @core::override
+ method noSuchMethod(core::Invocation* invocation) → dynamic
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
+ return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+ no-such-method-forwarder method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void
+ return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d})));
+ no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
+ return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+ no-such-method-forwarder method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void
+ return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b})));
+}
+static method main() → dynamic
+ ;
+
+library;
+import self as nsm;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → nsm::A<nsm::A::T*>*
+ ;
+ abstract method _method1(core::int* a, core::int* b, generic-covariant-impl nsm::A::T* c, generic-covariant-impl nsm::A::T* d) → void;
+ abstract method _method2({core::int* a, core::int* b, generic-covariant-impl nsm::A::T* c, generic-covariant-impl nsm::A::T* d}) → void;
+ abstract method _method3(core::int* a, generic-covariant-impl nsm::A::T* b) → void;
+ abstract method _method4({core::int* a, generic-covariant-impl nsm::A::T* b}) → void;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object {
+ synthetic constructor •() → nsm::B*
+ ;
+ abstract method _method1(core::int* x, covariant core::int* y, core::int* z, covariant core::int* w) → void;
+ abstract method _method2({core::int* a, covariant core::int* b, core::int* c, covariant core::int* d}) → void;
+ abstract method _method3(covariant core::int* x, core::int* y) → void;
+ abstract method _method4({covariant core::int* a, core::int* b}) → void;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C1 extends core::Object implements nsm::A<core::int*>, nsm::B {
+ synthetic constructor •() → nsm::C1*
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void;
+ abstract forwarding-stub method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void;
+ abstract forwarding-stub method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void;
+ abstract forwarding-stub method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void;
+}
+abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int*> {
+ synthetic constructor •() → nsm::C2*
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void;
+ abstract forwarding-stub method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void;
+ abstract forwarding-stub method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void;
+ abstract forwarding-stub method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void;
+}
+class C3 extends core::Object implements nsm::A<core::int*>, nsm::B {
+ synthetic constructor •() → nsm::C3*
+ ;
+ @core::override
+ method noSuchMethod(core::Invocation* invocation) → dynamic
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
+ return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+ no-such-method-forwarder method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void
+ return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d})));
+ no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
+ return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+ no-such-method-forwarder method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void
+ return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b})));
+}
+class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
+ synthetic constructor •() → nsm::C4*
+ ;
+ @core::override
+ method noSuchMethod(core::Invocation* invocation) → dynamic
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
+ return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+ no-such-method-forwarder method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void
+ return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d})));
+ no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
+ return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
+ no-such-method-forwarder method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void
+ return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b})));
+}
+
+
+Extra constant evaluation status:
+Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance.dart:12:4 -> InstanceConstant(const _Override{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#_method1)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#_method2)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> ListConstant(const <dynamic>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#a)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#b)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#c)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#d)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#_method3)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#_method4)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> ListConstant(const <dynamic>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#a)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#b)
+Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance.dart:17:4 -> InstanceConstant(const _Override{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#_method1)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#_method2)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> ListConstant(const <dynamic>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#a)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#b)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#c)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#d)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#_method3)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#_method4)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> ListConstant(const <dynamic>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#a)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#b)
+Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance_lib.dart:24:4 -> InstanceConstant(const _Override{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#_method1)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#_method2)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <dynamic>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#a)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#b)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#c)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#d)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#_method3)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#_method4)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <dynamic>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#a)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#b)
+Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance_lib.dart:29:4 -> InstanceConstant(const _Override{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#_method1)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#_method2)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> ListConstant(const <dynamic>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#a)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#b)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#c)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#d)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#_method3)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#_method4)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> ListConstant(const <dynamic>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#a)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:28:7 -> SymbolConstant(#b)
+Extra constant evaluation: evaluated: 212, effectively constant: 76
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.strong.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.strong.expect
new file mode 100644
index 0000000..ee2b26a
--- /dev/null
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.strong.expect
@@ -0,0 +1,247 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "nsm_covariance_lib.dart" as nsm;
+
+import "org-dartlang-testcase:///nsm_covariance_lib.dart";
+
+abstract class D1 extends core::Object implements nsm::A<core::int*>, nsm::B {
+ synthetic constructor •() → self::D1*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void;
+ abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
+ abstract forwarding-stub method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void;
+ abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+}
+abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int*> {
+ synthetic constructor •() → self::D2*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void;
+ abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
+ abstract forwarding-stub method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void;
+ abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+}
+class D3 extends core::Object implements nsm::A<core::int*>, nsm::B {
+ synthetic constructor •() → self::D3*
+ : super core::Object::•()
+ ;
+ @#C2
+ method noSuchMethod(core::Invocation* invocation) → dynamic
+ return null;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
+ return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+ return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+ no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
+ return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+ return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+}
+class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
+ synthetic constructor •() → self::D4*
+ : super core::Object::•()
+ ;
+ @#C2
+ method noSuchMethod(core::Invocation* invocation) → dynamic
+ return null;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
+ return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+ return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+ no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
+ return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+ return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+}
+static method main() → dynamic {}
+
+library;
+import self as nsm;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → nsm::A<nsm::A::T*>*
+ : super core::Object::•()
+ ;
+ abstract method _method1(core::int* a, core::int* b, generic-covariant-impl nsm::A::T* c, generic-covariant-impl nsm::A::T* d) → void;
+ abstract method _method2({core::int* a = #C1, core::int* b = #C1, generic-covariant-impl nsm::A::T* c = #C1, generic-covariant-impl nsm::A::T* d = #C1}) → void;
+ abstract method _method3(core::int* a, generic-covariant-impl nsm::A::T* b) → void;
+ abstract method _method4({core::int* a = #C1, generic-covariant-impl nsm::A::T* b = #C1}) → void;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object {
+ synthetic constructor •() → nsm::B*
+ : super core::Object::•()
+ ;
+ abstract method _method1(core::int* x, covariant core::int* y, core::int* z, covariant core::int* w) → void;
+ abstract method _method2({core::int* a = #C1, covariant core::int* b = #C1, core::int* c = #C1, covariant core::int* d = #C1}) → void;
+ abstract method _method3(covariant core::int* x, core::int* y) → void;
+ abstract method _method4({covariant core::int* a = #C1, core::int* b = #C1}) → void;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C1 extends core::Object implements nsm::A<core::int*>, nsm::B {
+ synthetic constructor •() → nsm::C1*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void;
+ abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
+ abstract forwarding-stub method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void;
+ abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+}
+abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int*> {
+ synthetic constructor •() → nsm::C2*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void;
+ abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
+ abstract forwarding-stub method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void;
+ abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+}
+class C3 extends core::Object implements nsm::A<core::int*>, nsm::B {
+ synthetic constructor •() → nsm::C3*
+ : super core::Object::•()
+ ;
+ @#C2
+ method noSuchMethod(core::Invocation* invocation) → dynamic
+ return null;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
+ return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+ return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+ no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
+ return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+ return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+}
+class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
+ synthetic constructor •() → nsm::C4*
+ : super core::Object::•()
+ ;
+ @#C2
+ method noSuchMethod(core::Invocation* invocation) → dynamic
+ return null;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
+ return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+ return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+ no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
+ return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+ return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+}
+
+constants {
+ #C1 = null
+ #C2 = core::_Override {}
+ #C3 = #org-dartlang-testcase:///nsm_covariance.dart::_method1
+ #C4 = <core::Type*>[]
+ #C5 = <dynamic>[]
+ #C6 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C5}
+ #C7 = #org-dartlang-testcase:///nsm_covariance.dart::_method2
+ #C8 = #a
+ #C9 = #b
+ #C10 = #c
+ #C11 = #d
+ #C12 = #org-dartlang-testcase:///nsm_covariance.dart::_method3
+ #C13 = #org-dartlang-testcase:///nsm_covariance.dart::_method4
+ #C14 = #org-dartlang-testcase:///nsm_covariance_lib.dart::_method1
+ #C15 = #org-dartlang-testcase:///nsm_covariance_lib.dart::_method2
+ #C16 = #org-dartlang-testcase:///nsm_covariance_lib.dart::_method3
+ #C17 = #org-dartlang-testcase:///nsm_covariance_lib.dart::_method4
+}
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.strong.transformed.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.strong.transformed.expect
new file mode 100644
index 0000000..ee2b26a
--- /dev/null
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.strong.transformed.expect
@@ -0,0 +1,247 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "nsm_covariance_lib.dart" as nsm;
+
+import "org-dartlang-testcase:///nsm_covariance_lib.dart";
+
+abstract class D1 extends core::Object implements nsm::A<core::int*>, nsm::B {
+ synthetic constructor •() → self::D1*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void;
+ abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
+ abstract forwarding-stub method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void;
+ abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+}
+abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int*> {
+ synthetic constructor •() → self::D2*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void;
+ abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
+ abstract forwarding-stub method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void;
+ abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+}
+class D3 extends core::Object implements nsm::A<core::int*>, nsm::B {
+ synthetic constructor •() → self::D3*
+ : super core::Object::•()
+ ;
+ @#C2
+ method noSuchMethod(core::Invocation* invocation) → dynamic
+ return null;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
+ return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+ return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+ no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
+ return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+ return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+}
+class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
+ synthetic constructor •() → self::D4*
+ : super core::Object::•()
+ ;
+ @#C2
+ method noSuchMethod(core::Invocation* invocation) → dynamic
+ return null;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
+ return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+ return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+ no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
+ return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+ return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+}
+static method main() → dynamic {}
+
+library;
+import self as nsm;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → nsm::A<nsm::A::T*>*
+ : super core::Object::•()
+ ;
+ abstract method _method1(core::int* a, core::int* b, generic-covariant-impl nsm::A::T* c, generic-covariant-impl nsm::A::T* d) → void;
+ abstract method _method2({core::int* a = #C1, core::int* b = #C1, generic-covariant-impl nsm::A::T* c = #C1, generic-covariant-impl nsm::A::T* d = #C1}) → void;
+ abstract method _method3(core::int* a, generic-covariant-impl nsm::A::T* b) → void;
+ abstract method _method4({core::int* a = #C1, generic-covariant-impl nsm::A::T* b = #C1}) → void;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object {
+ synthetic constructor •() → nsm::B*
+ : super core::Object::•()
+ ;
+ abstract method _method1(core::int* x, covariant core::int* y, core::int* z, covariant core::int* w) → void;
+ abstract method _method2({core::int* a = #C1, covariant core::int* b = #C1, core::int* c = #C1, covariant core::int* d = #C1}) → void;
+ abstract method _method3(covariant core::int* x, core::int* y) → void;
+ abstract method _method4({covariant core::int* a = #C1, core::int* b = #C1}) → void;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C1 extends core::Object implements nsm::A<core::int*>, nsm::B {
+ synthetic constructor •() → nsm::C1*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void;
+ abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
+ abstract forwarding-stub method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void;
+ abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+}
+abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int*> {
+ synthetic constructor •() → nsm::C2*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void;
+ abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
+ abstract forwarding-stub method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void;
+ abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+}
+class C3 extends core::Object implements nsm::A<core::int*>, nsm::B {
+ synthetic constructor •() → nsm::C3*
+ : super core::Object::•()
+ ;
+ @#C2
+ method noSuchMethod(core::Invocation* invocation) → dynamic
+ return null;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
+ return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+ return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+ no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
+ return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+ return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+}
+class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
+ synthetic constructor •() → nsm::C4*
+ : super core::Object::•()
+ ;
+ @#C2
+ method noSuchMethod(core::Invocation* invocation) → dynamic
+ return null;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
+ return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+ return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d})));
+ no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
+ return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6)));
+ no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+ return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b})));
+}
+
+constants {
+ #C1 = null
+ #C2 = core::_Override {}
+ #C3 = #org-dartlang-testcase:///nsm_covariance.dart::_method1
+ #C4 = <core::Type*>[]
+ #C5 = <dynamic>[]
+ #C6 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C5}
+ #C7 = #org-dartlang-testcase:///nsm_covariance.dart::_method2
+ #C8 = #a
+ #C9 = #b
+ #C10 = #c
+ #C11 = #d
+ #C12 = #org-dartlang-testcase:///nsm_covariance.dart::_method3
+ #C13 = #org-dartlang-testcase:///nsm_covariance.dart::_method4
+ #C14 = #org-dartlang-testcase:///nsm_covariance_lib.dart::_method1
+ #C15 = #org-dartlang-testcase:///nsm_covariance_lib.dart::_method2
+ #C16 = #org-dartlang-testcase:///nsm_covariance_lib.dart::_method3
+ #C17 = #org-dartlang-testcase:///nsm_covariance_lib.dart::_method4
+}
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline.expect
new file mode 100644
index 0000000..9419fb3
--- /dev/null
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline.expect
@@ -0,0 +1,17 @@
+import 'nsm_covariance_lib.dart';
+
+abstract class D1 implements A<int>, B {}
+
+abstract class D2 implements B, A<int> {}
+
+class D3 implements A<int>, B {
+ @override
+ noSuchMethod(Invocation invocation) => null;
+}
+
+class D4 implements B, A<int> {
+ @override
+ noSuchMethod(Invocation invocation) => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9419fb3
--- /dev/null
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline_modelled.expect
@@ -0,0 +1,17 @@
+import 'nsm_covariance_lib.dart';
+
+abstract class D1 implements A<int>, B {}
+
+abstract class D2 implements B, A<int> {}
+
+class D3 implements A<int>, B {
+ @override
+ noSuchMethod(Invocation invocation) => null;
+}
+
+class D4 implements B, A<int> {
+ @override
+ noSuchMethod(Invocation invocation) => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/nsm_covariance_lib.dart b/pkg/front_end/testcases/general/nsm_covariance_lib.dart
new file mode 100644
index 0000000..1afd545
--- /dev/null
+++ b/pkg/front_end/testcases/general/nsm_covariance_lib.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// 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.
+
+abstract class A<T> {
+ void _method1(int a, int b, T c, T d);
+ void _method2({int a, int b, T c, T d});
+ void _method3(int a, T b);
+ void _method4({int a, T b});
+}
+
+abstract class B {
+ void _method1(int x, covariant int y, int z, covariant int w);
+ void _method2({int a, covariant int b, int c, covariant int d});
+ void _method3(covariant int x, int y);
+ void _method4({covariant int a, int b});
+}
+
+abstract class C1 implements A<int>, B {}
+
+abstract class C2 implements B, A<int> {}
+
+class C3 implements A<int>, B {
+ @override
+ noSuchMethod(Invocation invocation) => null;
+}
+
+class C4 implements B, A<int> {
+ @override
+ noSuchMethod(Invocation invocation) => null;
+}
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.outline.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.outline.expect
index c4a5102..b870822 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.outline.expect
@@ -154,8 +154,8 @@
abstract set setterFromGetter(invalid-type value) → void;
abstract get getterFromGetterWithSetterConflict() → core::num*;
abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
- abstract forwarding-stub get setterFromGetter() → core::int*;
- abstract forwarding-stub get setterFromSetterWithGetterConflict() → core::int*;
+ abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
+ abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
}
abstract class E extends core::Object implements self::A {
synthetic constructor •() → self::E*
@@ -186,8 +186,8 @@
abstract set setterFromGetter(invalid-type value) → void;
abstract get getterFromGetterWithSetterConflict() → core::num*;
abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
- abstract forwarding-stub get setterFromGetter() → core::int*;
- abstract forwarding-stub get setterFromSetterWithGetterConflict() → core::int*;
+ abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
+ abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.expect
index 81942f2..1eaabf2 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.expect
@@ -158,8 +158,8 @@
abstract set setterFromGetter(invalid-type value) → void;
abstract get getterFromGetterWithSetterConflict() → core::num*;
abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
- abstract forwarding-stub get setterFromGetter() → core::int*;
- abstract forwarding-stub get setterFromSetterWithGetterConflict() → core::int*;
+ abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
+ abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
}
abstract class E extends core::Object implements self::A {
synthetic constructor •() → self::E*
@@ -192,8 +192,8 @@
abstract set setterFromGetter(invalid-type value) → void;
abstract get getterFromGetterWithSetterConflict() → core::num*;
abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
- abstract forwarding-stub get setterFromGetter() → core::int*;
- abstract forwarding-stub get setterFromSetterWithGetterConflict() → core::int*;
+ abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
+ abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.transformed.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.transformed.expect
index 81942f2..1eaabf2 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.transformed.expect
@@ -158,8 +158,8 @@
abstract set setterFromGetter(invalid-type value) → void;
abstract get getterFromGetterWithSetterConflict() → core::num*;
abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
- abstract forwarding-stub get setterFromGetter() → core::int*;
- abstract forwarding-stub get setterFromSetterWithGetterConflict() → core::int*;
+ abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
+ abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
}
abstract class E extends core::Object implements self::A {
synthetic constructor •() → self::E*
@@ -192,8 +192,8 @@
abstract set setterFromGetter(invalid-type value) → void;
abstract get getterFromGetterWithSetterConflict() → core::num*;
abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
- abstract forwarding-stub get setterFromGetter() → core::int*;
- abstract forwarding-stub get setterFromSetterWithGetterConflict() → core::int*;
+ abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
+ abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/assert_super.dart b/pkg/front_end/testcases/general/super_access_in_initializer.dart
similarity index 63%
copy from pkg/front_end/testcases/general/assert_super.dart
copy to pkg/front_end/testcases/general/super_access_in_initializer.dart
index 93a32ef..2bab9f4 100644
--- a/pkg/front_end/testcases/general/assert_super.dart
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart
@@ -4,10 +4,19 @@
class Super {
bool get property => true;
+
+ Super(bool value);
}
class Class extends Super {
- Class() : assert(property);
+ bool field;
+
+ Class(bool value)
+ : assert(property),
+ this.field = property,
+ super(property);
+
+ Class.redirect() : this(property);
}
main() {}
diff --git a/pkg/front_end/testcases/general/assert_super.dart.outline.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.outline.expect
similarity index 87%
rename from pkg/front_end/testcases/general/assert_super.dart.outline.expect
rename to pkg/front_end/testcases/general/super_access_in_initializer.dart.outline.expect
index 309b5d0..3b22099 100644
--- a/pkg/front_end/testcases/general/assert_super.dart.outline.expect
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.outline.expect
@@ -3,7 +3,7 @@
import "dart:core" as core;
class Super extends core::Object {
- synthetic constructor •() → self::Super*
+ constructor •(core::bool* value) → self::Super*
;
get property() → core::bool*
;
@@ -19,7 +19,10 @@
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
class Class extends self::Super {
- constructor •() → self::Class*
+ field core::bool* field;
+ constructor •(core::bool* value) → self::Class*
+ ;
+ constructor redirect() → self::Class*
;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.strong.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.strong.expect
new file mode 100644
index 0000000..690c624
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.strong.expect
@@ -0,0 +1,58 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Getter not found: 'property'.
+// : assert(property),
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Getter not found: 'property'.
+// this.field = property,
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Getter not found: 'property'.
+// super(property);
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Getter not found: 'property'.
+// Class.redirect() : this(property);
+// ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+ constructor •(core::bool* value) → self::Super*
+ : super core::Object::•()
+ ;
+ get property() → core::bool*
+ return true;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class extends self::Super {
+ field core::bool* field;
+ constructor •(core::bool* value) → self::Class*
+ : assert(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Getter not found: 'property'.
+ : assert(property),
+ ^^^^^^^^" as{TypeError,ForDynamic} core::bool*), self::Class::field = invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Getter not found: 'property'.
+ this.field = property,
+ ^^^^^^^^" as{TypeError,ForDynamic} core::bool*, super self::Super::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Getter not found: 'property'.
+ super(property);
+ ^^^^^^^^" as{TypeError,ForDynamic} core::bool*)
+ ;
+ constructor redirect() → self::Class*
+ : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Getter not found: 'property'.
+ Class.redirect() : this(property);
+ ^^^^^^^^" as{TypeError,ForDynamic} core::bool*)
+ ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.strong.transformed.expect
new file mode 100644
index 0000000..57f7ead
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.strong.transformed.expect
@@ -0,0 +1,58 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Getter not found: 'property'.
+// : assert(property),
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Getter not found: 'property'.
+// this.field = property,
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Getter not found: 'property'.
+// super(property);
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Getter not found: 'property'.
+// Class.redirect() : this(property);
+// ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+ constructor •(core::bool* value) → self::Super*
+ : super core::Object::•()
+ ;
+ get property() → core::bool*
+ return true;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class extends self::Super {
+ field core::bool* field;
+ constructor •(core::bool* value) → self::Class*
+ : assert(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Getter not found: 'property'.
+ : assert(property),
+ ^^^^^^^^"), self::Class::field = invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Getter not found: 'property'.
+ this.field = property,
+ ^^^^^^^^", super self::Super::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Getter not found: 'property'.
+ super(property);
+ ^^^^^^^^")
+ ;
+ constructor redirect() → self::Class*
+ : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Getter not found: 'property'.
+ Class.redirect() : this(property);
+ ^^^^^^^^")
+ ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline.expect
new file mode 100644
index 0000000..5548e99
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class Super {
+ bool get property => true;
+ Super(bool value);
+}
+
+class Class extends Super {
+ bool field;
+ Class(bool value)
+ : assert(property),
+ this.field = property,
+ super(property);
+ Class.redirect() : this(property);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b009d58
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class Class extends Super {
+ Class(bool value)
+ : assert(property),
+ this.field = property,
+ super(property);
+ Class.redirect() : this(property);
+ bool field;
+}
+
+class Super {
+ Super(bool value);
+ bool get property => true;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.outline.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.outline.expect
index b83e3527..c556a30 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.outline.expect
@@ -47,7 +47,7 @@
abstract class Foo extends stu::Baz implements stu::Qux {
synthetic constructor •() → stu::Foo*
;
- abstract forwarding-stub method handleEvent(covariant stu2::EvenFileB* entry) → void;
+ abstract member-signature method handleEvent(covariant stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
}
library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.strong.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.strong.expect
index bd2e86c..a45bc9f 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.strong.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.strong.expect
@@ -49,7 +49,7 @@
synthetic constructor •() → stu::Foo*
: super stu::Baz::•()
;
- abstract forwarding-stub method handleEvent(covariant stu2::EvenFileB* entry) → void;
+ abstract member-signature method handleEvent(covariant stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
}
library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.strong.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.strong.transformed.expect
index bd2e86c..a45bc9f 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.strong.transformed.expect
@@ -49,7 +49,7 @@
synthetic constructor •() → stu::Foo*
: super stu::Baz::•()
;
- abstract forwarding-stub method handleEvent(covariant stu2::EvenFileB* entry) → void;
+ abstract member-signature method handleEvent(covariant stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
}
library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.outline.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.outline.expect
index b83e3527..c556a30 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.outline.expect
@@ -47,7 +47,7 @@
abstract class Foo extends stu::Baz implements stu::Qux {
synthetic constructor •() → stu::Foo*
;
- abstract forwarding-stub method handleEvent(covariant stu2::EvenFileB* entry) → void;
+ abstract member-signature method handleEvent(covariant stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
}
library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.strong.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.strong.expect
index bd2e86c..a45bc9f 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.strong.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.strong.expect
@@ -49,7 +49,7 @@
synthetic constructor •() → stu::Foo*
: super stu::Baz::•()
;
- abstract forwarding-stub method handleEvent(covariant stu2::EvenFileB* entry) → void;
+ abstract member-signature method handleEvent(covariant stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
}
library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.strong.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.strong.transformed.expect
index bd2e86c..a45bc9f 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.strong.transformed.expect
@@ -49,7 +49,7 @@
synthetic constructor •() → stu::Foo*
: super stu::Baz::•()
;
- abstract forwarding-stub method handleEvent(covariant stu2::EvenFileB* entry) → void;
+ abstract member-signature method handleEvent(covariant stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
}
library;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.1.expect
index 6895d48..04687de 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.1.expect
@@ -65,7 +65,7 @@
: super fra::State::•()
;
abstract member-signature get _widget() → main::HotReloadIssue*; -> fra::State::_widget
- abstract member-signature set _widget(generic-covariant-impl main::HotReloadIssue* _) → void; -> fra::State::_widget
+ abstract member-signature set _widget(generic-covariant-impl main::HotReloadIssue* value) → void; -> fra::State::_widget
abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_mixin_failure_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_mixin_failure_1.yaml.world.1.expect
index 0f97f6e..2c5d2fd 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_mixin_failure_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_mixin_failure_1.yaml.world.1.expect
@@ -65,7 +65,7 @@
synthetic constructor •() → lib::_Quux&Qux&MyMixin*
: super lib::Qux::•()
;
- abstract forwarding-stub method hello(covariant lib::FooEntry* entry) → void;
+ abstract member-signature method hello(covariant lib::FooEntry* entry) → void; -> lib::Baz::hello
}
class Quux extends lib::_Quux&Qux&MyMixin {
synthetic constructor •() → lib::Quux*
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_mixin_failure_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_mixin_failure_1.yaml.world.2.expect
index 8e8e3ac2..ecde5ba 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_mixin_failure_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_mixin_failure_1.yaml.world.2.expect
@@ -65,7 +65,7 @@
synthetic constructor •() → lib::_Quux&Qux&MyMixin*
: super lib::Qux::•()
;
- abstract forwarding-stub method hello(covariant lib::FooEntry* entry) → void;
+ abstract member-signature method hello(covariant lib::FooEntry* entry) → void; -> lib::Baz::hello
}
class Quux extends lib::_Quux&Qux&MyMixin {
synthetic constructor •() → lib::Quux*
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.outline.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.outline.expect
index e5919b6..f0b94c5 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.outline.expect
@@ -35,7 +35,7 @@
abstract class C extends core::Object implements self::I1, self::I2 {
synthetic constructor •() → self::C*
;
- abstract forwarding-stub method f(core::Object* o) → void;
+ abstract member-signature method f(core::Object* o) → void; -> self::I2::f
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.strong.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.strong.expect
index 1bba772..fa1ffe6 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.strong.expect
@@ -38,7 +38,7 @@
synthetic constructor •() → self::C*
: super core::Object::•()
;
- abstract forwarding-stub method f(core::Object* o) → void;
+ abstract member-signature method f(core::Object* o) → void; -> self::I2::f
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.strong.transformed.expect
index 1bba772..fa1ffe6 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.strong.transformed.expect
@@ -38,7 +38,7 @@
synthetic constructor •() → self::C*
: super core::Object::•()
;
- abstract forwarding-stub method f(core::Object* o) → void;
+ abstract member-signature method f(core::Object* o) → void; -> self::I2::f
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
index 9eb5b34..b2a5eac 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
@@ -72,7 +72,7 @@
abstract class G extends core::Object implements self::D, self::E, self::F {
synthetic constructor •() → self::G*
;
- abstract forwarding-stub method foo() → self::B*;
+ abstract member-signature method foo() → self::B*; -> self::E::foo
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.strong.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.strong.expect
index 9b6fa53..8be3350 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.strong.expect
@@ -79,7 +79,7 @@
synthetic constructor •() → self::G*
: super core::Object::•()
;
- abstract forwarding-stub method foo() → self::B*;
+ abstract member-signature method foo() → self::B*; -> self::E::foo
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.strong.transformed.expect
index 9b6fa53..8be3350 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.strong.transformed.expect
@@ -79,7 +79,7 @@
synthetic constructor •() → self::G*
: super core::Object::•()
;
- abstract forwarding-stub method foo() → self::B*;
+ abstract member-signature method foo() → self::B*; -> self::E::foo
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.outline.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.outline.expect
index 13c5cf9..b7a7d1d 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.outline.expect
@@ -8,9 +8,9 @@
class C extends iss::B {
synthetic constructor •() → self::C
;
- no-such-method-forwarder get /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
+ no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_#A#x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
- no-such-method-forwarder set /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
+ no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_#A#x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.expect
index 0a12b0f..05bf5e3 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.expect
@@ -9,9 +9,9 @@
synthetic constructor •() → self::C
: super iss::B::•()
;
- no-such-method-forwarder get /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
+ no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
- no-such-method-forwarder set /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
+ no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
}
static method main() → dynamic {
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.transformed.expect
index 0a12b0f..05bf5e3 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.strong.transformed.expect
@@ -9,9 +9,9 @@
synthetic constructor •() → self::C
: super iss::B::•()
;
- no-such-method-forwarder get /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
+ no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
- no-such-method-forwarder set /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
+ no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
}
static method main() → dynamic {
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.expect
index 7e60e14..432f8c1 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.expect
@@ -9,13 +9,13 @@
synthetic constructor •() → self::C
: super iss::B::•()
;
- no-such-method-forwarder get /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet() → core::bool
+ no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet() → core::bool
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
- no-such-method-forwarder get /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
+ no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
- no-such-method-forwarder set /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet(core::bool value) → void
+ no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet(core::bool value) → void
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
- no-such-method-forwarder set /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
+ no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
}
static method main() → dynamic {
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.transformed.expect
index 7e60e14..432f8c1 100644
--- a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.transformed.expect
@@ -9,13 +9,13 @@
synthetic constructor •() → self::C
: super iss::B::•()
;
- no-such-method-forwarder get /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet() → core::bool
+ no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet() → core::bool
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
- no-such-method-forwarder get /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
+ no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
- no-such-method-forwarder set /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet(core::bool value) → void
+ no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet(core::bool value) → void
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
- no-such-method-forwarder set /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
+ no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
}
static method main() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.outline.expect b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.outline.expect
index 27f6cc7..9504dc6 100644
--- a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.outline.expect
@@ -34,7 +34,7 @@
abstract class D4 extends core::Object implements self::C, self::B {
synthetic constructor •() → self::D4
;
- abstract forwarding-stub method method(covariant core::num a) → void;
+ abstract member-signature method method(covariant core::num a) → void; -> self::B::method
}
abstract class D5 extends core::Object implements self::A, self::C {
synthetic constructor •() → self::D5
diff --git a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.expect b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.expect
index a513c5a..85ec816 100644
--- a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.expect
@@ -41,7 +41,7 @@
synthetic constructor •() → self::D4
: super core::Object::•()
;
- abstract forwarding-stub method method(covariant core::num a) → void;
+ abstract member-signature method method(covariant core::num a) → void; -> self::B::method
}
abstract class D5 extends core::Object implements self::A, self::C {
synthetic constructor •() → self::D5
diff --git a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.transformed.expect
index a513c5a..85ec816 100644
--- a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.transformed.expect
@@ -41,7 +41,7 @@
synthetic constructor •() → self::D4
: super core::Object::•()
;
- abstract forwarding-stub method method(covariant core::num a) → void;
+ abstract member-signature method method(covariant core::num a) → void; -> self::B::method
}
abstract class D5 extends core::Object implements self::A, self::C {
synthetic constructor •() → self::D5
diff --git a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.expect b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.expect
index a513c5a..85ec816 100644
--- a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.expect
@@ -41,7 +41,7 @@
synthetic constructor •() → self::D4
: super core::Object::•()
;
- abstract forwarding-stub method method(covariant core::num a) → void;
+ abstract member-signature method method(covariant core::num a) → void; -> self::B::method
}
abstract class D5 extends core::Object implements self::A, self::C {
synthetic constructor •() → self::D5
diff --git a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.transformed.expect
index a513c5a..85ec816 100644
--- a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.transformed.expect
@@ -41,7 +41,7 @@
synthetic constructor •() → self::D4
: super core::Object::•()
;
- abstract forwarding-stub method method(covariant core::num a) → void;
+ abstract member-signature method method(covariant core::num a) → void; -> self::B::method
}
abstract class D5 extends core::Object implements self::A, self::C {
synthetic constructor •() → self::D5
diff --git a/pkg/front_end/testcases/nnbd/infer_method_types.dart.outline.expect b/pkg/front_end/testcases/nnbd/infer_method_types.dart.outline.expect
index fa99f33..37ff6de 100644
--- a/pkg/front_end/testcases/nnbd/infer_method_types.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/infer_method_types.dart.outline.expect
@@ -40,7 +40,7 @@
abstract class H extends core::Object implements self::D, self::E, self::F, self::C {
synthetic constructor •() → self::H
;
- abstract forwarding-stub method m(covariant core::num a) → core::Object?;
+ abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
}
abstract class I extends core::Object implements self::D {
synthetic constructor •() → self::I
@@ -55,7 +55,7 @@
abstract class K extends core::Object implements self::I, self::E, self::G {
synthetic constructor •() → self::K
;
- abstract forwarding-stub method m(covariant core::num a) → core::Object?;
+ abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
}
abstract class L extends core::Object implements self::K {
synthetic constructor •() → self::L
diff --git a/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.expect b/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.expect
index 5bd5e36..bbe06cb 100644
--- a/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.expect
@@ -48,7 +48,7 @@
synthetic constructor •() → self::H
: super core::Object::•()
;
- abstract forwarding-stub method m(covariant core::num a) → core::Object?;
+ abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
}
abstract class I extends core::Object implements self::D {
synthetic constructor •() → self::I
@@ -66,7 +66,7 @@
synthetic constructor •() → self::K
: super core::Object::•()
;
- abstract forwarding-stub method m(covariant core::num a) → core::Object?;
+ abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
}
abstract class L extends core::Object implements self::K {
synthetic constructor •() → self::L
diff --git a/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.transformed.expect
index 5bd5e36..bbe06cb 100644
--- a/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.transformed.expect
@@ -48,7 +48,7 @@
synthetic constructor •() → self::H
: super core::Object::•()
;
- abstract forwarding-stub method m(covariant core::num a) → core::Object?;
+ abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
}
abstract class I extends core::Object implements self::D {
synthetic constructor •() → self::I
@@ -66,7 +66,7 @@
synthetic constructor •() → self::K
: super core::Object::•()
;
- abstract forwarding-stub method m(covariant core::num a) → core::Object?;
+ abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
}
abstract class L extends core::Object implements self::K {
synthetic constructor •() → self::L
diff --git a/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.expect b/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.expect
index 5bd5e36..bbe06cb 100644
--- a/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.expect
@@ -48,7 +48,7 @@
synthetic constructor •() → self::H
: super core::Object::•()
;
- abstract forwarding-stub method m(covariant core::num a) → core::Object?;
+ abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
}
abstract class I extends core::Object implements self::D {
synthetic constructor •() → self::I
@@ -66,7 +66,7 @@
synthetic constructor •() → self::K
: super core::Object::•()
;
- abstract forwarding-stub method m(covariant core::num a) → core::Object?;
+ abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
}
abstract class L extends core::Object implements self::K {
synthetic constructor •() → self::L
diff --git a/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.transformed.expect
index 5bd5e36..bbe06cb 100644
--- a/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.transformed.expect
@@ -48,7 +48,7 @@
synthetic constructor •() → self::H
: super core::Object::•()
;
- abstract forwarding-stub method m(covariant core::num a) → core::Object?;
+ abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
}
abstract class I extends core::Object implements self::D {
synthetic constructor •() → self::I
@@ -66,7 +66,7 @@
synthetic constructor •() → self::K
: super core::Object::•()
;
- abstract forwarding-stub method m(covariant core::num a) → core::Object?;
+ abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
}
abstract class L extends core::Object implements self::K {
synthetic constructor •() → self::L
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.outline.expect
index 7a7cf1a..de61651 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.outline.expect
@@ -10,15 +10,15 @@
;
method noSuchMethod(core::Invocation invocation) → dynamic
;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError}) → asy::Future<self::Divergent::then::R%>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError}) → asy::Future<self::Divergent::then::R%>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#then, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onError: onError}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
}
static method test() → dynamic async
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
index 6a41594..e5372a7 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
@@ -26,15 +26,15 @@
;
method noSuchMethod(core::Invocation invocation) → dynamic
return super.{core::Object::noSuchMethod}(invocation);
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
}
static method test() → dynamic async {
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
index 6a41594..e5372a7 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
@@ -26,15 +26,15 @@
;
method noSuchMethod(core::Invocation invocation) → dynamic
return super.{core::Object::noSuchMethod}(invocation);
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
- no-such-method-forwarder method /*isNullableByDefault, from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
+ no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
}
static method test() → dynamic async {
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.outline.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.outline.expect
index 5e9a2cc..eca66dc 100644
--- a/pkg/front_end/testcases/nnbd/override_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.outline.expect
@@ -283,9 +283,9 @@
abstract set setter1c(invalid-type x) → void;
abstract set setter1d(core::String x) → void;
abstract set setter1e(core::Object x) → void;
- abstract forwarding-stub set getter1d(core::Object x) → void;
- abstract forwarding-stub set getter1e(core::Object x) → void;
- abstract forwarding-stub set field2a(core::num? value) → void;
+ abstract member-signature set getter1d(core::Object x) → void; -> self::B::getter1d
+ abstract member-signature set getter1e(core::Object x) → void; -> self::B::getter1e
+ abstract member-signature set field2a(core::num? value) → void; -> self::B::field2a
}
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.strong.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.strong.expect
index 71e2237..0a80f3f 100644
--- a/pkg/front_end/testcases/nnbd/override_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.strong.expect
@@ -285,9 +285,9 @@
abstract set setter1c(invalid-type x) → void;
abstract set setter1d(core::String x) → void;
abstract set setter1e(core::Object x) → void;
- abstract forwarding-stub set getter1d(core::Object x) → void;
- abstract forwarding-stub set getter1e(core::Object x) → void;
- abstract forwarding-stub set field2a(core::num? value) → void;
+ abstract member-signature set getter1d(core::Object x) → void; -> self::B::getter1d
+ abstract member-signature set getter1e(core::Object x) → void; -> self::B::getter1e
+ abstract member-signature set field2a(core::num? value) → void; -> self::B::field2a
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.strong.transformed.expect
index 71e2237..0a80f3f 100644
--- a/pkg/front_end/testcases/nnbd/override_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.strong.transformed.expect
@@ -285,9 +285,9 @@
abstract set setter1c(invalid-type x) → void;
abstract set setter1d(core::String x) → void;
abstract set setter1e(core::Object x) → void;
- abstract forwarding-stub set getter1d(core::Object x) → void;
- abstract forwarding-stub set getter1e(core::Object x) → void;
- abstract forwarding-stub set field2a(core::num? value) → void;
+ abstract member-signature set getter1d(core::Object x) → void; -> self::B::getter1d
+ abstract member-signature set getter1e(core::Object x) → void; -> self::B::getter1e
+ abstract member-signature set field2a(core::num? value) → void; -> self::B::field2a
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.expect
index 71e2237..0a80f3f 100644
--- a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.expect
@@ -285,9 +285,9 @@
abstract set setter1c(invalid-type x) → void;
abstract set setter1d(core::String x) → void;
abstract set setter1e(core::Object x) → void;
- abstract forwarding-stub set getter1d(core::Object x) → void;
- abstract forwarding-stub set getter1e(core::Object x) → void;
- abstract forwarding-stub set field2a(core::num? value) → void;
+ abstract member-signature set getter1d(core::Object x) → void; -> self::B::getter1d
+ abstract member-signature set getter1e(core::Object x) → void; -> self::B::getter1e
+ abstract member-signature set field2a(core::num? value) → void; -> self::B::field2a
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.transformed.expect
index 71e2237..0a80f3f 100644
--- a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.transformed.expect
@@ -285,9 +285,9 @@
abstract set setter1c(invalid-type x) → void;
abstract set setter1d(core::String x) → void;
abstract set setter1e(core::Object x) → void;
- abstract forwarding-stub set getter1d(core::Object x) → void;
- abstract forwarding-stub set getter1e(core::Object x) → void;
- abstract forwarding-stub set field2a(core::num? value) → void;
+ abstract member-signature set getter1d(core::Object x) → void; -> self::B::getter1d
+ abstract member-signature set getter1e(core::Object x) → void; -> self::B::getter1e
+ abstract member-signature set field2a(core::num? value) → void; -> self::B::field2a
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/flutter_issue_63029/flutter_issue_63029.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/flutter_issue_63029/flutter_issue_63029.dart.weak.expect
index b2ebdd8..2c462af 100644
--- a/pkg/front_end/testcases/nnbd_mixed/flutter_issue_63029/flutter_issue_63029.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/flutter_issue_63029/flutter_issue_63029.dart.weak.expect
@@ -16,7 +16,7 @@
synthetic constructor •() → self::_F&B&D
: super flu::B::•()
;
- abstract forwarding-stub operator ==(dynamic other) → core::bool*;
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
}
class F extends self::_F&B&D {
synthetic constructor •() → self::F
diff --git a/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_out.dart.weak.expect
index 5a93c679..9ed16b6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_out.dart.weak.expect
@@ -34,13 +34,13 @@
synthetic constructor •() → self::Class4b
: super core::Object::•()
;
- abstract forwarding-stub operator ==(dynamic other) → core::bool*;
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
}
class Class4c extends core::Object implements inh::GenericInterface<core::num?> {
synthetic constructor •() → self::Class4c
: super core::Object::•()
;
- abstract forwarding-stub operator ==(dynamic other) → core::bool*;
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
}
class Class4d extends inh::LegacyClass4 implements inh::GenericInterface<core::num> {
synthetic constructor •() → self::Class4d
diff --git a/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_out.dart.weak.transformed.expect
index 0421e5b..0bc6430 100644
--- a/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_out.dart.weak.transformed.expect
@@ -34,13 +34,13 @@
synthetic constructor •() → self::Class4b
: super core::Object::•()
;
- abstract forwarding-stub operator ==(dynamic other) → core::bool*;
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
}
class Class4c extends core::Object implements inh::GenericInterface<core::num?> {
synthetic constructor •() → self::Class4c
: super core::Object::•()
;
- abstract forwarding-stub operator ==(dynamic other) → core::bool*;
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
}
class Class4d extends inh::LegacyClass4 implements inh::GenericInterface<core::num> {
synthetic constructor •() → self::Class4d
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect
index 0b53eb7..ad3788d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect
@@ -14,13 +14,13 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract forwarding-stub method toString({core::String* s = #C1}) → core::String*;
+ abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> baz2::A::toString
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
: super self::_C&Object&A&B::•()
;
- abstract forwarding-stub method toString({core::String* s = #C1}) → core::String*;
+ abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> baz2::A::toString
}
static method main() → void {
core::print(new baz2::B::•());
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.transformed.expect
index a8728ca..0a99e51 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract forwarding-stub method toString({core::String* s = #C1}) → core::String*;
+ abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> baz2::A::toString
abstract member-signature get /* from org-dartlang-testcase:///issue40512_lib.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method /* from org-dartlang-testcase:///issue40512_lib.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -40,7 +40,7 @@
synthetic constructor •() → self::C*
: super self::_C&Object&A&B::•()
;
- abstract forwarding-stub method toString({core::String* s = #C1}) → core::String*;
+ abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> baz2::A::toString
}
static method main() → void {
core::print(new baz2::B::•());
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
index 51f1ffe..bbc1cb2 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
@@ -14,13 +14,13 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract forwarding-stub method method({core::String* s = #C1}) → core::String*;
+ abstract member-signature method method({core::String* s = #C1}) → core::String*; -> iss::A::method
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
: super self::_C&Object&A&B::•()
;
- abstract forwarding-stub method method({core::String* s = #C1}) → core::String*;
+ abstract member-signature method method({core::String* s = #C1}) → core::String*; -> iss::A::method
}
static method main() → dynamic {
core::print(new self::C::•().{self::C::method}());
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect
index 9306da9..ee21372 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract forwarding-stub method method({core::String* s = #C1}) → core::String*;
+ abstract member-signature method method({core::String* s = #C1}) → core::String*; -> iss::A::method
abstract member-signature get /* from org-dartlang-testcase:///issue41210_lib1.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method /* from org-dartlang-testcase:///issue41210_lib1.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -42,7 +42,7 @@
synthetic constructor •() → self::C*
: super self::_C&Object&A&B::•()
;
- abstract forwarding-stub method method({core::String* s = #C1}) → core::String*;
+ abstract member-signature method method({core::String* s = #C1}) → core::String*; -> iss::A::method
}
static method main() → dynamic {
core::print(new self::C::•().{self::C::method}());
diff --git a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.expect
index 44dc597..9e000b7 100644
--- a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.expect
@@ -44,17 +44,17 @@
return 0;
set property4(core::int* value) → void {}
abstract member-signature get field1() → core::int*; -> mem::Class::field1
- abstract member-signature set field1(core::int* _) → void; -> mem::Class::field1
+ abstract member-signature set field1(core::int* value) → void; -> mem::Class::field1
abstract member-signature get field2() → core::int*; -> mem::Class::field2
- abstract member-signature set field2(core::int* _) → void; -> mem::Class::field2
+ abstract member-signature set field2(core::int* value) → void; -> mem::Class::field2
abstract member-signature get property1() → core::int*; -> mem::Class::property1
abstract member-signature set property1(core::int* value) → void; -> mem::Class::property1
abstract member-signature get property2() → core::int*; -> mem::Class::property2
abstract member-signature set property2(core::int* value) → void; -> mem::Class::property2
abstract member-signature get property5() → core::int*; -> mem::Class::property5
- abstract member-signature set property5(core::int* _) → void; -> mem::Class::property5
+ abstract member-signature set property5(core::int* value) → void; -> mem::Class::property5
abstract member-signature get property6() → core::int*; -> mem::Class::property6
- abstract member-signature set property6(core::int* _) → void; -> mem::Class::property6
+ abstract member-signature set property6(core::int* value) → void; -> mem::Class::property6
abstract member-signature method method1() → core::int*; -> mem::Class::method1
abstract member-signature method method2() → core::int*; -> mem::Class::method2
abstract member-signature method method5a(core::int* a, core::int* b) → core::int*; -> mem::Class::method5a
diff --git a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.transformed.expect
index 44dc597..9e000b7 100644
--- a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.transformed.expect
@@ -44,17 +44,17 @@
return 0;
set property4(core::int* value) → void {}
abstract member-signature get field1() → core::int*; -> mem::Class::field1
- abstract member-signature set field1(core::int* _) → void; -> mem::Class::field1
+ abstract member-signature set field1(core::int* value) → void; -> mem::Class::field1
abstract member-signature get field2() → core::int*; -> mem::Class::field2
- abstract member-signature set field2(core::int* _) → void; -> mem::Class::field2
+ abstract member-signature set field2(core::int* value) → void; -> mem::Class::field2
abstract member-signature get property1() → core::int*; -> mem::Class::property1
abstract member-signature set property1(core::int* value) → void; -> mem::Class::property1
abstract member-signature get property2() → core::int*; -> mem::Class::property2
abstract member-signature set property2(core::int* value) → void; -> mem::Class::property2
abstract member-signature get property5() → core::int*; -> mem::Class::property5
- abstract member-signature set property5(core::int* _) → void; -> mem::Class::property5
+ abstract member-signature set property5(core::int* value) → void; -> mem::Class::property5
abstract member-signature get property6() → core::int*; -> mem::Class::property6
- abstract member-signature set property6(core::int* _) → void; -> mem::Class::property6
+ abstract member-signature set property6(core::int* value) → void; -> mem::Class::property6
abstract member-signature method method1() → core::int*; -> mem::Class::method1
abstract member-signature method method2() → core::int*; -> mem::Class::method2
abstract member-signature method method5a(core::int* a, core::int* b) → core::int*; -> mem::Class::method5a
diff --git a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.expect
index 973cfd4..fc797ac 100644
--- a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.expect
@@ -50,13 +50,13 @@
: super opt::LegacyClass::•()
;
abstract member-signature get field1() → core::int; -> opt::LegacyClass::field1
- abstract member-signature set field1(core::int _) → void; -> opt::LegacyClass::field1
+ abstract member-signature set field1(core::int value) → void; -> opt::LegacyClass::field1
abstract member-signature get field2() → core::int?; -> opt::LegacyClass::field2
- abstract member-signature set field2(core::int? _) → void; -> opt::LegacyClass::field2
+ abstract member-signature set field2(core::int? value) → void; -> opt::LegacyClass::field2
abstract member-signature get field3() → core::int; -> opt::LegacyClass::field3
- abstract member-signature set field3(core::int _) → void; -> opt::LegacyClass::field3
+ abstract member-signature set field3(core::int value) → void; -> opt::LegacyClass::field3
abstract member-signature get field4() → core::int?; -> opt::LegacyClass::field4
- abstract member-signature set field4(core::int? _) → void; -> opt::LegacyClass::field4
+ abstract member-signature set field4(core::int? value) → void; -> opt::LegacyClass::field4
abstract member-signature get property1() → core::int; -> opt::LegacyClass::property1
abstract member-signature set property1(core::int value) → void; -> opt::LegacyClass::property1
abstract member-signature get property2() → core::int?; -> opt::LegacyClass::property2
diff --git a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.transformed.expect
index 973cfd4..fc797ac 100644
--- a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.transformed.expect
@@ -50,13 +50,13 @@
: super opt::LegacyClass::•()
;
abstract member-signature get field1() → core::int; -> opt::LegacyClass::field1
- abstract member-signature set field1(core::int _) → void; -> opt::LegacyClass::field1
+ abstract member-signature set field1(core::int value) → void; -> opt::LegacyClass::field1
abstract member-signature get field2() → core::int?; -> opt::LegacyClass::field2
- abstract member-signature set field2(core::int? _) → void; -> opt::LegacyClass::field2
+ abstract member-signature set field2(core::int? value) → void; -> opt::LegacyClass::field2
abstract member-signature get field3() → core::int; -> opt::LegacyClass::field3
- abstract member-signature set field3(core::int _) → void; -> opt::LegacyClass::field3
+ abstract member-signature set field3(core::int value) → void; -> opt::LegacyClass::field3
abstract member-signature get field4() → core::int?; -> opt::LegacyClass::field4
- abstract member-signature set field4(core::int? _) → void; -> opt::LegacyClass::field4
+ abstract member-signature set field4(core::int? value) → void; -> opt::LegacyClass::field4
abstract member-signature get property1() → core::int; -> opt::LegacyClass::property1
abstract member-signature set property1(core::int value) → void; -> opt::LegacyClass::property1
abstract member-signature get property2() → core::int?; -> opt::LegacyClass::property2
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.expect
index 731c106..bd160a8 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.expect
@@ -9,7 +9,7 @@
const synthetic constructor •() → self::_Class&Object&Mixin
: super core::Object::•()
;
- abstract forwarding-stub operator ==(dynamic other) → core::bool*;
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
}
class Class extends self::_Class&Object&Mixin {
synthetic constructor •() → self::Class
diff --git a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.expect
index 52e8458..561c9cb 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.expect
@@ -35,7 +35,7 @@
method noSuchMethod(core::Invocation* invocation) → dynamic {
return super.{core::Object::noSuchMethod}(invocation);
}
- abstract forwarding-stub method method(core::int* i, {dynamic optional = #C2}) → core::int*;
+ abstract member-signature method method(core::int* i, {dynamic optional = #C2}) → core::int*; -> self::C2::method
abstract member-signature method genericMethod1<T extends core::Object* = dynamic>(self::B2::genericMethod1::T* t) → self::B2::genericMethod1::T*; -> nsm::A::genericMethod1
abstract member-signature method genericMethod2<T extends core::Object* = core::Object*>(self::B2::genericMethod2::T* t) → self::B2::genericMethod2::T*; -> nsm::A::genericMethod2
abstract member-signature method genericMethod3<T extends core::Object* = core::Object*>(self::B2::genericMethod3::T* t) → self::B2::genericMethod3::T*; -> nsm::A::genericMethod3
@@ -95,7 +95,7 @@
method noSuchMethod(core::Invocation invocation) → dynamic {
return super.{core::Object::noSuchMethod}(invocation);
}
- abstract forwarding-stub method method(core::int? i, {dynamic optional = #C2}) → core::int;
+ abstract member-signature method method(core::int? i, {dynamic optional = #C2}) → core::int; -> nsm::C1::method
}
abstract class C1 extends core::Object {
synthetic constructor •() → nsm::C1
diff --git a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.transformed.expect
index 52e8458..561c9cb 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
method noSuchMethod(core::Invocation* invocation) → dynamic {
return super.{core::Object::noSuchMethod}(invocation);
}
- abstract forwarding-stub method method(core::int* i, {dynamic optional = #C2}) → core::int*;
+ abstract member-signature method method(core::int* i, {dynamic optional = #C2}) → core::int*; -> self::C2::method
abstract member-signature method genericMethod1<T extends core::Object* = dynamic>(self::B2::genericMethod1::T* t) → self::B2::genericMethod1::T*; -> nsm::A::genericMethod1
abstract member-signature method genericMethod2<T extends core::Object* = core::Object*>(self::B2::genericMethod2::T* t) → self::B2::genericMethod2::T*; -> nsm::A::genericMethod2
abstract member-signature method genericMethod3<T extends core::Object* = core::Object*>(self::B2::genericMethod3::T* t) → self::B2::genericMethod3::T*; -> nsm::A::genericMethod3
@@ -95,7 +95,7 @@
method noSuchMethod(core::Invocation invocation) → dynamic {
return super.{core::Object::noSuchMethod}(invocation);
}
- abstract forwarding-stub method method(core::int? i, {dynamic optional = #C2}) → core::int;
+ abstract member-signature method method(core::int? i, {dynamic optional = #C2}) → core::int; -> nsm::C1::method
}
abstract class C1 extends core::Object {
synthetic constructor •() → nsm::C1
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.expect
index a7d11cd..e2f0b61 100644
--- a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.expect
@@ -36,7 +36,7 @@
method test_default({required core::int? i = #C1}) → void {}
method test_nondefault({required core::int? i = #C1}) → void {}
method test_legacy({required core::int? i = #C1}) → void {}
- abstract forwarding-stub operator ==(dynamic other) → core::bool*;
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
}
static method main() → dynamic {
new self::A::•().{self::A::test_default}(i: 1);
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.transformed.expect
index a7d11cd..e2f0b61 100644
--- a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.transformed.expect
@@ -36,7 +36,7 @@
method test_default({required core::int? i = #C1}) → void {}
method test_nondefault({required core::int? i = #C1}) → void {}
method test_legacy({required core::int? i = #C1}) → void {}
- abstract forwarding-stub operator ==(dynamic other) → core::bool*;
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
}
static method main() → dynamic {
new self::A::•().{self::A::test_default}(i: 1);
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
index fd10993..e157b1f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
@@ -26,7 +26,7 @@
synthetic constructor •() → self::_Class&Object&Mixin1&Mixin2<self::_Class&Object&Mixin1&Mixin2::T*>*
: super self::_Class&Object&Mixin1::•()
;
- abstract member-signature set field((dynamic) →* core::Type* _) → void; -> mai::Mixin2::field
+ abstract member-signature set field((dynamic) →* core::Type* value) → void; -> mai::Mixin2::field
abstract member-signature get field() → (dynamic) →* core::Type*; -> mai::Mixin2::field
abstract member-signature method method1() → (dynamic) →* core::Type*; -> mai::Mixin2::method1
abstract member-signature method method2((dynamic) →* core::Type* t) → void; -> mai::Mixin2::method2
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
index fd10993..e157b1f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
@@ -26,7 +26,7 @@
synthetic constructor •() → self::_Class&Object&Mixin1&Mixin2<self::_Class&Object&Mixin1&Mixin2::T*>*
: super self::_Class&Object&Mixin1::•()
;
- abstract member-signature set field((dynamic) →* core::Type* _) → void; -> mai::Mixin2::field
+ abstract member-signature set field((dynamic) →* core::Type* value) → void; -> mai::Mixin2::field
abstract member-signature get field() → (dynamic) →* core::Type*; -> mai::Mixin2::field
abstract member-signature method method1() → (dynamic) →* core::Type*; -> mai::Mixin2::method1
abstract member-signature method method2((dynamic) →* core::Type* t) → void; -> mai::Mixin2::method2
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
index 290665e..ad6b170 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
@@ -62,7 +62,7 @@
;
method noSuchMethod(core::Invocation* i) → dynamic
;
- abstract forwarding-stub method foo(core::int* x, {core::int* y}) → dynamic;
+ abstract member-signature method foo(core::int* x, {core::int* y}) → dynamic; -> self::B::foo
}
class D extends core::Object {
synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
index 7e44d2a..32e4786 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
@@ -67,7 +67,7 @@
core::print("No such method!");
return 42;
}
- abstract forwarding-stub method foo(core::int* x, {core::int* y = #C1}) → dynamic;
+ abstract member-signature method foo(core::int* x, {core::int* y = #C1}) → dynamic; -> self::B::foo
}
class D extends core::Object {
synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_32660.dart.strong.transformed.expect
index 7e44d2a..32e4786 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.strong.transformed.expect
@@ -67,7 +67,7 @@
core::print("No such method!");
return 42;
}
- abstract forwarding-stub method foo(core::int* x, {core::int* y = #C1}) → dynamic;
+ abstract member-signature method foo(core::int* x, {core::int* y = #C1}) → dynamic; -> self::B::foo
}
class D extends core::Object {
synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect
index d0c8058..bbdac51 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect
@@ -35,8 +35,8 @@
class D extends self::C implements self::B<core::num*> {
synthetic constructor •() → self::D*
;
- forwarding-stub set x(generic-covariant-impl core::num* _) → void
- return super.{self::C::x} = _;
+ forwarding-stub set x(generic-covariant-impl core::num* value) → void
+ return super.{self::C::x} = value;
}
static method main() → void
;
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.expect
index c2be143..26e36fb 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.expect
@@ -38,7 +38,7 @@
synthetic constructor •() → self::D*
: super self::C::•()
;
- forwarding-stub set x(generic-covariant-impl core::num* _) → void
- return super.{self::C::x} = _;
+ forwarding-stub set x(generic-covariant-impl core::num* value) → void
+ return super.{self::C::x} = value;
}
static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.transformed.expect
index c2be143..26e36fb 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.transformed.expect
@@ -38,7 +38,7 @@
synthetic constructor •() → self::D*
: super self::C::•()
;
- forwarding-stub set x(generic-covariant-impl core::num* _) → void
- return super.{self::C::x} = _;
+ forwarding-stub set x(generic-covariant-impl core::num* value) → void
+ return super.{self::C::x} = value;
}
static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect
index f9cfecc..9c97b6c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect
@@ -35,8 +35,8 @@
class D extends self::C implements self::B {
synthetic constructor •() → self::D*
;
- forwarding-stub set x(covariant core::num* _) → void
- return super.{self::C::x} = _;
+ forwarding-stub set x(covariant core::num* value) → void
+ return super.{self::C::x} = value;
}
static method main() → void
;
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.expect
index ff585af..92c4e15 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.expect
@@ -38,7 +38,7 @@
synthetic constructor •() → self::D*
: super self::C::•()
;
- forwarding-stub set x(covariant core::num* _) → void
- return super.{self::C::x} = _;
+ forwarding-stub set x(covariant core::num* value) → void
+ return super.{self::C::x} = value;
}
static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.transformed.expect
index ff585af..92c4e15 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.transformed.expect
@@ -38,7 +38,7 @@
synthetic constructor •() → self::D*
: super self::C::•()
;
- forwarding-stub set x(covariant core::num* _) → void
- return super.{self::C::x} = _;
+ forwarding-stub set x(covariant core::num* value) → void
+ return super.{self::C::x} = value;
}
static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
index 8766dd4..d6eb674 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
@@ -76,8 +76,8 @@
synthetic constructor •() → self::C*
: super self::B::•()
;
- forwarding-stub set x(generic-covariant-impl core::int* _) → void
- return super.{self::B::x} = _;
+ forwarding-stub set x(generic-covariant-impl core::int* value) → void
+ return super.{self::B::x} = value;
forwarding-stub set y(covariant core::Object* value) → void
return super.{self::B::y} = value;
}
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
index d5d7813..4f7989a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
@@ -83,8 +83,8 @@
synthetic constructor •() → self::C*
: super self::B::•()
;
- forwarding-stub set x(generic-covariant-impl core::int* _) → void
- return super.{self::B::x} = _;
+ forwarding-stub set x(generic-covariant-impl core::int* value) → void
+ return super.{self::B::x} = value;
forwarding-stub set y(covariant core::Object* value) → void
return super.{self::B::y} = value;
}
diff --git a/tools/VERSION b/tools/VERSION
index 194d4ab..9b98b0f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 11
PATCH 0
-PRERELEASE 259
+PRERELEASE 260
PRERELEASE_PATCH 0
\ No newline at end of file