[analysis_server] Make CompilationUnitElement.lineInfo non-nullable
Change-Id: Ia42e2a2fd153b5af167588b9d4d473d1f998a67b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/235880
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index 9b829c7..7f8d2e5 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -14,7 +14,6 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/diagnostic/diagnostic.dart' as engine;
import 'package:analyzer/error/error.dart' as engine;
-import 'package:analyzer/exception/exception.dart';
import 'package:analyzer/source/error_processor.dart';
import 'package:analyzer/src/generated/source.dart' as engine;
import 'package:analyzer_plugin/protocol/protocol_common.dart';
@@ -299,25 +298,16 @@
/// Creates a new [Location].
Location _locationForArgs(
engine.CompilationUnitElement unitElement, engine.SourceRange range) {
- var startLine = 0;
- var startColumn = 0;
- var endLine = 0;
- var endColumn = 0;
- try {
- var lineInfo = unitElement.lineInfo;
- if (lineInfo != null) {
- var startLocation = lineInfo.getLocation(range.offset);
- startLine = startLocation.lineNumber;
- startColumn = startLocation.columnNumber;
+ var lineInfo = unitElement.lineInfo;
- var endLocation = lineInfo.getLocation(range.end);
- endLine = endLocation.lineNumber;
- endColumn = endLocation.columnNumber;
- }
- } on AnalysisException {
- // TODO(brianwilkerson) It doesn't look like the code in the try block
- // should be able to throw an exception. Try removing the try statement.
- }
+ var startLocation = lineInfo.getLocation(range.offset);
+ var endLocation = lineInfo.getLocation(range.end);
+
+ var startLine = startLocation.lineNumber;
+ var startColumn = startLocation.columnNumber;
+ var endLine = endLocation.lineNumber;
+ var endColumn = endLocation.columnNumber;
+
return Location(unitElement.source.fullName, range.offset, range.length,
startLine, startColumn,
endLine: endLine, endColumn: endColumn);
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 5692f14..ccc51f6 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -8,6 +8,8 @@
* Deprecated `AnalysisDriver.getParsedLibraryByUri`, use `getParsedLibraryByUri2` instead.
* Deprecated `AnalysisDriver.parseFileSync`, use `parseFile` instead.
* Deprecated `astFactory`, clients should not create AST nodes manually.
+* Changed `CompilationUnit.lineInfo` to be non-nullable.
+* Changed `CompilationUnitElement.lineInfo` to be non-nullable.
## 3.3.1
* Report HintCode.OVERRIDE_ON_NON_OVERRIDING_xyz on enum.
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index e0478a0..9c73621 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -413,8 +413,8 @@
@Deprecated('Not useful for clients')
bool get hasLoadLibraryFunction;
- /// Return the [LineInfo] for the [source], or `null` if not computed yet.
- LineInfo? get lineInfo;
+ /// Return the [LineInfo] for the [source].
+ LineInfo get lineInfo;
/// Return a list containing all of the mixins contained in this compilation
/// unit.
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 6df7913..988d60f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -259,7 +259,7 @@
try {
unitElement.accept(
_FunctionElementVisitor((element) {
- addDeclaration(unitElement.lineInfo!, element);
+ addDeclaration(unitElement.lineInfo, element);
}),
);
} on _MaxNumberOfDeclarationsError {
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 060903e..0f0720a 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -974,7 +974,7 @@
late Source source;
@override
- LineInfo? lineInfo;
+ late LineInfo lineInfo;
/// The source of the library containing this compilation unit.
///
diff --git a/pkg/analyzer/lib/src/generated/testing/element_factory.dart b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
index cd89eef..5492b85 100644
--- a/pkg/analyzer/lib/src/generated/testing/element_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
@@ -91,12 +91,12 @@
classTypeAlias(typeName, objectType, parameterNames);
static CompilationUnitElementImpl compilationUnit(String fileName,
- [Source? librarySource]) {
+ [Source? librarySource, LineInfo? lineInfo]) {
Source source = NonExistingSource(fileName, toUri(fileName));
CompilationUnitElementImpl unit = CompilationUnitElementImpl();
unit.source = source;
- librarySource ??= source;
- unit.librarySource = librarySource;
+ unit.librarySource = librarySource ?? source;
+ unit.lineInfo = lineInfo ?? LineInfo([0]);
return unit;
}
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
index f289112..38630e9 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
@@ -6,6 +6,7 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
@@ -872,6 +873,7 @@
var asyncUnit = CompilationUnitElementImpl();
var asyncSource = analysisContext.sourceFactory.forUri('dart:async')!;
asyncUnit.librarySource = asyncUnit.source = asyncSource;
+ asyncUnit.lineInfo = LineInfo([0]);
asyncLibrary.definingCompilationUnit = asyncUnit;
asyncUnit.classes = <ClassElement>[
@@ -890,6 +892,7 @@
var coreSource = analysisContext.sourceFactory.forUri('dart:core')!;
coreUnit.librarySource = coreUnit.source = coreSource;
+ coreUnit.lineInfo = LineInfo([0]);
coreUnit.classes = <ClassElement>[
boolElement,
diff --git a/pkg/analyzer/test/generated/elements_types_mixin.dart b/pkg/analyzer/test/generated/elements_types_mixin.dart
index 8c01ffe..3f5b739 100644
--- a/pkg/analyzer/test/generated/elements_types_mixin.dart
+++ b/pkg/analyzer/test/generated/elements_types_mixin.dart
@@ -384,6 +384,7 @@
var definingUnit = CompilationUnitElementImpl();
definingUnit.source = source;
definingUnit.librarySource = source;
+ definingUnit.lineInfo = LineInfo([0]);
definingUnit.enclosingElement = library;
library.definingCompilationUnit = definingUnit;
diff --git a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
index 575cd5b..32445d5 100644
--- a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
+++ b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
@@ -6,7 +6,6 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/diagnostic/diagnostic.dart' as analyzer;
import 'package:analyzer/error/error.dart' as analyzer;
-import 'package:analyzer/exception/exception.dart' as analyzer;
import 'package:analyzer/source/error_processor.dart' as analyzer;
import 'package:analyzer/src/generated/engine.dart' as analyzer;
import 'package:analyzer/src/generated/source.dart' as analyzer;
@@ -386,27 +385,18 @@
plugin.Location? _locationForArgs(
analyzer.CompilationUnitElement? unitElement,
analyzer.SourceRange range) {
- var startLine = 0;
- var startColumn = 0;
- var endLine = 0;
- var endColumn = 0;
-
if (unitElement == null) {
return null;
}
- try {
- var lineInfo = unitElement.lineInfo;
- if (lineInfo != null) {
- var offsetLocation = lineInfo.getLocation(range.offset);
- startLine = offsetLocation.lineNumber;
- startColumn = offsetLocation.columnNumber;
- var endLocation = lineInfo.getLocation(range.offset + range.length);
- endLine = endLocation.lineNumber;
- endColumn = endLocation.columnNumber;
- }
- } on analyzer.AnalysisException {
- // Ignore exceptions
- }
+
+ var lineInfo = unitElement.lineInfo;
+ var offsetLocation = lineInfo.getLocation(range.offset);
+ var endLocation = lineInfo.getLocation(range.offset + range.length);
+ var startLine = offsetLocation.lineNumber;
+ var startColumn = offsetLocation.columnNumber;
+ var endLine = endLocation.lineNumber;
+ var endColumn = endLocation.columnNumber;
+
return plugin.Location(unitElement.source.fullName, range.offset,
range.length, startLine, startColumn,
endLine: endLine, endColumn: endColumn);
diff --git a/pkg/nnbd_migration/lib/instrumentation.dart b/pkg/nnbd_migration/lib/instrumentation.dart
index afb9bd9..4326006 100644
--- a/pkg/nnbd_migration/lib/instrumentation.dart
+++ b/pkg/nnbd_migration/lib/instrumentation.dart
@@ -48,7 +48,7 @@
var path = unitElement.source.fullName;
var offset = element.nameOffset;
- var location = unitElement.lineInfo!.getLocation(offset);
+ var location = unitElement.lineInfo.getLocation(offset);
return CodeReference(path, offset, location.lineNumber,
location.columnNumber, _computeElementFullName(element));
}