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

Side by Side Diff: pkg/analyzer/lib/src/generated/error_verifier.dart

Issue 1346923007: allow dart:* libs to implement otherwise disallowed types (e.g. int) (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 engine.resolver.error_verifier; 5 library engine.resolver.error_verifier;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import "dart:math" as math; 8 import "dart:math" as math;
9 9
10 import 'package:analyzer/src/generated/static_type_analyzer.dart'; 10 import 'package:analyzer/src/generated/static_type_analyzer.dart';
(...skipping 3181 matching lines...) Expand 10 before | Expand all | Expand 10 after
3192 * [_checkForAllMixinErrorCodes], 3192 * [_checkForAllMixinErrorCodes],
3193 * [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS], 3193 * [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS],
3194 * [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS], and 3194 * [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS], and
3195 * [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]. 3195 * [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS].
3196 */ 3196 */
3197 bool _checkForExtendsOrImplementsDisallowedClass( 3197 bool _checkForExtendsOrImplementsDisallowedClass(
3198 TypeName typeName, ErrorCode errorCode) { 3198 TypeName typeName, ErrorCode errorCode) {
3199 if (typeName.isSynthetic) { 3199 if (typeName.isSynthetic) {
3200 return false; 3200 return false;
3201 } 3201 }
3202 // The SDK implementation may implement disallowed types. For example,
3203 // JSNumber in dart2js and _Smi in Dart VM both implement int.
3204 if (_currentLibrary.source.isInSystemLibrary) {
3205 return false;
3206 }
3202 DartType superType = typeName.type; 3207 DartType superType = typeName.type;
3203 for (InterfaceType disallowedType 3208 for (InterfaceType disallowedType
3204 in _DISALLOWED_TYPES_TO_EXTEND_OR_IMPLEMENT) { 3209 in _DISALLOWED_TYPES_TO_EXTEND_OR_IMPLEMENT) {
3205 if (superType != null && superType == disallowedType) { 3210 if (superType != null && superType == disallowedType) {
3206 // if the violating type happens to be 'num', we need to rule out the 3211 // if the violating type happens to be 'num', we need to rule out the
3207 // case where the enclosing class is 'int' or 'double' 3212 // case where the enclosing class is 'int' or 'double'
3208 if (superType == _typeProvider.numType) { 3213 if (superType == _typeProvider.numType) {
3209 AstNode grandParent = typeName.parent.parent; 3214 AstNode grandParent = typeName.parent.parent;
3210 // Note: this is a corner case that won't happen often, so adding a 3215 // Note: this is a corner case that won't happen often, so adding a
3211 // field currentClass (see currentFunction) to ErrorVerifier isn't 3216 // field currentClass (see currentFunction) to ErrorVerifier isn't
(...skipping 2859 matching lines...) Expand 10 before | Expand all | Expand 10 after
6071 toCheck.add(type.element); 6076 toCheck.add(type.element);
6072 // type arguments 6077 // type arguments
6073 if (type is InterfaceType) { 6078 if (type is InterfaceType) {
6074 InterfaceType interfaceType = type; 6079 InterfaceType interfaceType = type;
6075 for (DartType typeArgument in interfaceType.typeArguments) { 6080 for (DartType typeArgument in interfaceType.typeArguments) {
6076 _addTypeToCheck(typeArgument); 6081 _addTypeToCheck(typeArgument);
6077 } 6082 }
6078 } 6083 }
6079 } 6084 }
6080 } 6085 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698