Make several fields of FileState non-nullable.

With external libraries separated, we always have the fields.

R=brianwilkerson@google.com

Change-Id: I91038198921670f7739b82ed7f88abd67a2debca
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/195304
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 35f7890..6024381 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -632,7 +632,7 @@
           throw ArgumentError('$uri is not a library.');
         }
 
-        var unitResult = await getUnitElement(file.path!);
+        var unitResult = await getUnitElement(file.path);
         return unitResult.element.library;
       },
       (externalLibrary) async {
@@ -662,10 +662,8 @@
     var units = <ParsedUnitResult>[];
     for (var unitFile in file.libraryFiles) {
       var unitPath = unitFile.path;
-      if (unitPath != null) {
-        var unitResult = parseFileSync(unitPath);
-        units.add(unitResult);
-      }
+      var unitResult = parseFileSync(unitPath);
+      units.add(unitResult);
     }
 
     return ParsedLibraryResultImpl(currentSession, path, file.uri, units);
@@ -685,7 +683,7 @@
         if (file.isPart) {
           throw ArgumentError('Is a part: $uri');
         }
-        return getParsedLibrary(file.path!);
+        return getParsedLibrary(file.path);
       },
       (externalLibrary) {
         return ParsedLibraryResultImpl.external(currentSession, uri);
@@ -759,7 +757,7 @@
         if (file.isPart) {
           throw ArgumentError('Is a part: $uri');
         }
-        return getResolvedLibrary(file.path!);
+        return getResolvedLibrary(file.path);
       },
       (externalLibrary) async {
         return ResolvedLibraryResultImpl.external(currentSession, uri);
@@ -925,7 +923,7 @@
     FileState file = _fileTracker.getFile(path);
     RecordingErrorListener listener = RecordingErrorListener();
     CompilationUnit unit = file.parse(listener);
-    return ParsedUnitResultImpl(currentSession, file.path!, file.uri,
+    return ParsedUnitResultImpl(currentSession, file.path, file.uri,
         file.content, file.lineInfo, file.isPart, unit, listener.errors);
   }
 
@@ -1403,28 +1401,27 @@
       Map<FileState, UnitAnalysisResult> unitResults = analyzer.analyze();
       var resolvedUnits = <ResolvedUnitResult>[];
 
-      for (var unitFile in unitResults.keys) {
-        if (unitFile.path != null) {
-          var unitResult = unitResults[unitFile]!;
-          resolvedUnits.add(
-            ResolvedUnitResultImpl(
-              currentSession,
-              unitFile.path!,
-              unitFile.uri,
-              unitFile.exists,
-              unitFile.content,
-              unitFile.lineInfo,
-              unitFile.isPart,
-              unitResult.unit,
-              unitResult.errors,
-            ),
-          );
-        }
+      for (var entry in unitResults.entries) {
+        var unitFile = entry.key;
+        var unitResult = entry.value;
+        resolvedUnits.add(
+          ResolvedUnitResultImpl(
+            currentSession,
+            unitFile.path,
+            unitFile.uri,
+            unitFile.exists,
+            unitFile.content,
+            unitFile.lineInfo,
+            unitFile.isPart,
+            unitResult.unit,
+            unitResult.errors,
+          ),
+        );
       }
 
       return ResolvedLibraryResultImpl(
         currentSession,
-        library.path!,
+        library.path,
         library.uri,
         resolvedUnits.first.libraryElement,
         resolvedUnits,
@@ -1610,7 +1607,7 @@
     _updateHasErrorOrWarningFlag(file, errors);
     return AnalysisResult(
         currentSession,
-        file.path!,
+        file.path,
         file.uri,
         file.exists,
         content,
@@ -1627,7 +1624,7 @@
       FileState file, List<AnalysisDriverUnitError> serialized) {
     List<AnalysisError> errors = <AnalysisError>[];
     for (AnalysisDriverUnitError error in serialized) {
-      var analysisError = ErrorEncoding.decode(file.source!, error);
+      var analysisError = ErrorEncoding.decode(file.source, error);
       if (analysisError != null) {
         errors.add(analysisError);
       }
@@ -1666,7 +1663,7 @@
     // TODO(scheglov) Find a better way to report this.
     return AnalysisResult(
         currentSession,
-        file.path!,
+        file.path,
         file.uri,
         file.exists,
         null,
@@ -1675,7 +1672,7 @@
         'missing',
         null,
         [
-          AnalysisError(file.source!, 0, 0,
+          AnalysisError(file.source, 0, 0,
               CompileTimeErrorCode.MISSING_DART_LIBRARY, [missingUri])
         ],
         null);
@@ -1696,9 +1693,7 @@
     var libraryFile = _fsState.getFileForPath(path);
     for (var file in libraryFile.libraryFiles) {
       var path = file.path;
-      if (path != null) {
-        fileContentMap[path] = file.content;
-      }
+      fileContentMap[path] = file.content;
     }
 
     _exceptionController.add(
@@ -1737,7 +1732,7 @@
       List<AnalysisDriverExceptionFileBuilder> contextFiles = libraryFile
           .transitiveFiles
           .map((file) => AnalysisDriverExceptionFileBuilder(
-              path: file.path!, content: file.content))
+              path: file.path, content: file.content))
           .toList();
       contextFiles.sort((a, b) => a.path.compareTo(b.path));
       AnalysisDriverExceptionContextBuilder contextBuilder =
@@ -2409,7 +2404,7 @@
       }
       FileState file = filesToCheck![filesToCheckIndex++];
       if (file.referencedNames.contains(name)) {
-        referencingFiles.add(file.path!);
+        referencingFiles.add(file.path);
       }
     }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index fbb35e3..0577376 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -92,13 +92,13 @@
   final FileSystemState _fsState;
 
   /// The absolute path of the file.
-  final String? path;
+  final String path;
 
   /// The absolute URI of the file.
   final Uri uri;
 
   /// The [Source] of the file with the [uri].
-  final Source? source;
+  final Source source;
 
   /// The [WorkspacePackage] that contains this file.
   ///
@@ -111,12 +111,12 @@
   /// possibly additional enabled experiments (from the analysis options file,
   /// or from SDK allowed experiments).
   ///
-  /// This feature set is then restricted, with the [_packageLanguageVersion],
+  /// This feature set is then restricted, with the [packageLanguageVersion],
   /// or with a `@dart` language override token in the file header.
-  final FeatureSet? _contextFeatureSet;
+  final FeatureSet _contextFeatureSet;
 
   /// The language version for the package that contains this file.
-  final Version? packageLanguageVersion;
+  final Version packageLanguageVersion;
 
   int id = fileObjectId++;
   int? refreshId;
@@ -371,7 +371,7 @@
 
   String get _invalidTransitiveSignature {
     return (ApiSignature()
-          ..addString(path!)
+          ..addString(path)
           ..addBytes(unlinkedSignature))
         .toHex();
   }
@@ -434,7 +434,7 @@
     _invalidateCurrentUnresolvedData();
 
     {
-      var rawFileState = _fsState._fileContentCache.get(path!, allowCached);
+      var rawFileState = _fsState._fileContentCache.get(path, allowCached);
       _content = rawFileState.content;
       _exists = rawFileState.exists;
       _contentHash = rawFileState.contentHash;
@@ -444,8 +444,8 @@
     {
       var signature = ApiSignature();
       signature.addUint32List(_fsState._saltForUnlinked);
-      signature.addFeatureSet(_contextFeatureSet!);
-      signature.addLanguageVersion(packageLanguageVersion!);
+      signature.addFeatureSet(_contextFeatureSet);
+      signature.addLanguageVersion(packageLanguageVersion);
       signature.addString(_contentHash!);
       signature.addBool(_exists!);
       _unlinkedSignature = signature.toByteList();
@@ -522,11 +522,7 @@
 
   @override
   String toString() {
-    if (path == null) {
-      return '<unresolved>';
-    } else {
-      return '[id: $id][rid: $refreshId]$uri = $path';
-    }
+    return '[id: $id][rid: $refreshId]$uri = $path';
   }
 
   CompilationUnitImpl _createEmptyCompilationUnit() {
@@ -534,13 +530,13 @@
     var unit = astFactory.compilationUnit(
       beginToken: token,
       endToken: token,
-      featureSet: _contextFeatureSet!,
+      featureSet: _contextFeatureSet,
     );
 
     unit.lineInfo = LineInfo(const <int>[0]);
 
     unit.languageVersion = LibraryLanguageVersion(
-      package: packageLanguageVersion!,
+      package: packageLanguageVersion,
       override: null,
     );
 
@@ -610,23 +606,19 @@
   }
 
   CompilationUnitImpl _parse(AnalysisErrorListener errorListener) {
-    if (source == null) {
-      return _createEmptyCompilationUnit();
-    }
-
     CharSequenceReader reader = CharSequenceReader(content);
-    Scanner scanner = Scanner(source!, reader, errorListener)
+    Scanner scanner = Scanner(source, reader, errorListener)
       ..configureFeatures(
-        featureSetForOverriding: _contextFeatureSet!,
-        featureSet: _contextFeatureSet!.restrictToVersion(
-          packageLanguageVersion!,
+        featureSetForOverriding: _contextFeatureSet,
+        featureSet: _contextFeatureSet.restrictToVersion(
+          packageLanguageVersion,
         ),
       );
     Token token = scanner.tokenize(reportScannerErrors: false);
     LineInfo lineInfo = LineInfo(scanner.lineStarts);
 
     Parser parser = Parser(
-      source!,
+      source,
       errorListener,
       featureSet: scanner.featureSet,
     );
@@ -635,7 +627,7 @@
     var unit = parser.parseCompilationUnit(token);
     unit.lineInfo = lineInfo;
     unit.languageVersion = LibraryLanguageVersion(
-      package: packageLanguageVersion!,
+      package: packageLanguageVersion,
       override: scanner.overrideVersion,
     );
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 1b7434b..399bc43 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -176,15 +176,13 @@
     // This must happen after all other diagnostics have been computed but
     // before the list of diagnostics has been filtered.
     for (var file in _library.libraryFiles) {
-      if (file.source != null) {
-        IgnoreValidator(
-          _getErrorReporter(file),
-          _getErrorListener(file).errors,
-          _fileToIgnoreInfo[file]!,
-          _fileToLineInfo[file]!,
-          _analysisOptions.unignorableNames,
-        ).reportErrors();
-      }
+      IgnoreValidator(
+        _getErrorReporter(file),
+        _getErrorListener(file).errors,
+        _fileToIgnoreInfo[file]!,
+        _fileToLineInfo[file]!,
+        _analysisOptions.unignorableNames,
+      ).reportErrors();
     }
 
     timerLibraryAnalyzerVerify.stop();
@@ -256,10 +254,6 @@
   }
 
   void _computeHints(FileState file, CompilationUnit unit) {
-    if (file.source == null) {
-      return;
-    }
-
     AnalysisErrorListener errorListener = _getErrorListener(file);
     ErrorReporter errorReporter = _getErrorReporter(file);
 
@@ -333,10 +327,6 @@
   void _computeLints(FileState file, LinterContextUnit currentUnit,
       List<LinterContextUnit> allUnits) {
     var unit = currentUnit.unit;
-    if (file.source == null) {
-      return;
-    }
-
     ErrorReporter errorReporter = _getErrorReporter(file);
 
     var nodeRegistry = NodeLintRegistry(_analysisOptions.enableTiming);
@@ -370,10 +360,6 @@
   }
 
   void _computeVerifyErrors(FileState file, CompilationUnit unit) {
-    if (file.source == null) {
-      return;
-    }
-
     RecordingErrorListener errorListener = _getErrorListener(file);
 
     CodeChecker checker = CodeChecker(
@@ -478,7 +464,7 @@
       RecordingErrorListener listener = _getErrorListener(file);
       return ErrorReporter(
         listener,
-        file.source!,
+        file.source,
         isNonNullableByDefault: _libraryElement.isNonNullableByDefault,
       );
     });
@@ -665,10 +651,6 @@
 
   void _resolveFile(FileState file, CompilationUnit unit) {
     var source = file.source;
-    if (source == null) {
-      return;
-    }
-
     RecordingErrorListener errorListener = _getErrorListener(file);
 
     var unitElement = unit.declaredElement as CompilationUnitElementImpl;
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index 94a44cf..7401cb1 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -138,7 +138,7 @@
         librariesLinkedTimer.start();
 
         testView.linkedCycles.add(
-          cycle.libraries.map((e) => e.path!).toSet(),
+          cycle.libraries.map((e) => e.path).toSet(),
         );
 
         timerInputLibraries.start();
@@ -146,7 +146,6 @@
         var inputLibraries = <link2.LinkInputLibrary>[];
         for (var libraryFile in cycle.libraries) {
           var librarySource = libraryFile.source;
-          if (librarySource == null) continue;
 
           var inputUnits = <link2.LinkInputUnit>[];
           var partIndex = -1;
@@ -163,7 +162,7 @@
             inputUnits.add(
               link2.LinkInputUnit(
                 partUriStr,
-                file.source!,
+                file.source,
                 isSynthetic,
                 unit,
               ),
@@ -316,7 +315,7 @@
     var fileContentMap = <String, String>{};
     for (var libraryFile in cycle.libraries) {
       for (var file in libraryFile.libraryFiles) {
-        fileContentMap[file.path!] = file.content;
+        fileContentMap[file.path] = file.content;
       }
     }
     throw CaughtExceptionWithFiles(exception, stackTrace, fileContentMap);
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_graph.dart b/pkg/analyzer/lib/src/dart/analysis/library_graph.dart
index f4dcec5..d21d4e1 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_graph.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_graph.dart
@@ -110,8 +110,8 @@
 
     // Sort libraries to produce stable signatures.
     scc.sort((first, second) {
-      var firstPath = first.file.path!;
-      var secondPath = second.file.path!;
+      var firstPath = first.file.path;
+      var secondPath = second.file.path;
       return firstPath.compareTo(secondPath);
     });
 
@@ -128,7 +128,7 @@
     for (var node in scc) {
       cycle.libraries.add(node.file);
 
-      signature.addLanguageVersion(node.file.packageLanguageVersion!);
+      signature.addLanguageVersion(node.file.packageLanguageVersion);
       signature.addString(node.file.uriStr);
 
       signature.addInt(node.file.libraryFiles.length);
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 7d24cf9..9e3c4b0 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -149,8 +149,8 @@
 
     if (files != null) {
       for (FileState file in files) {
-        if (searchedFiles.add(file.path!, this)) {
-          var index = await _driver.getIndex(file.path!);
+        if (searchedFiles.add(file.path, this)) {
+          var index = await _driver.getIndex(file.path);
           if (index != null) {
             var request = _IndexRequest(index);
             request.addSubtypes(id, results, file);
@@ -174,7 +174,7 @@
 
     List<FileState> knownFiles = _driver.fsState.knownFiles.toList();
     for (FileState file in knownFiles) {
-      var unitResult = await _driver.getUnitElement(file.path!);
+      var unitResult = await _driver.getUnitElement(file.path);
       if (unitResult.state == ResultState.VALID) {
         CompilationUnitElement unitElement = unitResult.element;
         unitElement.accessors.forEach(addElement);
@@ -245,7 +245,7 @@
         FileState library = _driver.fsState.getFileForPath(libraryPath);
         for (FileState file in library.libraryFiles) {
           if (file.path == path || file.referencedNames.contains(name)) {
-            files.add(file.path!);
+            files.add(file.path);
           }
         }
       }
@@ -316,7 +316,7 @@
               const {
                 IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.REFERENCE
               },
-              file.path!);
+              file.path);
         }
       }
     }