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

Side by Side 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, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analyzer.test.generated.resolver_test; 5 library analyzer.test.generated.resolver_test;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'package:analyzer/dart/ast/ast.dart'; 9 import 'package:analyzer/dart/ast/ast.dart';
10 import 'package:analyzer/dart/ast/visitor.dart'; 10 import 'package:analyzer/dart/ast/visitor.dart';
(...skipping 9378 matching lines...) Expand 10 before | Expand all | Expand 10 after
9389 } 9389 }
9390 }'''); 9390 }''');
9391 computeLibrarySourceErrors(source); 9391 computeLibrarySourceErrors(source);
9392 assertNoErrors(source); 9392 assertNoErrors(source);
9393 verify([source]); 9393 verify([source]);
9394 } 9394 }
9395 9395
9396 void test_isValidMixin_badSuperclass() { 9396 void test_isValidMixin_badSuperclass() {
9397 Source source = addSource(r''' 9397 Source source = addSource(r'''
9398 class A extends B {} 9398 class A extends B {}
9399 class B {}'''); 9399 class B {}
9400 class C = Object with A;''');
9400 LibraryElement library = resolve2(source); 9401 LibraryElement library = resolve2(source);
9401 expect(library, isNotNull); 9402 expect(library, isNotNull);
9402 CompilationUnitElement unit = library.definingCompilationUnit; 9403 CompilationUnitElement unit = library.definingCompilationUnit;
9403 expect(unit, isNotNull); 9404 expect(unit, isNotNull);
9404 List<ClassElement> classes = unit.types; 9405 ClassElement a = unit.getType('A');
9405 expect(classes, hasLength(2)); 9406 expect(a.isValidMixin, isFalse);
9406 expect(classes[0].isValidMixin, isFalse); 9407 assertErrors(source, [CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT]);
9408 verify([source]);
9409 }
9410
9411 void test_isValidMixin_badSuperclass_withSuperMixins() {
9412 resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
9413 Source source = addSource(r'''
9414 class A extends B {}
9415 class B {}
9416 class C = Object with A;''');
9417 LibraryElement library = resolve2(source);
9418 expect(library, isNotNull);
9419 CompilationUnitElement unit = library.definingCompilationUnit;
9420 expect(unit, isNotNull);
9421 ClassElement a = unit.getType('A');
9422 expect(a.isValidMixin, isTrue);
9407 assertNoErrors(source); 9423 assertNoErrors(source);
9408 verify([source]); 9424 verify([source]);
9409 } 9425 }
9410 9426
9411 void test_isValidMixin_constructor() { 9427 void test_isValidMixin_constructor() {
9412 Source source = addSource(r''' 9428 Source source = addSource(r'''
9413 class A { 9429 class A {
9414 A() {} 9430 A() {}
9415 }'''); 9431 }
9432 class C = Object with A;''');
9416 LibraryElement library = resolve2(source); 9433 LibraryElement library = resolve2(source);
9417 expect(library, isNotNull); 9434 expect(library, isNotNull);
9418 CompilationUnitElement unit = library.definingCompilationUnit; 9435 CompilationUnitElement unit = library.definingCompilationUnit;
9419 expect(unit, isNotNull); 9436 expect(unit, isNotNull);
9420 List<ClassElement> classes = unit.types; 9437 ClassElement a = unit.getType('A');
9421 expect(classes, hasLength(1)); 9438 expect(a.isValidMixin, isFalse);
9422 expect(classes[0].isValidMixin, isFalse); 9439 assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
9440 verify([source]);
9441 }
9442
9443 void test_isValidMixin_constructor_withSuperMixins() {
9444 resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
9445 Source source = addSource(r'''
9446 class A {
9447 A() {}
9448 }
9449 class C = Object with A;''');
9450 LibraryElement library = resolve2(source);
9451 expect(library, isNotNull);
9452 CompilationUnitElement unit = library.definingCompilationUnit;
9453 expect(unit, isNotNull);
9454 ClassElement a = unit.getType('A');
9455 expect(a.isValidMixin, isFalse);
9456 assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
9457 verify([source]);
9458 }
9459
9460 void test_isValidMixin_factoryConstructor() {
9461 Source source = addSource(r'''
9462 class A {
9463 factory A() => null;
9464 }
9465 class C = Object with A;''');
9466 LibraryElement library = resolve2(source);
9467 expect(library, isNotNull);
9468 CompilationUnitElement unit = library.definingCompilationUnit;
9469 expect(unit, isNotNull);
9470 ClassElement a = unit.getType('A');
9471 expect(a.isValidMixin, isTrue);
9423 assertNoErrors(source); 9472 assertNoErrors(source);
9424 verify([source]); 9473 verify([source]);
9425 } 9474 }
9475
9476 void test_isValidMixin_factoryConstructor_withSuperMixins() {
9477 resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
9478 Source source = addSource(r'''
9479 class A {
9480 factory A() => null;
9481 }
9482 class C = Object with A;''');
9483 LibraryElement library = resolve2(source);
9484 expect(library, isNotNull);
9485 CompilationUnitElement unit = library.definingCompilationUnit;
9486 expect(unit, isNotNull);
9487 ClassElement a = unit.getType('A');
9488 expect(a.isValidMixin, isTrue);
9489 assertNoErrors(source);
9490 verify([source]);
9491 }
9426 9492
9427 void test_isValidMixin_super() { 9493 void test_isValidMixin_super() {
9428 Source source = addSource(r''' 9494 Source source = addSource(r'''
9429 class A { 9495 class A {
9430 toString() { 9496 toString() {
9431 return super.toString(); 9497 return super.toString();
9432 } 9498 }
9433 }'''); 9499 }
9500 class C = Object with A;''');
9434 LibraryElement library = resolve2(source); 9501 LibraryElement library = resolve2(source);
9435 expect(library, isNotNull); 9502 expect(library, isNotNull);
9436 CompilationUnitElement unit = library.definingCompilationUnit; 9503 CompilationUnitElement unit = library.definingCompilationUnit;
9437 expect(unit, isNotNull); 9504 expect(unit, isNotNull);
9438 List<ClassElement> classes = unit.types; 9505 ClassElement a = unit.getType('A');
9439 expect(classes, hasLength(1)); 9506 expect(a.isValidMixin, isFalse);
9440 expect(classes[0].isValidMixin, isFalse); 9507 assertErrors(source, [CompileTimeErrorCode.MIXIN_REFERENCES_SUPER]);
9508 verify([source]);
9509 }
9510
9511 void test_isValidMixin_super_withSuperMixins() {
9512 resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
9513 Source source = addSource(r'''
9514 class A {
9515 toString() {
9516 return super.toString();
9517 }
9518 }
9519 class C = Object with A;''');
9520 LibraryElement library = resolve2(source);
9521 expect(library, isNotNull);
9522 CompilationUnitElement unit = library.definingCompilationUnit;
9523 expect(unit, isNotNull);
9524 ClassElement a = unit.getType('A');
9525 expect(a.isValidMixin, isTrue);
9441 assertNoErrors(source); 9526 assertNoErrors(source);
9442 verify([source]); 9527 verify([source]);
9443 } 9528 }
9444 9529
9445 void test_isValidMixin_valid() { 9530 void test_isValidMixin_valid() {
9446 Source source = addSource("class A {}"); 9531 Source source = addSource('''
9532 class A {}
9533 class C = Object with A;''');
9447 LibraryElement library = resolve2(source); 9534 LibraryElement library = resolve2(source);
9448 expect(library, isNotNull); 9535 expect(library, isNotNull);
9449 CompilationUnitElement unit = library.definingCompilationUnit; 9536 CompilationUnitElement unit = library.definingCompilationUnit;
9450 expect(unit, isNotNull); 9537 expect(unit, isNotNull);
9451 List<ClassElement> classes = unit.types; 9538 ClassElement a = unit.getType('A');
9452 expect(classes, hasLength(1)); 9539 expect(a.isValidMixin, isTrue);
9453 expect(classes[0].isValidMixin, isTrue);
9454 assertNoErrors(source); 9540 assertNoErrors(source);
9455 verify([source]); 9541 verify([source]);
9456 } 9542 }
9543
9544 void test_isValidMixin_valid_withSuperMixins() {
9545 resetWithOptions(new AnalysisOptionsImpl()..enableSuperMixins = true);
9546 Source source = addSource('''
9547 class A {}
9548 class C = Object with A;''');
9549 LibraryElement library = resolve2(source);
9550 expect(library, isNotNull);
9551 CompilationUnitElement unit = library.definingCompilationUnit;
9552 expect(unit, isNotNull);
9553 ClassElement a = unit.getType('A');
9554 expect(a.isValidMixin, isTrue);
9555 assertNoErrors(source);
9556 verify([source]);
9557 }
9457 9558
9458 void test_labels_switch() { 9559 void test_labels_switch() {
9459 Source source = addSource(r''' 9560 Source source = addSource(r'''
9460 void doSwitch(int target) { 9561 void doSwitch(int target) {
9461 switch (target) { 9562 switch (target) {
9462 l0: case 0: 9563 l0: case 0:
9463 continue l1; 9564 continue l1;
9464 l1: case 1: 9565 l1: case 1:
9465 continue l0; 9566 continue l0;
9466 default: 9567 default:
(...skipping 7461 matching lines...) Expand 10 before | Expand all | Expand 10 after
16928 17029
16929 void _resolveTestUnit(String code) { 17030 void _resolveTestUnit(String code) {
16930 testCode = code; 17031 testCode = code;
16931 testSource = addSource(testCode); 17032 testSource = addSource(testCode);
16932 LibraryElement library = resolve2(testSource); 17033 LibraryElement library = resolve2(testSource);
16933 assertNoErrors(testSource); 17034 assertNoErrors(testSource);
16934 verify([testSource]); 17035 verify([testSource]);
16935 testUnit = resolveCompilationUnit(testSource, library); 17036 testUnit = resolveCompilationUnit(testSource, library);
16936 } 17037 }
16937 } 17038 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698