detect generated files properly) - doesn't quite work ATM. Add some extra warning and debugging info to Project. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269231 13f79535-47bb-0310-9956-ffa450edef68master
@@ -242,8 +242,10 @@ public class Project { | |||
public void setProperty(String name, String value) { | |||
// command line properties take precedence | |||
if (null != userProperties.get(name)) | |||
if (null != userProperties.get(name)) { | |||
log("Override ignored for user property " + name, MSG_VERBOSE); | |||
return; | |||
} | |||
log("Setting project property: " + name + " -> " + | |||
value, MSG_DEBUG); | |||
properties.put(name, value); | |||
@@ -1034,6 +1036,10 @@ public class Project { | |||
} | |||
public void addReference(String name, Object value) { | |||
if (null != references.get(name)) { | |||
log("Overriding previous definition of reference to " + name, | |||
MSG_WARN); | |||
} | |||
log("Adding reference: " + name + " -> " + value, MSG_DEBUG); | |||
references.put(name,value); | |||
} | |||
@@ -418,29 +418,23 @@ public class Rmic extends MatchingTask { | |||
String classname, | |||
RmicAdapter adapter) | |||
throws BuildException { | |||
String stubFileName = classname.replace('.', File.separatorChar) | |||
+ adapter.getStubClassSuffix()+".java"; | |||
File oldStubFile = new File(baseDir, stubFileName); | |||
File newStubFile = new File(sourceBaseFile, stubFileName); | |||
try { | |||
project.copyFile(oldStubFile, newStubFile, filtering); | |||
oldStubFile.delete(); | |||
} catch (IOException ioe) { | |||
String msg = "Failed to copy " + oldStubFile + " to " + | |||
newStubFile + " due to " + ioe.getMessage(); | |||
throw new BuildException(msg, ioe, location); | |||
} | |||
if (!"1.2".equals(stubVersion)) { | |||
String skelFileName = classname.replace('.', File.separatorChar) | |||
+ adapter.getSkelClassSuffix()+".java"; | |||
File oldSkelFile = new File(baseDir, skelFileName); | |||
File newSkelFile = new File(sourceBaseFile, skelFileName); | |||
String classFileName = | |||
classname.replace('.', File.separatorChar) + ".class"; | |||
String[] generatedFiles = | |||
adapter.getMapper().mapFileName(classFileName); | |||
for (int i=0; i<generatedFiles.length; i++) { | |||
String sourceFileName = | |||
classFileName.substring(0, classFileName.length()-6) + ".java"; | |||
File oldFile = new File(baseDir, sourceFileName); | |||
File newFile = new File(sourceBaseFile, sourceFileName); | |||
try { | |||
project.copyFile(oldSkelFile, newSkelFile, filtering); | |||
oldSkelFile.delete(); | |||
project.copyFile(oldFile, newFile, filtering); | |||
oldFile.delete(); | |||
} catch (IOException ioe) { | |||
String msg = "Failed to copy " + oldSkelFile + " to " + | |||
newSkelFile + " due to " + ioe.getMessage(); | |||
String msg = "Failed to copy " + oldFile + " to " + | |||
newFile + " due to " + ioe.getMessage(); | |||
throw new BuildException(msg, ioe, location); | |||
} | |||
} | |||
@@ -90,14 +90,18 @@ public abstract class DefaultRmicAdapter implements RmicAdapter { | |||
return attributes; | |||
} | |||
public String getStubClassSuffix() { | |||
protected String getStubClassSuffix() { | |||
return "_Stub"; | |||
} | |||
public String getSkelClassSuffix() { | |||
protected String getSkelClassSuffix() { | |||
return "_Skel"; | |||
} | |||
protected String getTieClassSuffix() { | |||
return "_Tie"; | |||
} | |||
/** | |||
* This implementation maps *.class to *getStubClassSuffix().class and - if | |||
* stubversion is not 1.2 - to *getSkelClassSuffix().class. | |||
@@ -321,21 +325,7 @@ public abstract class DefaultRmicAdapter implements RmicAdapter { | |||
*/ | |||
private class RmicFileNameMapper implements FileNameMapper { | |||
private GlobPatternMapper stubMapper; | |||
private GlobPatternMapper skelMapper; | |||
RmicFileNameMapper() { | |||
stubMapper = new GlobPatternMapper(); | |||
stubMapper.setFrom("*.class"); | |||
stubMapper.setTo("*"+getStubClassSuffix()+".class"); | |||
// no _Skel file in stub version 1.2 | |||
if (!"1.2".equals(attributes.getStubVersion())) { | |||
skelMapper = new GlobPatternMapper(); | |||
skelMapper.setFrom("*.class"); | |||
skelMapper.setTo("*"+getSkelClassSuffix()+".class"); | |||
} | |||
} | |||
RmicFileNameMapper() {} | |||
/** | |||
* Empty implementation. | |||
@@ -347,28 +337,55 @@ public abstract class DefaultRmicAdapter implements RmicAdapter { | |||
public void setTo(String s) {} | |||
public String[] mapFileName(String name) { | |||
String[] stubName = stubMapper.mapFileName(name); | |||
if (stubName == null | |||
if (name == null | |||
|| !name.endsWith(".class") | |||
|| name.endsWith(getStubClassSuffix()+".class") | |||
|| name.endsWith(getSkelClassSuffix()+".class")) { | |||
// Not a .class file | |||
|| name.endsWith(getSkelClassSuffix()+".class") | |||
|| name.endsWith(getTieClassSuffix()+".class")) { | |||
// Not a .class file or the one we'd generate | |||
return null; | |||
} | |||
String classname = name.replace(File.separatorChar, '.'); | |||
classname = classname.substring(0, classname.indexOf(".class")); | |||
String base = name.substring(0, name.indexOf(".class")); | |||
String classname = base.replace(File.separatorChar, '.'); | |||
if (attributes.getVerify() && | |||
!attributes.isValidRmiRemote(classname)) { | |||
return null; | |||
} | |||
if (skelMapper != null) { | |||
if (!attributes.getIiop()) { | |||
if ("1.2".equals(attributes.getStubVersion())) { | |||
return new String[] { | |||
base + getStubClassSuffix() + ".class" | |||
}; | |||
} else { | |||
return new String[] { | |||
base + getStubClassSuffix() + ".class", | |||
base + getSkelClassSuffix() + ".class", | |||
}; | |||
} | |||
} else { | |||
int lastSlash = base.lastIndexOf("/"); | |||
String dirname = ""; | |||
/* | |||
* I know, this is not necessary, but I prefer it explicit (SB) | |||
*/ | |||
int index = -1; | |||
if (lastSlash == -1) { | |||
// no package | |||
index = 0; | |||
} else { | |||
index = lastSlash + 1; | |||
dirname = base.substring(0, index); | |||
} | |||
String filename = base.substring(index); | |||
return new String[] { | |||
stubName[0], | |||
skelMapper.mapFileName(name)[0] | |||
dirname + "_" + filename + getStubClassSuffix() + ".class", | |||
dirname + "_" + filename + getTieClassSuffix() + ".class" | |||
}; | |||
} else { | |||
return stubName; | |||
} | |||
} | |||
} | |||
@@ -93,18 +93,6 @@ public interface RmicAdapter { | |||
*/ | |||
public FileNameMapper getMapper(); | |||
/** | |||
* Difference between original class file name and the generated | |||
* stub class. | |||
*/ | |||
public String getStubClassSuffix(); | |||
/** | |||
* Difference between original class file name and the generated | |||
* skel class. | |||
*/ | |||
public String getSkelClassSuffix(); | |||
/** | |||
* The CLASSPATH this rmic process will use. | |||
*/ | |||
@@ -136,7 +136,7 @@ | |||
<blockquote> | |||
<ul> | |||
<li><a href="#always-recompiles"> | |||
Why does Ant always recompile all my Java files | |||
Why does Ant always recompile all my Java files? | |||
</a></li> | |||
</ul> | |||
</blockquote> | |||
@@ -387,7 +387,7 @@ | |||
<tr><td bgcolor="#828DA6"> | |||
<font color="#ffffff" face="arial,helvetica,sanserif"> | |||
<strong> | |||
Why does Ant always recompile all my Java files | |||
Why does Ant always recompile all my Java files? | |||
</strong> | |||
</font> | |||
</td></tr> | |||
@@ -114,7 +114,7 @@ | |||
<faqsection title="Using Ant"> | |||
<faq id="always-recompiles"> | |||
<question>Why does Ant always recompile all my Java files</question> | |||
<question>Why does Ant always recompile all my Java files?</question> | |||
<answer> | |||
<p>In order to find out which files should be compiled, Ant | |||