@@ -2001,21 +2001,8 @@ abstract class SourceCodeMixin {
2001
2001
}
2002
2002
2003
2003
String get _crossdartUrl {
2004
- if (_lineNumber != null && _sourceFilePath != null ) {
2005
- String packageName = library.package.isSdk ? "sdk" : library.package.name;
2006
- String packageVersion = library.package.version;
2007
- var root = library.package.packageMeta.resolvedDir;
2008
- if (! library.package.isSdk) {
2009
- root += "/lib" ;
2010
- }
2011
- root = root.replaceAll ("\\ " , "/" );
2012
- var sourceFilePath = new File (_sourceFilePath)
2013
- .resolveSymbolicLinksSync ()
2014
- .replaceAll ("\\ " , "/" )
2015
- .replaceAll (root, "" )
2016
- .replaceAll (new RegExp (r"^/*" ), "" );
2017
- String url =
2018
- "//www.crossdart.info/p/$packageName /$packageVersion /$sourceFilePath .html" ;
2004
+ if (_lineNumber != null && _crossdartPath != null ) {
2005
+ String url = "//www.crossdart.info/p/${_crossdartPath }.html" ;
2019
2006
return "${url }#line-${_lineNumber }" ;
2020
2007
} else {
2021
2008
return null ;
@@ -2025,19 +2012,49 @@ abstract class SourceCodeMixin {
2025
2012
int get _lineNumber {
2026
2013
var node = element.computeNode ();
2027
2014
if (node is Declaration && (node as Declaration ).element != null ) {
2028
- return lineNumberCache.lineNumber (
2029
- (node as Declaration ).element.source.fullName, node.offset);
2015
+ var element = (node as Declaration ).element;
2016
+ var lineNumber = lineNumberCache.lineNumber (
2017
+ element.source.fullName, element.nameOffset);
2018
+ return lineNumber + 1 ;
2030
2019
} else {
2031
2020
return null ;
2032
2021
}
2033
2022
}
2034
2023
2035
- String get _sourceFilePath {
2024
+ String get _crossdartPath {
2036
2025
var node = element.computeNode ();
2037
2026
if (node is Declaration && (node as Declaration ).element != null ) {
2038
- return ((node as Declaration ).element.source as FileBasedSource )
2039
- .file
2040
- .toString ();
2027
+ var source = ((node as Declaration ).element.source as FileBasedSource );
2028
+ var file = source.file.toString ();
2029
+ var uri = source.uri.toString ();
2030
+ var packageMeta = library.package.packageMeta;
2031
+ if (uri.startsWith ("package:" )) {
2032
+ var splittedUri =
2033
+ uri.replaceAll (new RegExp (r"^package:" ), "" ).split ("/" );
2034
+ var packageName = splittedUri.first;
2035
+ var packageVersion;
2036
+ if (packageName == packageMeta.name) {
2037
+ packageVersion = packageMeta.version;
2038
+ } else {
2039
+ var match = new RegExp (
2040
+ ".pub-cache/(hosted/pub.dartlang.org|git)/${packageName }-([^/]+)" )
2041
+ .firstMatch (file);
2042
+ if (match != null ) {
2043
+ packageVersion = match[2 ];
2044
+ }
2045
+ }
2046
+ if (packageVersion != null ) {
2047
+ return "${packageName }/${packageVersion }/${splittedUri .skip (1 ).join ("/" )}" ;
2048
+ } else {
2049
+ return null ;
2050
+ }
2051
+ } else if (uri.startsWith ("dart:" )) {
2052
+ var packageName = "sdk" ;
2053
+ var packageVersion = config.sdkVersion;
2054
+ return "${packageName }/${packageVersion }/lib/${uri .replaceAll (new RegExp (r"^dart:" ), "" )}" ;
2055
+ } else {
2056
+ return null ;
2057
+ }
2041
2058
} else {
2042
2059
return null ;
2043
2060
}
0 commit comments