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>
<td valign="top" align="center">No</td>
</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>

<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.Project;
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.Reference;
import org.apache.tools.ant.util.depend.DependencyAnalyzer;
@@ -95,6 +97,11 @@ public class Depend extends MatchingTask {
*/
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
* dumped to the log
@@ -154,6 +161,16 @@ public class Depend extends MatchingTask {
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
*
@@ -326,10 +343,8 @@ public class Depend extends MatchingTask {
while (depEnum.hasMoreElements()) {
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
@@ -454,14 +469,7 @@ public class Depend extends MatchingTask {
}

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;
}

@@ -503,6 +511,54 @@ public class Depend extends MatchingTask {
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
*/
@@ -548,7 +604,7 @@ public class Depend extends MatchingTask {
private void determineOutOfDateClasses() {
outOfDateClasses = new Hashtable();
for (int i = 0; i < srcPathList.length; i++) {
File srcDir = (File) getProject().resolveFile(srcPathList[i]);
File srcDir = getProject().resolveFile(srcPathList[i]);
if (srcDir.exists()) {
DirectoryScanner ds = this.getDirectoryScanner(srcDir);
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.Path;
import org.apache.tools.ant.util.FileNameMapper;
import org.apache.tools.ant.util.JavaEnvUtils;

/**
* This is the default implementation for the RmicAdapter interface.
@@ -39,6 +38,9 @@ public abstract class DefaultRmicAdapter implements RmicAdapter {
private Rmic attributes;
private FileNameMapper mapper;
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() {
}
@@ -53,15 +55,15 @@ public abstract class DefaultRmicAdapter implements RmicAdapter {
}

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

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

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

//set up the args
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 "
+ "CLASSPATH.";
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 {
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
*/
public String getStubClassSuffix() {
return "_WLStub";
return RMI_STUB_SUFFIX;
}

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

Loading…
Cancel
Save