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]>