/*******************************************************************************
* Copyright (c) 2002 - 2006 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package com.ibm.wala.util.ref;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import com.ibm.wala.util.debug.Assertions;
/**
* A factory for References ... useful for debugging.
*/
public final class CacheReference {
private final static byte SOFT = 0;
private final static byte WEAK = 1;
private final static byte HARD = 2;
// should be SOFT except during debugging.
private final static byte choice = SOFT;
public final static Object make(final Object referent) {
switch (choice) {
case SOFT:
return new SoftReference<Object>(referent);
case WEAK:
return new WeakReference<Object>(referent);
case HARD:
return referent;
default:
Assertions.UNREACHABLE();
return null;
}
}
public final static Object get(final Object reference) throws IllegalArgumentException {
if (reference == null) {
return null;
}
switch (choice) {
case SOFT:
if (!(reference instanceof java.lang.ref.SoftReference)) {
throw new IllegalArgumentException("not ( reference instanceof java.lang.ref.SoftReference ) ");
}
return ((SoftReference) reference).get();
case WEAK:
return ((WeakReference) reference).get();
case HARD:
return reference;
default:
Assertions.UNREACHABLE();
return null;
}
}
}