mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 04:37:12 +00:00
[dart2js] Handle super access in mixin declarations
This crashed because the canonical name for the replace procedure was unbound before all references to it had been loaded, causing subsequent reads of the canonical name to create reference without a target. This broke the flutter web smoke tests. Change-Id: I6249cfda85ff76b5e2dd31bb0cf8d6312ad50c1d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/177861 Reviewed-by: Jens Johansen <jensj@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
parent
5fac8d3d71
commit
dd5b455a0c
|
@ -419,12 +419,15 @@ class KClassEnvImpl implements KClassEnv {
|
|||
ir.Procedure existingSetter = existingSetters[field.name];
|
||||
cls.addField(cloneVisitor.cloneField(
|
||||
field, existingGetter?.reference, existingSetter?.reference));
|
||||
// TODO(johnniwinther): We need to unbind the canonical names before
|
||||
// serializing these references since the canonical names refer to
|
||||
// @getters and @setters instead of @fields and @fields=. This will
|
||||
// not be needed if stop using @fields/@fields= in favor of
|
||||
// @getters/@setters in general.
|
||||
if (existingGetter != null) {
|
||||
existingGetter.reference.canonicalName?.unbind();
|
||||
cls.procedures.remove(existingGetter);
|
||||
}
|
||||
if (existingSetter != null) {
|
||||
existingSetter.reference.canonicalName?.unbind();
|
||||
cls.procedures.remove(existingSetter);
|
||||
}
|
||||
continue;
|
||||
|
@ -444,7 +447,6 @@ class KClassEnvImpl implements KClassEnv {
|
|||
? existingSetters[procedure.name]
|
||||
: existingNonSetters[procedure.name];
|
||||
if (existingProcedure != null) {
|
||||
existingProcedure.reference.canonicalName?.unbind();
|
||||
cls.procedures.remove(existingProcedure);
|
||||
}
|
||||
cls.addProcedure(cloneVisitor.cloneProcedure(
|
||||
|
|
|
@ -606,6 +606,7 @@ scans
|
|||
scheduler
|
||||
screen
|
||||
scripts
|
||||
scroll
|
||||
sdkroot
|
||||
sdks
|
||||
secondary
|
||||
|
|
34
pkg/front_end/testcases/none/mixin_super.dart
Normal file
34
pkg/front_end/testcases/none/mixin_super.dart
Normal file
|
@ -0,0 +1,34 @@
|
|||
// Copyright (c) 2021, 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.md file.
|
||||
|
||||
mixin Diagnosticable {
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
|
||||
}
|
||||
|
||||
class DiagnosticPropertiesBuilder {}
|
||||
|
||||
abstract class PointerEvent with Diagnosticable {}
|
||||
|
||||
abstract class PointerSignalEvent extends PointerEvent {}
|
||||
|
||||
mixin _PointerEventDescription on PointerEvent {
|
||||
@override
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
|
||||
super.debugFillProperties(properties);
|
||||
}
|
||||
}
|
||||
mixin _CopyPointerScrollEvent on PointerEvent {}
|
||||
|
||||
class PointerScrollEvent extends PointerSignalEvent
|
||||
with _PointerEventDescription, _CopyPointerScrollEvent {
|
||||
@override
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
|
||||
super.debugFillProperties(properties);
|
||||
}
|
||||
}
|
||||
|
||||
main() {
|
||||
new PointerScrollEvent()
|
||||
.debugFillProperties(new DiagnosticPropertiesBuilder());
|
||||
}
|
61
pkg/front_end/testcases/none/mixin_super.dart.outline.expect
Normal file
61
pkg/front_end/testcases/none/mixin_super.dart.outline.expect
Normal file
|
@ -0,0 +1,61 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
abstract class Diagnosticable extends core::Object /*isMixinDeclaration*/ {
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
;
|
||||
}
|
||||
class DiagnosticPropertiesBuilder extends core::Object {
|
||||
synthetic constructor •() → self::DiagnosticPropertiesBuilder
|
||||
;
|
||||
}
|
||||
abstract class _PointerEvent&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::_PointerEvent&Object&Diagnosticable
|
||||
: super core::Object::•()
|
||||
;
|
||||
mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
return super.{self::Diagnosticable::debugFillProperties}(properties);
|
||||
}
|
||||
abstract class PointerEvent extends self::_PointerEvent&Object&Diagnosticable {
|
||||
synthetic constructor •() → self::PointerEvent
|
||||
;
|
||||
}
|
||||
abstract class PointerSignalEvent extends self::PointerEvent {
|
||||
synthetic constructor •() → self::PointerSignalEvent
|
||||
;
|
||||
}
|
||||
abstract class _PointerEventDescription extends self::PointerEvent /*isMixinDeclaration*/ {
|
||||
@core::override
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
;
|
||||
}
|
||||
abstract class _CopyPointerScrollEvent extends self::PointerEvent /*isMixinDeclaration*/ {
|
||||
}
|
||||
abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription = self::PointerSignalEvent with self::_PointerEventDescription /*isAnonymousMixin*/ {
|
||||
synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription
|
||||
: super self::PointerSignalEvent::•()
|
||||
;
|
||||
mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
return super.{self::_PointerEventDescription::debugFillProperties}(properties);
|
||||
}
|
||||
abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent = self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription with self::_CopyPointerScrollEvent /*isAnonymousMixin*/ {
|
||||
synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent
|
||||
: super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::•()
|
||||
;
|
||||
}
|
||||
class PointerScrollEvent extends self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent {
|
||||
synthetic constructor •() → self::PointerScrollEvent
|
||||
;
|
||||
@core::override
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
;
|
||||
}
|
||||
static method main() → dynamic
|
||||
;
|
||||
|
||||
|
||||
Extra constant evaluation status:
|
||||
Evaluated: StaticGet @ org-dartlang-testcase:///mixin_super.dart:16:4 -> InstanceConstant(const _Override{})
|
||||
Evaluated: StaticGet @ org-dartlang-testcase:///mixin_super.dart:25:4 -> InstanceConstant(const _Override{})
|
||||
Extra constant evaluation: evaluated: 6, effectively constant: 2
|
65
pkg/front_end/testcases/none/mixin_super.dart.strong.expect
Normal file
65
pkg/front_end/testcases/none/mixin_super.dart.strong.expect
Normal file
|
@ -0,0 +1,65 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
abstract class Diagnosticable extends core::Object /*isMixinDeclaration*/ {
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {}
|
||||
}
|
||||
class DiagnosticPropertiesBuilder extends core::Object {
|
||||
synthetic constructor •() → self::DiagnosticPropertiesBuilder
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class _PointerEvent&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::_PointerEvent&Object&Diagnosticable
|
||||
: super core::Object::•()
|
||||
;
|
||||
mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
return super.{self::Diagnosticable::debugFillProperties}(properties);
|
||||
}
|
||||
abstract class PointerEvent extends self::_PointerEvent&Object&Diagnosticable {
|
||||
synthetic constructor •() → self::PointerEvent
|
||||
: super self::_PointerEvent&Object&Diagnosticable::•()
|
||||
;
|
||||
}
|
||||
abstract class PointerSignalEvent extends self::PointerEvent {
|
||||
synthetic constructor •() → self::PointerSignalEvent
|
||||
: super self::PointerEvent::•()
|
||||
;
|
||||
}
|
||||
abstract class _PointerEventDescription extends self::PointerEvent /*isMixinDeclaration*/ {
|
||||
@#C1
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
|
||||
super.{self::_PointerEvent&Object&Diagnosticable::debugFillProperties}(properties);
|
||||
}
|
||||
}
|
||||
abstract class _CopyPointerScrollEvent extends self::PointerEvent /*isMixinDeclaration*/ {
|
||||
}
|
||||
abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription = self::PointerSignalEvent with self::_PointerEventDescription /*isAnonymousMixin*/ {
|
||||
synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription
|
||||
: super self::PointerSignalEvent::•()
|
||||
;
|
||||
mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
return super.{self::_PointerEventDescription::debugFillProperties}(properties);
|
||||
}
|
||||
abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent = self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription with self::_CopyPointerScrollEvent /*isAnonymousMixin*/ {
|
||||
synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent
|
||||
: super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::•()
|
||||
;
|
||||
}
|
||||
class PointerScrollEvent extends self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent {
|
||||
synthetic constructor •() → self::PointerScrollEvent
|
||||
: super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent::•()
|
||||
;
|
||||
@#C1
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
|
||||
super.{self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::debugFillProperties}(properties);
|
||||
}
|
||||
}
|
||||
static method main() → dynamic {
|
||||
new self::PointerScrollEvent::•().{self::PointerScrollEvent::debugFillProperties}(new self::DiagnosticPropertiesBuilder::•()){(self::DiagnosticPropertiesBuilder) → void};
|
||||
}
|
||||
|
||||
constants {
|
||||
#C1 = core::_Override {}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
abstract class Diagnosticable extends core::Object /*isMixinDeclaration*/ {
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {}
|
||||
}
|
||||
class DiagnosticPropertiesBuilder extends core::Object {
|
||||
synthetic constructor •() → self::DiagnosticPropertiesBuilder
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class _PointerEvent&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::_PointerEvent&Object&Diagnosticable
|
||||
: super core::Object::•()
|
||||
;
|
||||
mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
return super.{self::Diagnosticable::debugFillProperties}(properties);
|
||||
}
|
||||
abstract class PointerEvent extends self::_PointerEvent&Object&Diagnosticable {
|
||||
synthetic constructor •() → self::PointerEvent
|
||||
: super self::_PointerEvent&Object&Diagnosticable::•()
|
||||
;
|
||||
}
|
||||
abstract class PointerSignalEvent extends self::PointerEvent {
|
||||
synthetic constructor •() → self::PointerSignalEvent
|
||||
: super self::PointerEvent::•()
|
||||
;
|
||||
}
|
||||
abstract class _PointerEventDescription extends self::PointerEvent /*isMixinDeclaration*/ {
|
||||
@#C1
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
|
||||
super.{self::_PointerEvent&Object&Diagnosticable::debugFillProperties}(properties);
|
||||
}
|
||||
}
|
||||
abstract class _CopyPointerScrollEvent extends self::PointerEvent /*isMixinDeclaration*/ {
|
||||
}
|
||||
abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription = self::PointerSignalEvent with self::_PointerEventDescription /*isAnonymousMixin*/ {
|
||||
synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription
|
||||
: super self::PointerSignalEvent::•()
|
||||
;
|
||||
mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
return super.{self::_PointerEventDescription::debugFillProperties}(properties);
|
||||
}
|
||||
abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent = self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription with self::_CopyPointerScrollEvent /*isAnonymousMixin*/ {
|
||||
synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent
|
||||
: super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::•()
|
||||
;
|
||||
}
|
||||
class PointerScrollEvent extends self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent {
|
||||
synthetic constructor •() → self::PointerScrollEvent
|
||||
: super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent::•()
|
||||
;
|
||||
@#C1
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
|
||||
super.{self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::debugFillProperties}(properties);
|
||||
}
|
||||
}
|
||||
static method main() → dynamic {
|
||||
new self::PointerScrollEvent::•().{self::PointerScrollEvent::debugFillProperties}(new self::DiagnosticPropertiesBuilder::•()){(self::DiagnosticPropertiesBuilder) → void};
|
||||
}
|
||||
|
||||
constants {
|
||||
#C1 = core::_Override {}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
mixin Diagnosticable {
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
|
||||
}
|
||||
|
||||
class DiagnosticPropertiesBuilder {}
|
||||
|
||||
abstract class PointerEvent with Diagnosticable {}
|
||||
|
||||
abstract class PointerSignalEvent extends PointerEvent {}
|
||||
|
||||
mixin _PointerEventDescription on PointerEvent {
|
||||
@override
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
|
||||
}
|
||||
mixin _CopyPointerScrollEvent on PointerEvent {}
|
||||
|
||||
class PointerScrollEvent extends PointerSignalEvent
|
||||
with _PointerEventDescription, _CopyPointerScrollEvent {
|
||||
@override
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
|
||||
}
|
||||
|
||||
main() {}
|
|
@ -0,0 +1,21 @@
|
|||
abstract class PointerEvent with Diagnosticable {}
|
||||
|
||||
abstract class PointerSignalEvent extends PointerEvent {}
|
||||
|
||||
class DiagnosticPropertiesBuilder {}
|
||||
|
||||
class PointerScrollEvent extends PointerSignalEvent
|
||||
with _PointerEventDescription, _CopyPointerScrollEvent {
|
||||
@override
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
|
||||
}
|
||||
|
||||
main() {}
|
||||
mixin Diagnosticable {
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
|
||||
}
|
||||
mixin _CopyPointerScrollEvent on PointerEvent {}
|
||||
mixin _PointerEventDescription on PointerEvent {
|
||||
@override
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
|
||||
}
|
65
pkg/front_end/testcases/none/mixin_super.dart.weak.expect
Normal file
65
pkg/front_end/testcases/none/mixin_super.dart.weak.expect
Normal file
|
@ -0,0 +1,65 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
abstract class Diagnosticable extends core::Object /*isMixinDeclaration*/ {
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {}
|
||||
}
|
||||
class DiagnosticPropertiesBuilder extends core::Object {
|
||||
synthetic constructor •() → self::DiagnosticPropertiesBuilder
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class _PointerEvent&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::_PointerEvent&Object&Diagnosticable
|
||||
: super core::Object::•()
|
||||
;
|
||||
mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
return super.{self::Diagnosticable::debugFillProperties}(properties);
|
||||
}
|
||||
abstract class PointerEvent extends self::_PointerEvent&Object&Diagnosticable {
|
||||
synthetic constructor •() → self::PointerEvent
|
||||
: super self::_PointerEvent&Object&Diagnosticable::•()
|
||||
;
|
||||
}
|
||||
abstract class PointerSignalEvent extends self::PointerEvent {
|
||||
synthetic constructor •() → self::PointerSignalEvent
|
||||
: super self::PointerEvent::•()
|
||||
;
|
||||
}
|
||||
abstract class _PointerEventDescription extends self::PointerEvent /*isMixinDeclaration*/ {
|
||||
@#C1
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
|
||||
super.{self::_PointerEvent&Object&Diagnosticable::debugFillProperties}(properties);
|
||||
}
|
||||
}
|
||||
abstract class _CopyPointerScrollEvent extends self::PointerEvent /*isMixinDeclaration*/ {
|
||||
}
|
||||
abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription = self::PointerSignalEvent with self::_PointerEventDescription /*isAnonymousMixin*/ {
|
||||
synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription
|
||||
: super self::PointerSignalEvent::•()
|
||||
;
|
||||
mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
return super.{self::_PointerEventDescription::debugFillProperties}(properties);
|
||||
}
|
||||
abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent = self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription with self::_CopyPointerScrollEvent /*isAnonymousMixin*/ {
|
||||
synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent
|
||||
: super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::•()
|
||||
;
|
||||
}
|
||||
class PointerScrollEvent extends self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent {
|
||||
synthetic constructor •() → self::PointerScrollEvent
|
||||
: super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent::•()
|
||||
;
|
||||
@#C1
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
|
||||
super.{self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::debugFillProperties}(properties);
|
||||
}
|
||||
}
|
||||
static method main() → dynamic {
|
||||
new self::PointerScrollEvent::•().{self::PointerScrollEvent::debugFillProperties}(new self::DiagnosticPropertiesBuilder::•()){(self::DiagnosticPropertiesBuilder) → void};
|
||||
}
|
||||
|
||||
constants {
|
||||
#C1 = core::_Override {}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
abstract class Diagnosticable extends core::Object /*isMixinDeclaration*/ {
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {}
|
||||
}
|
||||
class DiagnosticPropertiesBuilder extends core::Object {
|
||||
synthetic constructor •() → self::DiagnosticPropertiesBuilder
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class _PointerEvent&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::_PointerEvent&Object&Diagnosticable
|
||||
: super core::Object::•()
|
||||
;
|
||||
mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
return super.{self::Diagnosticable::debugFillProperties}(properties);
|
||||
}
|
||||
abstract class PointerEvent extends self::_PointerEvent&Object&Diagnosticable {
|
||||
synthetic constructor •() → self::PointerEvent
|
||||
: super self::_PointerEvent&Object&Diagnosticable::•()
|
||||
;
|
||||
}
|
||||
abstract class PointerSignalEvent extends self::PointerEvent {
|
||||
synthetic constructor •() → self::PointerSignalEvent
|
||||
: super self::PointerEvent::•()
|
||||
;
|
||||
}
|
||||
abstract class _PointerEventDescription extends self::PointerEvent /*isMixinDeclaration*/ {
|
||||
@#C1
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
|
||||
super.{self::_PointerEvent&Object&Diagnosticable::debugFillProperties}(properties);
|
||||
}
|
||||
}
|
||||
abstract class _CopyPointerScrollEvent extends self::PointerEvent /*isMixinDeclaration*/ {
|
||||
}
|
||||
abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription = self::PointerSignalEvent with self::_PointerEventDescription /*isAnonymousMixin*/ {
|
||||
synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription
|
||||
: super self::PointerSignalEvent::•()
|
||||
;
|
||||
mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
|
||||
return super.{self::_PointerEventDescription::debugFillProperties}(properties);
|
||||
}
|
||||
abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent = self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription with self::_CopyPointerScrollEvent /*isAnonymousMixin*/ {
|
||||
synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent
|
||||
: super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::•()
|
||||
;
|
||||
}
|
||||
class PointerScrollEvent extends self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent {
|
||||
synthetic constructor •() → self::PointerScrollEvent
|
||||
: super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent::•()
|
||||
;
|
||||
@#C1
|
||||
method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
|
||||
super.{self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::debugFillProperties}(properties);
|
||||
}
|
||||
}
|
||||
static method main() → dynamic {
|
||||
new self::PointerScrollEvent::•().{self::PointerScrollEvent::debugFillProperties}(new self::DiagnosticPropertiesBuilder::•()){(self::DiagnosticPropertiesBuilder) → void};
|
||||
}
|
||||
|
||||
constants {
|
||||
#C1 = core::_Override {}
|
||||
}
|
|
@ -181,6 +181,7 @@ none/mixin_covariant: TextSerializationFailure
|
|||
none/operator: TypeCheckError
|
||||
none/property_get: TypeCheckError
|
||||
none/property_set: TypeCheckError
|
||||
none/mixin_super: TextSerializationFailure
|
||||
none/tearoff_opt_out: TextSerializationFailure
|
||||
rasta/abstract_constructor: RuntimeError
|
||||
rasta/bad_constructor_redirection: RuntimeError
|
||||
|
|
34
tests/modular/mixin_super/main.dart
Normal file
34
tests/modular/mixin_super/main.dart
Normal file
|
@ -0,0 +1,34 @@
|
|||
// Copyright (c) 2021, 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.md file.
|
||||
|
||||
mixin Diagnosticable {
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
|
||||
}
|
||||
|
||||
class DiagnosticPropertiesBuilder {}
|
||||
|
||||
abstract class PointerEvent with Diagnosticable {}
|
||||
|
||||
abstract class PointerSignalEvent extends PointerEvent {}
|
||||
|
||||
mixin _PointerEventDescription on PointerEvent {
|
||||
@override
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
|
||||
super.debugFillProperties(properties);
|
||||
}
|
||||
}
|
||||
mixin _CopyPointerScrollEvent on PointerEvent {}
|
||||
|
||||
class PointerScrollEvent extends PointerSignalEvent
|
||||
with _PointerEventDescription, _CopyPointerScrollEvent {
|
||||
@override
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
|
||||
super.debugFillProperties(properties);
|
||||
}
|
||||
}
|
||||
|
||||
main() {
|
||||
new PointerScrollEvent()
|
||||
.debugFillProperties(new DiagnosticPropertiesBuilder());
|
||||
}
|
6
tests/modular/mixin_super/modules.yaml
Normal file
6
tests/modular/mixin_super/modules.yaml
Normal file
|
@ -0,0 +1,6 @@
|
|||
# Copyright (c) 2021, 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.
|
||||
|
||||
dependencies:
|
||||
main: []
|
Loading…
Reference in a new issue