Browse Source

Fed up with complaints about rmic generated code not having its source files found. Now you can turn it off.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@276935 13f79535-47bb-0310-9956-ffa450edef68
master
Steve Loughran 20 years ago
parent
commit
c0bda1b4cc
5 changed files with 87 additions and 21 deletions
  1. +6
    -0
      docs/manual/OptionalTasks/depend.html
  2. +69
    -13
      src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java
  3. +6
    -4
      src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
  4. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java
  5. +4
    -2
      src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java

+ 6
- 0
docs/manual/OptionalTasks/depend.html View File

@@ -147,6 +147,12 @@ classes. Defaults to false</td>
check dependencies</td> check dependencies</td>
<td valign="top" align="center">No</td> <td valign="top" align="center">No</td>
</tr> </tr>
<tr>
<td valign="top">warnOnRmiStubs</td>
<td valign="top">Flag to disable warnings about files that look like rmic generated stub/skeleton
classes, and which have no .java source. Useful when doing rmi development. </td>
<td valign="top" align="center">No, default=true</td>
</tr>
</table> </table>


<h3>Parameters specified as nested elements</h3> <h3>Parameters specified as nested elements</h3>


+ 69
- 13
src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java View File

@@ -31,6 +31,8 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.MatchingTask; import org.apache.tools.ant.taskdefs.MatchingTask;
import org.apache.tools.ant.taskdefs.rmic.DefaultRmicAdapter;
import org.apache.tools.ant.taskdefs.rmic.WLRmic;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference; import org.apache.tools.ant.types.Reference;
import org.apache.tools.ant.util.depend.DependencyAnalyzer; import org.apache.tools.ant.util.depend.DependencyAnalyzer;
@@ -95,6 +97,11 @@ public class Depend extends MatchingTask {
*/ */
private boolean closure = false; private boolean closure = false;


/**
* flag to enable warning if we encounter RMI stubs
*/
private boolean warnOnRmiStubs=true;

/** /**
* Flag which controls whether the reversed dependencies should be * Flag which controls whether the reversed dependencies should be
* dumped to the log * dumped to the log
@@ -154,6 +161,16 @@ public class Depend extends MatchingTask {
createClasspath().setRefid(r); createClasspath().setRefid(r);
} }


/**
* flag to set to true if you want dependency issues with RMI
* stubs to appear at warning level.
* @param warnOnRmiStubs
* @since Ant1.7
*/
public void setWarnOnRmiStubs(boolean warnOnRmiStubs) {
this.warnOnRmiStubs = warnOnRmiStubs;
}

/** /**
* Read the dependencies from cache file * Read the dependencies from cache file
* *
@@ -326,10 +343,8 @@ public class Depend extends MatchingTask {
while (depEnum.hasMoreElements()) { while (depEnum.hasMoreElements()) {
dependencyList.addElement(depEnum.nextElement()); dependencyList.addElement(depEnum.nextElement());
} }
if (dependencyList != null) {
cacheDirty = true;
dependencyMap.put(info.className, dependencyList);
}
cacheDirty = true;
dependencyMap.put(info.className, dependencyList);
} }


// This class depends on each class in the dependency list. For each // This class depends on each class in the dependency list. For each
@@ -454,14 +469,7 @@ public class Depend extends MatchingTask {
} }


if (affectedClassInfo.sourceFile == null) { if (affectedClassInfo.sourceFile == null) {
if (!affectedClassInfo.isUserWarned) {
log("The class " + affectedClass + " in file "
+ affectedClassInfo.absoluteFile.getPath()
+ " is out of date due to " + className
+ " but has not been deleted because its source file"
+ " could not be determined", Project.MSG_WARN);
affectedClassInfo.isUserWarned = true;
}
warnOutOfDateButNotDeleted(affectedClassInfo, affectedClass, className);
continue; continue;
} }


@@ -503,6 +511,54 @@ public class Depend extends MatchingTask {
return count; return count;
} }


/**
* warn when a class is out of date, but not deleted as its source is unknown.
* MSG_WARN is the normal level, but we downgrade to MSG_VERBOSE for RMI files
* if {@link #warnOnRmiStubs is false}
* @param affectedClassInfo info about the affectd class
* @param affectedClass the name of the affected .class file
* @param className the file that is triggering the out of dateness
*/
private void warnOutOfDateButNotDeleted(
ClassFileInfo affectedClassInfo, String affectedClass,
String className) {
if (affectedClassInfo.isUserWarned) {
return;
}
int level = Project.MSG_WARN;
if(!warnOnRmiStubs) {
//downgrade warnings on RMI stublike classes, as they are generated
//by rmic, so there is no need to tell the user that their source is
//missing.
if(isRmiStub(affectedClass, className)) {
level=Project.MSG_VERBOSE;
}
}
log("The class " + affectedClass + " in file "
+ affectedClassInfo.absoluteFile.getPath()
+ " is out of date due to " + className
+ " but has not been deleted because its source file"
+ " could not be determined", level);
affectedClassInfo.isUserWarned = true;
}

/**
* test for being an RMI stub
* @param affectedClass
* @param className
* @return
*/
private boolean isRmiStub(String affectedClass, String className) {
return isStub(affectedClass,className, DefaultRmicAdapter.RMI_STUB_SUFFIX)
|| isStub(affectedClass, className, DefaultRmicAdapter.RMI_SKEL_SUFFIX)
|| isStub(affectedClass, className, WLRmic.RMI_STUB_SUFFIX)
|| isStub(affectedClass, className, WLRmic.RMI_SKEL_SUFFIX);
}

private boolean isStub(String affectedClass,String baseClass,String suffix) {
return (baseClass+suffix).equals(affectedClass);
}

/** /**
* Dump the dependency information loaded from the classes to the Ant log * Dump the dependency information loaded from the classes to the Ant log
*/ */
@@ -548,7 +604,7 @@ public class Depend extends MatchingTask {
private void determineOutOfDateClasses() { private void determineOutOfDateClasses() {
outOfDateClasses = new Hashtable(); outOfDateClasses = new Hashtable();
for (int i = 0; i < srcPathList.length; i++) { for (int i = 0; i < srcPathList.length; i++) {
File srcDir = (File) getProject().resolveFile(srcPathList[i]);
File srcDir = getProject().resolveFile(srcPathList[i]);
if (srcDir.exists()) { if (srcDir.exists()) {
DirectoryScanner ds = this.getDirectoryScanner(srcDir); DirectoryScanner ds = this.getDirectoryScanner(srcDir);
String[] files = ds.getIncludedFiles(); String[] files = ds.getIncludedFiles();


+ 6
- 4
src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java View File

@@ -25,7 +25,6 @@ import org.apache.tools.ant.taskdefs.Rmic;
import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.util.FileNameMapper; import org.apache.tools.ant.util.FileNameMapper;
import org.apache.tools.ant.util.JavaEnvUtils;


/** /**
* This is the default implementation for the RmicAdapter interface. * This is the default implementation for the RmicAdapter interface.
@@ -39,6 +38,9 @@ public abstract class DefaultRmicAdapter implements RmicAdapter {
private Rmic attributes; private Rmic attributes;
private FileNameMapper mapper; private FileNameMapper mapper;
private static final Random rand = new Random(); private static final Random rand = new Random();
public static final String RMI_STUB_SUFFIX = "_Stub";
public static final String RMI_SKEL_SUFFIX = "_Skel";
public static final String RMI_TIE_SUFFIX = "_Tie";


public DefaultRmicAdapter() { public DefaultRmicAdapter() {
} }
@@ -53,15 +55,15 @@ public abstract class DefaultRmicAdapter implements RmicAdapter {
} }


protected String getStubClassSuffix() { protected String getStubClassSuffix() {
return "_Stub";
return RMI_STUB_SUFFIX;
} }


protected String getSkelClassSuffix() { protected String getSkelClassSuffix() {
return "_Skel";
return RMI_SKEL_SUFFIX;
} }


protected String getTieClassSuffix() { protected String getTieClassSuffix() {
return "_Tie";
return RMI_TIE_SUFFIX;
} }


/** /**


+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java View File

@@ -23,8 +23,8 @@ package org.apache.tools.ant.taskdefs.rmic;


import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.util.JavaEnvUtils;
import org.apache.tools.ant.taskdefs.Rmic; import org.apache.tools.ant.taskdefs.Rmic;
import org.apache.tools.ant.taskdefs.Java;
import org.apache.tools.ant.taskdefs.Execute; import org.apache.tools.ant.taskdefs.Execute;
import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.taskdefs.LogStreamHandler;
import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Commandline;
@@ -56,7 +56,7 @@ public class ForkingSunRmic extends DefaultRmicAdapter {
Commandline cmd = setupRmicCommand(); Commandline cmd = setupRmicCommand();
Project project=owner.getProject(); Project project=owner.getProject();
//rely on RMIC being on the path //rely on RMIC being on the path
cmd.setExecutable(SunRmic.RMIC_EXECUTABLE);
cmd.setExecutable(JavaEnvUtils.getJdkExecutable(SunRmic.RMIC_EXECUTABLE));


//set up the args //set up the args
String[] args=cmd.getCommandline(); String[] args=cmd.getCommandline();


+ 4
- 2
src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java View File

@@ -40,6 +40,8 @@ public class WLRmic extends DefaultRmicAdapter {
+ "set the environment variable " + "set the environment variable "
+ "CLASSPATH."; + "CLASSPATH.";
public static final String ERROR_WLRMIC_FAILED = "Error starting WebLogic rmic: "; public static final String ERROR_WLRMIC_FAILED = "Error starting WebLogic rmic: ";
public static final String RMI_STUB_SUFFIX = "_WLStub";
public static final String RMI_SKEL_SUFFIX = "_WLSkel";


public boolean execute() throws BuildException { public boolean execute() throws BuildException {
getRmic().log("Using WebLogic rmic", Project.MSG_VERBOSE); getRmic().log("Using WebLogic rmic", Project.MSG_VERBOSE);
@@ -80,13 +82,13 @@ public class WLRmic extends DefaultRmicAdapter {
* Get the suffix for the rmic stub classes * Get the suffix for the rmic stub classes
*/ */
public String getStubClassSuffix() { public String getStubClassSuffix() {
return "_WLStub";
return RMI_STUB_SUFFIX;
} }


/** /**
* Get the suffix for the rmic skeleton classes * Get the suffix for the rmic skeleton classes
*/ */
public String getSkelClassSuffix() { public String getSkelClassSuffix() {
return "_WLSkel";
return RMI_SKEL_SUFFIX;
} }
} }

Loading…
Cancel
Save