Analyzer: override element type in ExportDirective and ImportDirective

This reduces the number of explicit casts needed for null safety.

Change-Id: I8ad0ab9cddbbe81e5fbf66b95ae4ae1cb57efebc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/172743
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
This commit is contained in:
Sam Rawlins 2020-11-20 15:22:46 +00:00 committed by commit-bot@chromium.org
parent d89bc9fd9b
commit 19a96e4d5e
7 changed files with 16 additions and 10 deletions

View file

@ -341,7 +341,7 @@ class ImportElementsComputer {
/// [importedElements]. They will match if they import the same library using
/// the same prefix.
bool _matches(ImportDirective import, ImportedElements importedElements) {
var library = (import.element as ImportElement).importedLibrary;
var library = import.element.importedLibrary;
return library != null &&
library.source.fullName == importedElements.path &&
(import.prefix?.name ?? '') == importedElements.prefix;

View file

@ -30,7 +30,7 @@ class ImportAddShow extends CorrectionProducer {
return;
}
// prepare whole import namespace
ImportElement importElement = importDirective.element;
var importElement = importDirective.element;
if (importElement == null) {
return;
}

View file

@ -1978,7 +1978,10 @@ abstract class EnumDeclaration implements NamedCompilationUnitMember {
/// [Annotation] 'export' [StringLiteral] [Combinator]* ';'
///
/// Clients may not extend, implement or mix-in this class.
abstract class ExportDirective implements NamespaceDirective {}
abstract class ExportDirective implements NamespaceDirective {
@override
ExportElement get element;
}
/// A node that represents an expression.
///
@ -3223,6 +3226,9 @@ abstract class ImportDirective implements NamespaceDirective {
/// Set the token representing the 'deferred' keyword to the given [token].
set deferredKeyword(Token token);
@override
ImportElement get element;
/// Return the prefix to be used with the imported names, or `null` if the
/// imported names are not prefixed.
SimpleIdentifier get prefix;

View file

@ -928,7 +928,7 @@ class BestPracticesVerifier extends RecursiveAstVisitor<void> {
return;
}
var importElement = node.element as ImportElement;
var importElement = node.element;
var importedLibrary = importElement.importedLibrary;
if (importedLibrary == null || importedLibrary.isNonNullableByDefault) {
return;

View file

@ -569,7 +569,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
@override
void visitExportDirective(ExportDirective node) {
var exportElement = node.element as ExportElement;
var exportElement = node.element;
if (exportElement != null) {
LibraryElement exportedLibrary = exportElement.exportedLibrary;
_checkForAmbiguousExport(node, exportElement, exportedLibrary);
@ -824,7 +824,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
@override
void visitImportDirective(ImportDirective node) {
var importElement = node.element as ImportElement;
var importElement = node.element;
if (node.prefix != null) {
_checkForBuiltInIdentifierAsName(
node.prefix, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME);
@ -2410,7 +2410,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
return;
}
var element = node.element as ExportElement;
var element = node.element;
// TODO(scheglov) Expose from ExportElement.
var namespace =
NamespaceBuilder().createExportNamespaceForDirective(element);

View file

@ -3325,7 +3325,7 @@ var v = 0
ImportElement _getImportElement(CompilationUnit unit, int directiveIndex) {
var import = unit.directives[directiveIndex] as ImportDirective;
return import.element as ImportElement;
return import.element;
}
Source _getImportSource(CompilationUnit unit, int directiveIndex) {

View file

@ -277,7 +277,7 @@ class _DartNavigationComputerVisitor extends RecursiveAstVisitor<void> {
@override
void visitExportDirective(ExportDirective node) {
var exportElement = node.element as ExportElement;
var exportElement = node.element;
if (exportElement != null) {
Element libraryElement = exportElement.exportedLibrary;
_addUriDirectiveRegion(node, libraryElement);
@ -287,7 +287,7 @@ class _DartNavigationComputerVisitor extends RecursiveAstVisitor<void> {
@override
void visitImportDirective(ImportDirective node) {
var importElement = node.element as ImportElement;
var importElement = node.element;
if (importElement != null) {
Element libraryElement = importElement.importedLibrary;
_addUriDirectiveRegion(node, libraryElement);