diff --git a/lib/src/ast.dart b/lib/src/ast.dart index e29308c57..9bf4ebe11 100644 --- a/lib/src/ast.dart +++ b/lib/src/ast.dart @@ -324,7 +324,7 @@ class HasConstErrorListener extends AnalysisErrorListener { @override void onError(AnalysisError error) { - hasConstError = errorCodes.contains(error.errorCode); + hasConstError = hasConstError || errorCodes.contains(error.errorCode); } static const List errorCodes = const [ @@ -340,6 +340,7 @@ class HasConstErrorListener extends AnalysisErrorListener { CompileTimeErrorCode.INVALID_CONSTANT, CompileTimeErrorCode.MISSING_CONST_IN_LIST_LITERAL, CompileTimeErrorCode.MISSING_CONST_IN_MAP_LITERAL, + CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION, CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, diff --git a/test/all.dart b/test/all.dart index aaf23670d..19407e5cb 100644 --- a/test/all.dart +++ b/test/all.dart @@ -4,6 +4,7 @@ import 'package:analyzer/src/lint/io.dart'; +import 'ast_test.dart' as ast_test; import 'engine_test.dart' as engine_test; import 'formatter_test.dart' as formatter_test; import 'integration_test.dart' as integration_test; @@ -17,6 +18,7 @@ main() { // Redirect output. outSink = new MockIOSink(); + ast_test.main(); engine_test.main(); formatter_test.main(); integration_test.main(); diff --git a/test/ast_test.dart b/test/ast_test.dart new file mode 100644 index 000000000..2cf8053fe --- /dev/null +++ b/test/ast_test.dart @@ -0,0 +1,27 @@ +import 'package:analyzer/analyzer.dart'; +import 'package:linter/src/ast.dart'; +import 'package:test/test.dart'; + +main() { + group('HasConstErrorListener', () { + test('has hasConstError false by default', () { + final listener = new HasConstErrorListener(); + expect(listener.hasConstError, isFalse); + }); + test('has hasConstError true with a tracked const error', () { + final listener = new HasConstErrorListener(); + listener.onError(new AnalysisError( + null, null, null, CompileTimeErrorCode.CONST_WITH_NON_CONST)); + expect(listener.hasConstError, isTrue); + }); + test('has hasConstError true even if last error is not related to const', + () { + final listener = new HasConstErrorListener(); + listener.onError(new AnalysisError( + null, null, null, CompileTimeErrorCode.CONST_WITH_NON_CONST)); + listener.onError(new AnalysisError( + null, null, null, CompileTimeErrorCode.ACCESS_PRIVATE_ENUM_FIELD)); + expect(listener.hasConstError, isTrue); + }); + }); +}