Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Unified Diff: pkg/analyzer/test/generated/resolver_test.dart

Issue 1635063003: Stop precomputing ClassElement.isValidMixin. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/test/generated/resolver_test.dart
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 2092e028cb9bd22846c8505d815243ae344f8ca7..fe755ed8e029cf4abd34171d41de2d650098683c 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -9396,14 +9396,30 @@ class A {
void test_isValidMixin_badSuperclass() {
Source source = addSource(r'''
class A extends B {}
-class B {}''');
+class B {}
+class C = Object with A;''');
LibraryElement library = resolve2(source);
expect(library, isNotNull);
CompilationUnitElement unit = library.definingCompilationUnit;
expect(unit, isNotNull);
- List<ClassElement> classes = unit.types;
- expect(classes, hasLength(2));
- expect(classes[0].isValidMixin, isFalse);
+ ClassElement a = unit.getType('A');
+ expect(a.isValidMixin, isFalse);
+ assertErrors(source, [CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT]);
+ verify([source]);
+ }
+
+ void test_isValidMixin_badSuperclass_withSuperMixins() {
+ resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
+ Source source = addSource(r'''
+class A extends B {}
+class B {}
+class C = Object with A;''');
+ LibraryElement library = resolve2(source);
+ expect(library, isNotNull);
+ CompilationUnitElement unit = library.definingCompilationUnit;
+ expect(unit, isNotNull);
+ ClassElement a = unit.getType('A');
+ expect(a.isValidMixin, isTrue);
assertNoErrors(source);
verify([source]);
}
@@ -9412,14 +9428,64 @@ class B {}''');
Source source = addSource(r'''
class A {
A() {}
-}''');
+}
+class C = Object with A;''');
LibraryElement library = resolve2(source);
expect(library, isNotNull);
CompilationUnitElement unit = library.definingCompilationUnit;
expect(unit, isNotNull);
- List<ClassElement> classes = unit.types;
- expect(classes, hasLength(1));
- expect(classes[0].isValidMixin, isFalse);
+ ClassElement a = unit.getType('A');
+ expect(a.isValidMixin, isFalse);
+ assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
+ verify([source]);
+ }
+
+ void test_isValidMixin_constructor_withSuperMixins() {
+ resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
+ Source source = addSource(r'''
+class A {
+ A() {}
+}
+class C = Object with A;''');
+ LibraryElement library = resolve2(source);
+ expect(library, isNotNull);
+ CompilationUnitElement unit = library.definingCompilationUnit;
+ expect(unit, isNotNull);
+ ClassElement a = unit.getType('A');
+ expect(a.isValidMixin, isFalse);
+ assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
+ verify([source]);
+ }
+
+ void test_isValidMixin_factoryConstructor() {
+ Source source = addSource(r'''
+class A {
+ factory A() => null;
+}
+class C = Object with A;''');
+ LibraryElement library = resolve2(source);
+ expect(library, isNotNull);
+ CompilationUnitElement unit = library.definingCompilationUnit;
+ expect(unit, isNotNull);
+ ClassElement a = unit.getType('A');
+ expect(a.isValidMixin, isTrue);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_isValidMixin_factoryConstructor_withSuperMixins() {
+ resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
+ Source source = addSource(r'''
+class A {
+ factory A() => null;
+}
+class C = Object with A;''');
+ LibraryElement library = resolve2(source);
+ expect(library, isNotNull);
+ CompilationUnitElement unit = library.definingCompilationUnit;
+ expect(unit, isNotNull);
+ ClassElement a = unit.getType('A');
+ expect(a.isValidMixin, isTrue);
assertNoErrors(source);
verify([source]);
}
@@ -9430,27 +9496,62 @@ class A {
toString() {
return super.toString();
}
-}''');
+}
+class C = Object with A;''');
LibraryElement library = resolve2(source);
expect(library, isNotNull);
CompilationUnitElement unit = library.definingCompilationUnit;
expect(unit, isNotNull);
- List<ClassElement> classes = unit.types;
- expect(classes, hasLength(1));
- expect(classes[0].isValidMixin, isFalse);
+ ClassElement a = unit.getType('A');
+ expect(a.isValidMixin, isFalse);
+ assertErrors(source, [CompileTimeErrorCode.MIXIN_REFERENCES_SUPER]);
+ verify([source]);
+ }
+
+ void test_isValidMixin_super_withSuperMixins() {
+ resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
+ Source source = addSource(r'''
+class A {
+ toString() {
+ return super.toString();
+ }
+}
+class C = Object with A;''');
+ LibraryElement library = resolve2(source);
+ expect(library, isNotNull);
+ CompilationUnitElement unit = library.definingCompilationUnit;
+ expect(unit, isNotNull);
+ ClassElement a = unit.getType('A');
+ expect(a.isValidMixin, isTrue);
assertNoErrors(source);
verify([source]);
}
void test_isValidMixin_valid() {
- Source source = addSource("class A {}");
+ Source source = addSource('''
+class A {}
+class C = Object with A;''');
LibraryElement library = resolve2(source);
expect(library, isNotNull);
CompilationUnitElement unit = library.definingCompilationUnit;
expect(unit, isNotNull);
- List<ClassElement> classes = unit.types;
- expect(classes, hasLength(1));
- expect(classes[0].isValidMixin, isTrue);
+ ClassElement a = unit.getType('A');
+ expect(a.isValidMixin, isTrue);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_isValidMixin_valid_withSuperMixins() {
+ resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
+ Source source = addSource('''
+class A {}
+class C = Object with A;''');
+ LibraryElement library = resolve2(source);
+ expect(library, isNotNull);
+ CompilationUnitElement unit = library.definingCompilationUnit;
+ expect(unit, isNotNull);
+ ClassElement a = unit.getType('A');
+ expect(a.isValidMixin, isTrue);
assertNoErrors(source);
verify([source]);
}

Powered by Google App Engine
This is Rietveld 408576698