Skip to content

Commit 2e3f17f

Browse files
stereotype441commit-bot@chromium.org
authored andcommitted
Add support for the new mixin syntax to supertype constraint checking and resynthesis.
Partially addresses #34404. Change-Id: Ia115647c7e6e15092a7dca55287ff0680b780a97 Reviewed-on: https://dart-review.googlesource.com/75625 Commit-Queue: Paul Berry <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent 929b2fb commit 2e3f17f

File tree

6 files changed

+39
-29
lines changed

6 files changed

+39
-29
lines changed

pkg/analyzer/lib/src/generated/type_system.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1759,6 +1759,9 @@ abstract class TypeSystem {
17591759

17601760
List<InterfaceType> gatherMixinSupertypeConstraints(
17611761
ClassElement mixinElement) {
1762+
if (mixinElement.isMixin) {
1763+
return mixinElement.superclassConstraints;
1764+
}
17621765
var mixinSupertypeConstraints = <InterfaceType>[];
17631766
void addIfGeneric(InterfaceType type) {
17641767
if (type.element.typeParameters.isNotEmpty) {

pkg/analyzer/lib/src/summary/link.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,6 +1241,9 @@ abstract class CompilationUnitElementForLink
12411241
for (ClassElementForLink_Class type in types) {
12421242
_containedNames[type.name] = type;
12431243
}
1244+
for (ClassElementForLink_Class mixin in mixins) {
1245+
_containedNames[mixin.name] = mixin;
1246+
}
12441247
for (ClassElementForLink_Enum enm in enums) {
12451248
_containedNames[enm.name] = enm;
12461249
}

pkg/analyzer/test/generated/compile_time_error_code_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ library analyzer.test.generated.compile_time_error_code_test;
77
import 'dart:async';
88

99
import 'package:analyzer/dart/analysis/declared_variables.dart';
10+
import 'package:analyzer/dart/ast/ast.dart';
1011
import 'package:analyzer/error/error.dart';
1112
import 'package:analyzer/src/context/context.dart';
1213
import 'package:analyzer/src/error/codes.dart';

pkg/analyzer/test/generated/non_error_resolver_driver_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,8 @@ class NonErrorResolverTest_Driver extends NonErrorResolverTest {
3434

3535
@override // Passes with driver
3636
test_issue_32394() => super.test_issue_32394();
37+
38+
@override // Passes with driver
39+
test_mixinInference_with_actual_mixins() =>
40+
super.test_mixinInference_with_actual_mixins();
3741
}

pkg/analyzer/test/generated/non_error_resolver_test.dart

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3820,6 +3820,33 @@ class B extends Object with A {}''');
38203820
verify([source]);
38213821
}
38223822

3823+
@failingTest // Does not work with old task model
3824+
test_mixinInference_with_actual_mixins() async {
3825+
Source source = addSource('''
3826+
class I<X> {}
3827+
3828+
mixin M0<T> on I<T> {}
3829+
3830+
mixin M1<T> on I<T> {
3831+
T foo() => null;
3832+
}
3833+
3834+
class A = I<int> with M0, M1;
3835+
3836+
void main () {
3837+
var x = new A().foo();
3838+
}
3839+
''');
3840+
var result = await computeAnalysisResult(source);
3841+
assertNoErrors(source);
3842+
verify([source]);
3843+
var main = result.unit.declarations.last as FunctionDeclaration;
3844+
var mainBody = main.functionExpression.body as BlockFunctionBody;
3845+
var xDecl = mainBody.block.statements[0] as VariableDeclarationStatement;
3846+
var xElem = xDecl.variables.variables[0].declaredElement;
3847+
expect(xElem.type.toString(), 'int');
3848+
}
3849+
38233850
test_mixinInheritsFromNotObject_classDeclaration_extends() async {
38243851
AnalysisOptionsImpl options = new AnalysisOptionsImpl();
38253852
options.enableSuperMixins = true;

tests/language_2/language_2_analyzer.status

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -72,35 +72,7 @@ issue31596_tearoff_test: CompileTimeError # Issue #31596
7272
issue31596_test: CompileTimeError # Issue #31596
7373
issue34498_test: MissingCompileTimeError # Issue 34500
7474
malformed2_test: Pass, MissingCompileTimeError # Flaky: issue 31056.
75-
mixin_declaration/mixin_declaration_inference_valid_A00_test: CompileTimeError # Issue #34164
76-
mixin_declaration/mixin_declaration_inference_valid_A01_test: CompileTimeError # Issue #34164
77-
mixin_declaration/mixin_declaration_inference_valid_A02_test: CompileTimeError # Issue #34164
78-
mixin_declaration/mixin_declaration_inference_valid_A10_test: CompileTimeError # Issue #34164
79-
mixin_declaration/mixin_declaration_inference_valid_A11_test: CompileTimeError # Issue #34164
80-
mixin_declaration/mixin_declaration_inference_valid_A12_test: CompileTimeError # Issue #34164
81-
mixin_declaration/mixin_declaration_inference_valid_A20_test: CompileTimeError # Issue #34164
82-
mixin_declaration/mixin_declaration_inference_valid_A21_test: CompileTimeError # Issue #34164
83-
mixin_declaration/mixin_declaration_inference_valid_A22_test: CompileTimeError # Issue #34164
84-
mixin_declaration/mixin_declaration_inference_valid_A23_test: CompileTimeError # Issue #34164
85-
mixin_declaration/mixin_declaration_inference_valid_A30_test: CompileTimeError # Issue #34164
86-
mixin_declaration/mixin_declaration_inference_valid_A31_test: CompileTimeError # Issue #34164
87-
mixin_declaration/mixin_declaration_inference_valid_A42_test: CompileTimeError # Issue #34164
88-
mixin_declaration/mixin_declaration_inference_valid_B00_test: CompileTimeError # Issue #34164
89-
mixin_declaration/mixin_declaration_inference_valid_B01_test: CompileTimeError # Issue #34164
90-
mixin_declaration/mixin_declaration_inference_valid_B02_test: CompileTimeError # Issue #34164
91-
mixin_declaration/mixin_declaration_inference_valid_B03_test: CompileTimeError # Issue #34164
92-
mixin_declaration/mixin_declaration_inference_valid_B10_test: CompileTimeError # Issue #34164
93-
mixin_declaration/mixin_declaration_inference_valid_B11_test: CompileTimeError # Issue #34164
94-
mixin_declaration/mixin_declaration_inference_valid_B12_test: CompileTimeError # Issue #34164
95-
mixin_declaration/mixin_declaration_inference_valid_B13_test: CompileTimeError # Issue #34164
96-
mixin_declaration/mixin_declaration_inference_valid_C00_test: CompileTimeError # Issue #34164
97-
mixin_declaration/mixin_declaration_inference_valid_C01_test: CompileTimeError # Issue #34164
98-
mixin_declaration/mixin_declaration_inference_valid_C02_test: CompileTimeError # Issue #34164
99-
mixin_declaration/mixin_declaration_inference_valid_C03_test: CompileTimeError # Issue #34164
100-
mixin_declaration/mixin_declaration_inference_valid_C10_test: CompileTimeError # Issue #34164
101-
mixin_declaration/mixin_declaration_inference_valid_C11_test: CompileTimeError # Issue #34164
102-
mixin_declaration/mixin_declaration_inference_valid_C12_test: CompileTimeError # Issue #34164
103-
mixin_declaration/mixin_declaration_inference_valid_C13_test: CompileTimeError # Issue #34164
75+
mixin_declaration/mixin_declaration_inference_invalid_07_test: MissingCompileTimeError
10476
mixin_declaration/mixin_declaration_invalid_superinvocation_test/10: CompileTimeError # Issue 30552
10577
mixin_method_override_test/01: MissingCompileTimeError
10678
mixin_super_2_test/01: MissingCompileTimeError

0 commit comments

Comments
 (0)