Index: dart/lib/compiler/implementation/scanner/scanner_task.dart |
diff --git a/dart/lib/compiler/implementation/scanner/scanner_task.dart b/dart/lib/compiler/implementation/scanner/scanner_task.dart |
index 67e98af7def120e094320a79cee09998a1bf8a2a..b91001b4a45efd9e48cadaf0fb0779d08cdfa213 100644 |
--- a/dart/lib/compiler/implementation/scanner/scanner_task.dart |
+++ b/dart/lib/compiler/implementation/scanner/scanner_task.dart |
@@ -6,6 +6,9 @@ class ScannerTask extends CompilerTask { |
ScannerTask(Compiler compiler) : super(compiler); |
String get name => 'Scanner'; |
+ final Map<String, LibraryElement> libraryNames = |
+ new Map<String, LibraryElement>(); |
+ |
void scanLibrary(LibraryElement library) { |
var compilationUnit = library.entryCompilationUnit; |
compiler.log("scanning library ${compilationUnit.script.name}"); |
@@ -55,6 +58,7 @@ class ScannerTask extends CompilerTask { |
} else { |
library.libraryTag = tag; |
} |
+ checkDuplicatedLibraryName(library); |
} else if (tag.isPart) { |
StringNode uri = tag.uri; |
Uri resolved = base.resolve(uri.dartString.slowToString()); |
@@ -82,6 +86,27 @@ class ScannerTask extends CompilerTask { |
} |
} |
+ void checkDuplicatedLibraryName(LibraryElement library) { |
+ LibraryTag tag = library.libraryTag; |
+ if (tag != null) { |
+ String name = library.getLibraryOrScriptName(); |
+ LibraryElement existing = |
+ libraryNames.putIfAbsent(name, () => library); |
+ if (existing !== library) { |
+ Uri uri = library.entryCompilationUnit.script.uri; |
+ compiler.reportMessage( |
+ compiler.spanFromNode(tag.name, uri), |
+ MessageKind.DUPLICATED_LIBRARY_NAME.error([name]), |
+ api_s.Diagnostic.WARNING); |
+ Uri existingUri = existing.entryCompilationUnit.script.uri; |
+ compiler.reportMessage( |
+ compiler.spanFromNode(existing.libraryTag.name, existingUri), |
+ MessageKind.DUPLICATED_LIBRARY_NAME.error([name]), |
+ api_s.Diagnostic.WARNING); |
+ } |
+ } |
+ } |
+ |
/** |
* Handle a part tag in the scope of [library]. The [path] given is used as |
* is, any resolution should be done beforehand. |