@@ -200,37 +200,41 @@ class LibraryAnalyzer {
200
200
void _checkForInconsistentLanguageVersionOverride (
201
201
Map <FileState , CompilationUnit > units,
202
202
) {
203
- var libraryUnit = units.values.first;
203
+ var libraryEntry = units.entries.first;
204
+ var libraryUnit = libraryEntry.value;
204
205
var libraryOverrideToken = libraryUnit.languageVersionToken;
205
206
206
- for (var partEntry in units.entries.skip (1 )) {
207
- var partUnit = partEntry.value;
208
- var partOverrideToken = partUnit.languageVersionToken;
209
- if (libraryOverrideToken != null ) {
210
- if (partOverrideToken != null ) {
211
- if (partOverrideToken.major != libraryOverrideToken.major ||
212
- partOverrideToken.minor != libraryOverrideToken.minor) {
213
- _getErrorReporter (partEntry.key).reportErrorForToken (
214
- CompileTimeErrorCode .INCONSISTENT_LANGUAGE_VERSION_OVERRIDE ,
215
- partOverrideToken,
216
- );
207
+ var elementToUnit = < CompilationUnitElement , CompilationUnit > {};
208
+ for (var entry in units.entries) {
209
+ var unit = entry.value;
210
+ elementToUnit[unit.declaredElement] = unit;
211
+ }
212
+
213
+ for (var directive in libraryUnit.directives) {
214
+ if (directive is PartDirective ) {
215
+ var partUnit = elementToUnit[directive.uriElement];
216
+ if (partUnit != null ) {
217
+ var shouldReport = false ;
218
+ var partOverrideToken = partUnit.languageVersionToken;
219
+ if (libraryOverrideToken != null ) {
220
+ if (partOverrideToken != null ) {
221
+ if (partOverrideToken.major != libraryOverrideToken.major ||
222
+ partOverrideToken.minor != libraryOverrideToken.minor) {
223
+ shouldReport = true ;
224
+ }
225
+ } else {
226
+ shouldReport = true ;
227
+ }
228
+ } else if (partOverrideToken != null ) {
229
+ shouldReport = true ;
217
230
}
218
- } else {
219
- var partDirectives = partUnit.directives;
220
- for (var partOf in partDirectives.whereType <PartOfDirective >()) {
221
- var partOffset = partOf.partKeyword.offset;
222
- _getErrorReporter (partEntry.key).reportErrorForOffset (
231
+ if (shouldReport) {
232
+ _getErrorReporter (_library).reportErrorForNode (
223
233
CompileTimeErrorCode .INCONSISTENT_LANGUAGE_VERSION_OVERRIDE ,
224
- partOffset,
225
- partOf.ofKeyword.end - partOffset,
234
+ directive.uri,
226
235
);
227
236
}
228
237
}
229
- } else if (partOverrideToken != null ) {
230
- _getErrorReporter (partEntry.key).reportErrorForToken (
231
- CompileTimeErrorCode .INCONSISTENT_LANGUAGE_VERSION_OVERRIDE ,
232
- partOverrideToken,
233
- );
234
238
}
235
239
}
236
240
}
0 commit comments