fix crossdart linking and add test (#1255)

diff --git a/lib/src/model.dart b/lib/src/model.dart
index a6e2d27..1a780cf 100644
--- a/lib/src/model.dart
+++ b/lib/src/model.dart
@@ -14,7 +14,6 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/generated/resolver.dart'
     show Namespace, NamespaceBuilder, InheritanceManager, MemberMap;
-import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart' show ParameterKind;
 import 'package:collection/collection.dart';
 import 'package:path/path.dart' as p;
@@ -773,14 +772,14 @@
   }
 
   @override
-  String get oneLineDoc => documentationAsHtml;
-
-  @override
   String get href =>
       '${library.dirName}/${(enclosingElement as Class).fileName}';
 
   @override
   String get linkedName => name;
+
+  @override
+  String get oneLineDoc => documentationAsHtml;
 }
 
 class Field extends ModelElement
@@ -2081,8 +2080,8 @@
   String get _crossdartPath {
     var node = element.computeNode();
     if (node is Declaration && node.element != null) {
-      var source = (node.element.source as FileBasedSource);
-      var file = source.file.toString();
+      var source = node.element.source;
+      var filePath = source.fullName;
       var uri = source.uri.toString();
       var packageMeta = library.package.packageMeta;
       if (uri.startsWith("package:")) {
@@ -2095,7 +2094,7 @@
         } else {
           var match = new RegExp(
                   ".pub-cache/(hosted/pub.dartlang.org|git)/${packageName}-([^/]+)")
-              .firstMatch(file);
+              .firstMatch(filePath);
           if (match != null) {
             packageVersion = match[2];
           }
diff --git a/test/compare_output_test.dart b/test/compare_output_test.dart
index 46439fb..90eed83 100644
--- a/test/compare_output_test.dart
+++ b/test/compare_output_test.dart
@@ -144,6 +144,26 @@
         fail('Did not process @example in comments');
       }
     });
+
+    test('Check dartdoc generation with crossdart', () {
+      var args = <String>[
+        dartdocBin,
+        '--add-crossdart',
+        '--output',
+        tempDir.path
+      ];
+
+      var result = Process.runSync(Platform.resolvedExecutable, args,
+          workingDirectory: _testPackagePath);
+
+      if (result.exitCode != 0) {
+        print(result.exitCode);
+        print(result.stdout);
+        print(result.stderr);
+        fail('dartdoc failed');
+      }
+
+    });
   }, onPlatform: {'windows': new Skip('Avoiding parsing git output')});
 }
 
diff --git a/tool/doc_packages.dart b/tool/doc_packages.dart
index b312ab1..0bc9254 100644
--- a/tool/doc_packages.dart
+++ b/tool/doc_packages.dart
@@ -129,7 +129,7 @@
 }
 
 Future<List<PackageInfo>> _getPackageInfos(List<String> packageUrls) {
-  List<Future> futures = packageUrls.map((String p) {
+  var futures = packageUrls.map((String p) {
     return http.get(p).then((response) {
       var json = JSON.decode(response.body);
       String name = json['name'];