Browse Source

Initialize classes which are loaded through a classloader. Note that the

approach here uses newInstance to achieve initialisation for JDK 1.1
compatability. Under JDK 1.2, both initialization and the classloader to
use can be specified to Class.forName();


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269021 13f79535-47bb-0310-9956-ffa450edef68
master
Conor MacNeill 24 years ago
parent
commit
a6c6685f62
7 changed files with 23 additions and 5 deletions
  1. +16
    -1
      src/main/org/apache/tools/ant/AntClassLoader.java
  2. +1
    -1
      src/main/org/apache/tools/ant/Main.java
  3. +1
    -0
      src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java
  4. +1
    -0
      src/main/org/apache/tools/ant/taskdefs/Taskdef.java
  5. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java
  6. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
  7. +1
    -0
      src/main/org/apache/tools/ant/types/Mapper.java

+ 16
- 1
src/main/org/apache/tools/ant/AntClassLoader.java View File

@@ -159,7 +159,22 @@ public class AntClassLoader extends ClassLoader {
public void setIsolated(boolean isolated) { public void setIsolated(boolean isolated) {
ignoreBase = isolated; ignoreBase = isolated;
} }

/**
* Force initialization of a class in a JDK 1.1 compatible, albeit hacky
* way
*/
static public void initializeClass(Class theClass) {
// ***HACK*** We try to create an instance to force the VM to run the
// class' static initializer. We don't care if the instance can't
// be created - we are just interested in the side effect.
try {
theClass.newInstance();
}
catch (Exception e) {
//ignore - our work is done
}
}
/** /**
* Add a package root to the list of packages which must be loaded on the * Add a package root to the list of packages which must be loaded on the


+ 1
- 1
src/main/org/apache/tools/ant/Main.java View File

@@ -382,8 +382,8 @@ public class Main {


try { try {
addBuildListeners(project); addBuildListeners(project);
project.fireBuildStarted();


project.fireBuildStarted();
project.init(); project.init();


// set user-define properties // set user-define properties


+ 1
- 0
src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java View File

@@ -122,6 +122,7 @@ public class ExecuteJava {
AntClassLoader loader = new AntClassLoader(project, classpath, false); AntClassLoader loader = new AntClassLoader(project, classpath, false);
loader.setIsolated(true); loader.setIsolated(true);
target = loader.forceLoadClass(classname); target = loader.forceLoadClass(classname);
AntClassLoader.initializeClass(target);
} }
final Method main = target.getMethod("main", param); final Method main = target.getMethod("main", param);
main.invoke(null, argument); main.invoke(null, argument);


+ 1
- 0
src/main/org/apache/tools/ant/taskdefs/Taskdef.java View File

@@ -109,6 +109,7 @@ public class Taskdef extends Task {
Class taskClass = null; Class taskClass = null;
if (loader != null) { if (loader != null) {
taskClass = loader.loadClass(value); taskClass = loader.loadClass(value);
AntClassLoader.initializeClass(taskClass);
} else { } else {
taskClass = Class.forName(value); taskClass = Class.forName(value);
} }


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java View File

@@ -265,7 +265,7 @@ public class XMLValidateTask extends Task {
AntClassLoader loader = new AntClassLoader(project, classpath, false); AntClassLoader loader = new AntClassLoader(project, classpath, false);
loader.addSystemPackageRoot("org.xml"); // needed to avoid conflict loader.addSystemPackageRoot("org.xml"); // needed to avoid conflict
readerClass = loader.loadClass(readerClassName); readerClass = loader.loadClass(readerClassName);
//readerImpl = loader.loadClass(
AntClassLoader.initializeClass(readerClass);
} else } else
readerClass = Class.forName(readerClassName); readerClass = Class.forName(readerClassName);


+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java View File

@@ -54,8 +54,7 @@


package org.apache.tools.ant.taskdefs.optional.junit; package org.apache.tools.ant.taskdefs.optional.junit;


import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.*;


import junit.framework.*; import junit.framework.*;
import java.lang.reflect.*; import java.lang.reflect.*;
@@ -159,6 +158,7 @@ public class JUnitTestRunner implements TestListener {
testClass = Class.forName(test.getName()); testClass = Class.forName(test.getName());
} else { } else {
testClass = loader.loadClass(test.getName()); testClass = loader.loadClass(test.getName());
AntClassLoader.initializeClass(testClass);
} }
Method suiteMethod = null; Method suiteMethod = null;


+ 1
- 0
src/main/org/apache/tools/ant/types/Mapper.java View File

@@ -203,6 +203,7 @@ public class Mapper extends DataType {
} else { } else {
AntClassLoader al = new AntClassLoader(p, classpath); AntClassLoader al = new AntClassLoader(p, classpath);
c = al.loadClass(classname); c = al.loadClass(classname);
AntClassLoader.initializeClass(c);
} }
FileNameMapper m = (FileNameMapper) c.newInstance(); FileNameMapper m = (FileNameMapper) c.newInstance();


Loading…
Cancel
Save