Work around path replacement issue.

This is not optimal, but it's no worse than it was before and fixes one
particular failure mode.
This commit is contained in:
Michael Bayne
2014-01-22 13:39:09 -08:00
parent 71e52d355e
commit a36b19bd70
@@ -413,8 +413,19 @@ public abstract class InvocationTask extends GenTask
protected static String replacePath (String source, String oldstr, String newstr)
{
return source.replace(oldstr.replace('/', File.separatorChar),
newstr.replace('/', File.separatorChar));
// replace only the last occurrance of 'oldstr' with 'newstr'; if we have a path like:
// /client/src/foo/bar/client/FooService.java we don't want to replace the first /client
// just the one that immediately precedes /FooService.java
// TODO: this is error prone because we could have a project that opted not to have
// client/data/server subdirs and instead just had a path like:
// /client/src/foo/bar/FooService.java which would be improperly mangled
String oldPath = oldstr.replace('/', File.separatorChar);
String newPath = newstr.replace('/', File.separatorChar);
int oldIdx = source.lastIndexOf(oldPath);
return (oldIdx == -1) ? source :
(source.substring(0, oldIdx) + newPath + source.substring(oldIdx+oldPath.length()));
}
/** {@link InvocationListener} resolved with the proper classloader so that we can compare it