stevel 2002/10/07 22:45:35
Modified: src/main/org/apache/tools/ant/util WeakishReference.java
Added: src/main/org/apache/tools/ant/util WeakishReference12.java
Log:
This is the reflection based fixup for weak refs on 1.2+
Revision Changes Path
1.2 +39 -28
jakarta-ant/src/main/org/apache/tools/ant/util/WeakishReference.java
Index: WeakishReference.java
===================================================================
RCS file:
/home/cvs/jakarta-ant/src/main/org/apache/tools/ant/util/WeakishReference.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- WeakishReference.java 10 Sep 2002 22:19:28 -0000 1.1
+++ WeakishReference.java 8 Oct 2002 05:45:35 -0000 1.2
@@ -54,7 +54,11 @@
package org.apache.tools.ant.util;
-import java.lang.ref.WeakReference;
+import org.apache.tools.ant.BuildException;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
/**
* this is a weak reference on java1.2 and up, a hard
@@ -63,6 +67,9 @@
*/
public abstract class WeakishReference {
+ private static Constructor referenceConstructor;
+
+ private final static String WEAK_REFERENCE_NAME=
"org,apache.tools.ant.util.WeakishReference12";
/**
* create the appropriate type of reference for the java version
@@ -70,13 +77,40 @@
* @return
*/
public static WeakishReference createReference(Object object) {
- if(JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
- return new HardReference(object);
- } else {
- return new SoftReference(object);
+ if(referenceConstructor==null) {
+ createReferenceConstructor();
+ }
+ try {
+ return (WeakishReference)referenceConstructor
+ .newInstance(new Object[]{object});
+ } catch (Exception e) {
+ throw new BuildException("while creating a weakish reference",e);
+ }
+ }
+
+ /**
+ * create the appropriate constructor method for the
+ */
+ private static void createReferenceConstructor() {
+ Class[] ctor=new Class[]{Object.class};
+ try {
+ referenceConstructor=HardReference.class.getConstructor(ctor);
+ } catch (NoSuchMethodException e) {
+ //deep trouble here
+ throw new BuildException("when creating a Hard Reference
constructor",e);
+ }
+ if (!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
+ //create a weak ref constructor. If this fails we have that hard
one anyway
+ try {
+ Class clazz=Class.forName(WEAK_REFERENCE_NAME);
+ referenceConstructor=clazz.getConstructor(ctor);
+ } catch (ClassNotFoundException e) {
+ } catch (NoSuchMethodException e) {
+ }
}
}
+
/**
* Returns this reference object's referent. If this reference object
has
* been cleared, then this method returns <code>null</code>.
@@ -108,27 +142,4 @@
}
}
- /**
- * a soft reference for Java 1.2 or later
- */
- private static class SoftReference extends WeakishReference {
- private WeakReference weakref;
-
- /**
- * create a new soft reference, which is bound to a
- * Weak reference inside
- * @param reference
- * @see java.lang.ref.WeakReference
- */
- public SoftReference(Object reference) {
- this.weakref = new WeakReference(reference);
- }
-
- /**
- * Returns this reference object's referent.
- */
- public Object get() {
- return weakref.get();
- }
- }
}
1.1
jakarta-ant/src/main/org/apache/tools/ant/util/WeakishReference12.java
Index: WeakishReference12.java
===================================================================
/*
* User: slo
* Date: Sep 10, 2002
* Time: 11:02:16 PM
* Status: Experimental (Do Not Distribute)
*
* (c) Copyright 2002, Hewlett-Packard Company, all rights reserved.
*/
package org.apache.tools.ant.util;
import java.lang.ref.WeakReference;
/**
*
*/
public class WeakishReference12 extends WeakishReference {
private WeakReference weakref;
/**
* create a new soft reference, which is bound to a
* Weak reference inside
* @param reference
* @see java.lang.ref.WeakReference
*/
public WeakishReference12(Object reference) {
this.weakref = new WeakReference(reference);
}
/**
* Returns this reference object's referent.
*/
public Object get() {
return weakref.get();
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>