|  | // Copyright (c) 2017, 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. | 
|  |  | 
|  | import 'log.dart'; | 
|  |  | 
|  | final _checkedPattern = new RegExp(r"\bchecked\b"); | 
|  | final _abstractErrorPattern = | 
|  | new RegExp(r"\bAbstractClassInstantiationError\b"); | 
|  | final _typeErrorPattern = new RegExp(r"\bTypeError\b"); | 
|  | final _typeAssertionsEnabledPattern = new RegExp(r"\btypeAssertionsEnabled\b"); | 
|  | final _checkedModeEnabledPattern = new RegExp(r"\bcheckedModeEnabled\b"); | 
|  |  | 
|  | void validateFile(String path, String source, [List<String> todos]) { | 
|  | check(Pattern pattern, String noteMessage, String todo) { | 
|  | if (!source.contains(pattern)) return; | 
|  | note("${bold(path)} $noteMessage."); | 
|  | if (todos != null) todos.add(todo); | 
|  | } | 
|  |  | 
|  | check(_checkedPattern, 'mentions "checked"', | 
|  | 'Fix code that mentions "checked" mode.'); | 
|  | check(_abstractErrorPattern, 'mentions "AbstractClassInstantiationError"', | 
|  | "Remove code that checks for AbstractClassInstantiationError."); | 
|  | check(_typeErrorPattern, 'mentions "TypeError"', | 
|  | "Ensure code that checks for a TypeError uses 2.0 semantics."); | 
|  | check(_typeAssertionsEnabledPattern, 'mentions "typeAssertionsEnabled"', | 
|  | "Remove checks for typeAssertionsEnabled, they are always enabled in 2.0."); | 
|  | check(_checkedModeEnabledPattern, 'mentions "typeAssertionsEnabled"', | 
|  | "Remove checks for checkedModeEnabled, it is always enabled in 2.0."); | 
|  | } |