@@ -200,37 +200,41 @@ class LibraryAnalyzer {
200200 void _checkForInconsistentLanguageVersionOverride (
201201 Map <FileState , CompilationUnit > units,
202202 ) {
203- var libraryUnit = units.values.first;
203+ var libraryEntry = units.entries.first;
204+ var libraryUnit = libraryEntry.value;
204205 var libraryOverrideToken = libraryUnit.languageVersionToken;
205206
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 ;
217230 }
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 (
223233 CompileTimeErrorCode .INCONSISTENT_LANGUAGE_VERSION_OVERRIDE ,
224- partOffset,
225- partOf.ofKeyword.end - partOffset,
234+ directive.uri,
226235 );
227236 }
228237 }
229- } else if (partOverrideToken != null ) {
230- _getErrorReporter (partEntry.key).reportErrorForToken (
231- CompileTimeErrorCode .INCONSISTENT_LANGUAGE_VERSION_OVERRIDE ,
232- partOverrideToken,
233- );
234238 }
235239 }
236240 }
0 commit comments