@@ -2001,21 +2001,8 @@ abstract class SourceCodeMixin {
20012001 }
20022002
20032003 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" ;
20192006 return "${url }#line-${_lineNumber }" ;
20202007 } else {
20212008 return null ;
@@ -2025,19 +2012,49 @@ abstract class SourceCodeMixin {
20252012 int get _lineNumber {
20262013 var node = element.computeNode ();
20272014 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 ;
20302019 } else {
20312020 return null ;
20322021 }
20332022 }
20342023
2035- String get _sourceFilePath {
2024+ String get _crossdartPath {
20362025 var node = element.computeNode ();
20372026 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+ }
20412058 } else {
20422059 return null ;
20432060 }
0 commit comments