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

Side by Side Diff: pkg/analyzer/lib/src/task/options.dart

Issue 1505623002: ErrorCode hashing for faster lookup in validation. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: master_merge Created 5 years 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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.src.task.options; 5 library analyzer.src.task.options;
6 6
7 import 'dart:collection';
8
7 import 'package:analyzer/analyzer.dart'; 9 import 'package:analyzer/analyzer.dart';
8 import 'package:analyzer/plugin/options.dart'; 10 import 'package:analyzer/plugin/options.dart';
9 import 'package:analyzer/source/analysis_options_provider.dart'; 11 import 'package:analyzer/source/analysis_options_provider.dart';
10 import 'package:analyzer/src/generated/engine.dart'; 12 import 'package:analyzer/src/generated/engine.dart';
11 import 'package:analyzer/src/generated/java_engine.dart'; 13 import 'package:analyzer/src/generated/java_engine.dart';
12 import 'package:analyzer/src/generated/source.dart'; 14 import 'package:analyzer/src/generated/source.dart';
13 import 'package:analyzer/src/generated/utilities_general.dart'; 15 import 'package:analyzer/src/generated/utilities_general.dart';
14 import 'package:analyzer/src/task/general.dart'; 16 import 'package:analyzer/src/task/general.dart';
15 import 'package:analyzer/src/task/strong/info.dart'; 17 import 'package:analyzer/src/task/strong/info.dart';
16 import 'package:analyzer/task/general.dart'; 18 import 'package:analyzer/task/general.dart';
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 } 121 }
120 } 122 }
121 123
122 /// Validates `analyzer` error filter options. 124 /// Validates `analyzer` error filter options.
123 class ErrorFilterOptionValidator extends OptionsValidator { 125 class ErrorFilterOptionValidator extends OptionsValidator {
124 /// Pretty list of legal includes. 126 /// Pretty list of legal includes.
125 static final String legalIncludes = StringUtilities.printListOfQuotedNames( 127 static final String legalIncludes = StringUtilities.printListOfQuotedNames(
126 new List.from(AnalyzerOptions.ignoreSynonyms) 128 new List.from(AnalyzerOptions.ignoreSynonyms)
127 ..addAll(AnalyzerOptions.includeSynonyms)); 129 ..addAll(AnalyzerOptions.includeSynonyms));
128 130
129 bool recognizedErrorCode(String name) => 131 /// Lazily populated set of error codes (hashed for speedy lookup).
130 ErrorCode.values.any((ErrorCode code) => code.name == name) || 132 static HashSet<String> _errorCodes;
131 StaticInfo.names.contains(name); 133
134 /// Legal error code names.
135 static Set<String> get errorCodes {
136 if (_errorCodes == null) {
137 _errorCodes = new HashSet<String>();
138 // Engine codes.
139 _errorCodes.addAll(ErrorCode.values.map((ErrorCode code) => code.name));
140 // Strong-mode codes.
141 _errorCodes.addAll(StaticInfo.names);
142 }
143 return _errorCodes;
144 }
132 145
133 @override 146 @override
134 void validate(ErrorReporter reporter, Map<String, YamlNode> options) { 147 void validate(ErrorReporter reporter, Map<String, YamlNode> options) {
135 var analyzer = options[AnalyzerOptions.analyzer]; 148 var analyzer = options[AnalyzerOptions.analyzer];
136 if (analyzer is! YamlMap) { 149 if (analyzer is! YamlMap) {
137 return; 150 return;
138 } 151 }
139 152
140 var filters = analyzer[AnalyzerOptions.errors]; 153 var filters = analyzer[AnalyzerOptions.errors];
141 if (filters is YamlMap) { 154 if (filters is YamlMap) {
142 String value; 155 String value;
143 filters.nodes.forEach((k, v) { 156 filters.nodes.forEach((k, v) {
144 if (k is YamlScalar) { 157 if (k is YamlScalar) {
145 value = toUpperCase(k.value); 158 value = toUpperCase(k.value);
146 if (!recognizedErrorCode(value)) { 159 if (!errorCodes.contains(value)) {
147 reporter.reportErrorForSpan( 160 reporter.reportErrorForSpan(
148 AnalysisOptionsWarningCode.UNRECOGNIZED_ERROR_CODE, 161 AnalysisOptionsWarningCode.UNRECOGNIZED_ERROR_CODE,
149 k.span, 162 k.span,
150 [k.value?.toString()]); 163 [k.value?.toString()]);
151 } 164 }
152 } 165 }
153 if (v is YamlScalar) { 166 if (v is YamlScalar) {
154 value = toLowerCase(v.value); 167 value = toLowerCase(v.value);
155 if (!AnalyzerOptions.ignoreSynonyms.contains(value) && 168 if (!AnalyzerOptions.ignoreSynonyms.contains(value) &&
156 !AnalyzerOptions.includeSynonyms.contains(value)) { 169 !AnalyzerOptions.includeSynonyms.contains(value)) {
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 void setStrongMode(AnalysisContext context, Object strongMode) { 463 void setStrongMode(AnalysisContext context, Object strongMode) {
451 bool strong = strongMode is bool ? strongMode : false; 464 bool strong = strongMode is bool ? strongMode : false;
452 if (context.analysisOptions.strongMode != strong) { 465 if (context.analysisOptions.strongMode != strong) {
453 AnalysisOptionsImpl options = 466 AnalysisOptionsImpl options =
454 new AnalysisOptionsImpl.from(context.analysisOptions); 467 new AnalysisOptionsImpl.from(context.analysisOptions);
455 options.strongMode = strong; 468 options.strongMode = strong;
456 context.analysisOptions = options; 469 context.analysisOptions = options;
457 } 470 }
458 } 471 }
459 } 472 }
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