Disallow null in spanFromSpannable.

Closes #27938

R=sigmund@google.com

Review URL: https://codereview.chromium.org/2537303004 .
This commit is contained in:
Johnni Winther 2016-12-01 10:53:56 +01:00
parent cffc20cdf5
commit 489199eff1
6 changed files with 19 additions and 22 deletions

View file

@ -1792,8 +1792,6 @@ class CompilerDiagnosticReporter extends DiagnosticReporter {
} }
SourceSpan spanFromSpannable(Spannable node) { SourceSpan spanFromSpannable(Spannable node) {
// TODO(johnniwinther): Disallow `node == null` ?
if (node == null) return null;
if (node == CURRENT_ELEMENT_SPANNABLE) { if (node == CURRENT_ELEMENT_SPANNABLE) {
node = currentElement; node = currentElement;
} else if (node == NO_LOCATION_SPANNABLE) { } else if (node == NO_LOCATION_SPANNABLE) {

View file

@ -427,7 +427,8 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
// TODO(johnniwinther): Ensure that currentHandler correctly encloses the // TODO(johnniwinther): Ensure that currentHandler correctly encloses the
// loading of a library cluster. // loading of a library cluster.
currentHandler = new LibraryDependencyHandler(this); currentHandler = new LibraryDependencyHandler(this);
return createLibrary(currentHandler, null, resolvedUri, return createLibrary(
currentHandler, null, resolvedUri, NO_LOCATION_SPANNABLE,
skipFileWithPartOfTag: skipFileWithPartOfTag) skipFileWithPartOfTag: skipFileWithPartOfTag)
.then((LibraryElement library) { .then((LibraryElement library) {
if (library == null) { if (library == null) {
@ -543,7 +544,7 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
// Import dart:core if not already imported. // Import dart:core if not already imported.
if (!importsDartCore && library.canonicalUri != Uris.dart_core) { if (!importsDartCore && library.canonicalUri != Uris.dart_core) {
return createLibrary(handler, null, Uris.dart_core) return createLibrary(handler, null, Uris.dart_core, library)
.then((LibraryElement coreLibrary) { .then((LibraryElement coreLibrary) {
handler.registerDependency( handler.registerDependency(
library, library,
@ -629,7 +630,7 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
LibraryElement library, LibraryDependencyElementX libraryDependency) { LibraryElement library, LibraryDependencyElementX libraryDependency) {
Uri base = library.canonicalUri; Uri base = library.canonicalUri;
Uri resolvedUri = base.resolveUri(libraryDependency.uri); Uri resolvedUri = base.resolveUri(libraryDependency.uri);
return createLibrary(handler, library, resolvedUri, node: libraryDependency) return createLibrary(handler, library, resolvedUri, libraryDependency)
.then((LibraryElement loadedLibrary) { .then((LibraryElement loadedLibrary) {
if (loadedLibrary == null) return; if (loadedLibrary == null) return;
reporter.withCurrentElement(library, () { reporter.withCurrentElement(library, () {
@ -650,15 +651,15 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
return listener.onLibraryScanned(library, handler).then((_) { return listener.onLibraryScanned(library, handler).then((_) {
return Future.forEach(library.imports, (ImportElement import) { return Future.forEach(library.imports, (ImportElement import) {
Uri resolvedUri = library.canonicalUri.resolveUri(import.uri); Uri resolvedUri = library.canonicalUri.resolveUri(import.uri);
return createLibrary(handler, library, resolvedUri); return createLibrary(handler, library, resolvedUri, library);
}).then((_) { }).then((_) {
return Future.forEach(library.exports, (ExportElement export) { return Future.forEach(library.exports, (ExportElement export) {
Uri resolvedUri = library.canonicalUri.resolveUri(export.uri); Uri resolvedUri = library.canonicalUri.resolveUri(export.uri);
return createLibrary(handler, library, resolvedUri); return createLibrary(handler, library, resolvedUri, library);
}).then((_) { }).then((_) {
// TODO(johnniwinther): Shouldn't there be an [ImportElement] for the // TODO(johnniwinther): Shouldn't there be an [ImportElement] for the
// implicit import of dart:core? // implicit import of dart:core?
return createLibrary(handler, library, Uris.dart_core); return createLibrary(handler, library, Uris.dart_core, library);
}).then((_) => library); }).then((_) => library);
}); });
}); });
@ -680,10 +681,10 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
* If a new library is created, the [handler] is notified. * If a new library is created, the [handler] is notified.
*/ */
Future<LibraryElement> createLibrary(LibraryDependencyHandler handler, Future<LibraryElement> createLibrary(LibraryDependencyHandler handler,
LibraryElement importingLibrary, Uri resolvedUri, LibraryElement importingLibrary, Uri resolvedUri, Spannable spannable,
{Spannable node, bool skipFileWithPartOfTag: false}) { {bool skipFileWithPartOfTag: false}) {
Uri readableUri = Uri readableUri =
uriTranslator.translate(importingLibrary, resolvedUri, node); uriTranslator.translate(importingLibrary, resolvedUri, spannable);
LibraryElement library = libraryCanonicalUriMap[resolvedUri]; LibraryElement library = libraryCanonicalUriMap[resolvedUri];
if (library != null) { if (library != null) {
return new Future.value(library); return new Future.value(library);
@ -693,7 +694,7 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
return loadDeserializedLibrary(handler, library); return loadDeserializedLibrary(handler, library);
} }
return reporter.withCurrentElement(importingLibrary, () { return reporter.withCurrentElement(importingLibrary, () {
return _readScript(node, readableUri, resolvedUri) return _readScript(spannable, readableUri, resolvedUri)
.then((Script script) { .then((Script script) {
if (script == null) return null; if (script == null) return null;
LibraryElement element = LibraryElement element =
@ -721,7 +722,7 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
DiagnosticMessage info = reporter.withCurrentElement( DiagnosticMessage info = reporter.withCurrentElement(
importingLibrary, importingLibrary,
() => reporter.createMessage( () => reporter.createMessage(
node, MessageKind.IMPORT_PART_OF_HERE)); spannable, MessageKind.IMPORT_PART_OF_HERE));
reporter.reportError(error, [info]); reporter.reportError(error, [info]);
} }
} }

View file

@ -482,12 +482,12 @@ class ClassResolverVisitor extends TypeDefinitionVisitor {
if (interfaceType != null) { if (interfaceType != null) {
if (interfaceType.isMalformed) { if (interfaceType.isMalformed) {
reporter.reportErrorMessage( reporter.reportErrorMessage(
superclass, link.head,
MessageKind.CANNOT_IMPLEMENT_MALFORMED, MessageKind.CANNOT_IMPLEMENT_MALFORMED,
{'className': element.name, 'malformedType': interfaceType}); {'className': element.name, 'malformedType': interfaceType});
} else if (interfaceType.isEnumType) { } else if (interfaceType.isEnumType) {
reporter.reportErrorMessage( reporter.reportErrorMessage(
superclass, link.head,
MessageKind.CANNOT_IMPLEMENT_ENUM, MessageKind.CANNOT_IMPLEMENT_ENUM,
{'className': element.name, 'enumType': interfaceType}); {'className': element.name, 'enumType': interfaceType});
} else if (!interfaceType.isInterfaceType) { } else if (!interfaceType.isInterfaceType) {

View file

@ -345,7 +345,7 @@ class InitializerResolver {
if (!field.isMalformed) { if (!field.isMalformed) {
registry.registerStaticUse(new StaticUse.fieldInit(field)); registry.registerStaticUse(new StaticUse.fieldInit(field));
} }
checkForDuplicateInitializers(field, element.initializer); checkForDuplicateInitializers(field, parameterNode);
visitor.defineLocalVariable(parameterNode, initializingFormal); visitor.defineLocalVariable(parameterNode, initializingFormal);
visitor.addToScope(initializingFormal); visitor.addToScope(initializingFormal);
if (isConst) { if (isConst) {

View file

@ -35,8 +35,7 @@ abstract class ResolvedUriTranslator {
/// responsible for reporting errors. /// responsible for reporting errors.
/// ///
/// See [LibraryLoader] for terminology on URIs. /// See [LibraryLoader] for terminology on URIs.
Uri translate(LibraryElement importingLibrary, Uri uri, Uri translate(LibraryElement importingLibrary, Uri uri, Spannable spannable);
[Spannable spannable]);
} }
/// A translator that forwards all methods to an internal /// A translator that forwards all methods to an internal
@ -59,7 +58,7 @@ class ForwardingResolvedUriTranslator implements ResolvedUriTranslator {
@override @override
Uri translate(LibraryElement importingLibrary, Uri resolvedUri, Uri translate(LibraryElement importingLibrary, Uri resolvedUri,
[Spannable spannable]) => Spannable spannable) =>
resolvedUriTranslator.translate(importingLibrary, resolvedUri, spannable); resolvedUriTranslator.translate(importingLibrary, resolvedUri, spannable);
@override @override
@ -86,8 +85,7 @@ class _ResolvedUriTranslator implements ResolvedUriTranslator {
Map<String, Uri> get sdkLibraries => _sdkLibraries; Map<String, Uri> get sdkLibraries => _sdkLibraries;
@override @override
Uri translate(LibraryElement importingLibrary, Uri uri, Uri translate(LibraryElement importingLibrary, Uri uri, Spannable spannable) {
[Spannable spannable]) {
if (uri.scheme == 'dart') { if (uri.scheme == 'dart') {
return translateDartUri(importingLibrary, uri, spannable); return translateDartUri(importingLibrary, uri, spannable);
} }

View file

@ -290,7 +290,7 @@ class MockResolvedUriTranslator implements ResolvedUriTranslator {
static final _emptySet = new Set(); static final _emptySet = new Set();
Uri translate(LibraryElement importingLibrary, Uri resolvedUri, Uri translate(LibraryElement importingLibrary, Uri resolvedUri,
[Spannable spannable]) => Spannable spannable) =>
resolvedUri; resolvedUri;
Set<Uri> get disallowedLibraryUris => _emptySet; Set<Uri> get disallowedLibraryUris => _emptySet;
bool get mockableLibraryUsed => false; bool get mockableLibraryUsed => false;