/*
* This file is part of the X10 project (http://x10-lang.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* (C) Copyright IBM Corporation 2006-2010.
*/
package x10.rtt;
import java.util.concurrent.ConcurrentHashMap;
public final class VoidFunType<T> extends RuntimeType<T> {
private static final long serialVersionUID = 1L;
// not used
// protected VoidFunType(Class<?> javaClass) {
// super(javaClass);
// }
//
// protected VoidFunType(Class<?> javaClass, Variance[] variances) {
// super(javaClass, variances);
// }
//
// protected VoidFunType(Class<?> javaClass, Type<?>[] parents) {
// super(javaClass, parents);
// }
protected VoidFunType(Class<?> javaClass, Variance[] variances, Type<?>[] parents) {
super(javaClass, variances, parents);
}
private static final boolean useCache = true;
private static final ConcurrentHashMap<Class<?>, VoidFunType<?>> typeCache = new ConcurrentHashMap<Class<?>, VoidFunType<?>>();
public static <T> VoidFunType/*<T>*/ make(Class<?> javaClass) {
if (useCache) {
VoidFunType<?> type = typeCache.get(javaClass);
if (type == null) {
VoidFunType<?> type0 = new VoidFunType<T>(javaClass, null, null);
type = typeCache.putIfAbsent(javaClass, type0);
if (type == null) type = type0;
}
return (VoidFunType<T>) type;
} else {
return new VoidFunType<T>(javaClass, null, null);
}
}
public static <T> VoidFunType/*<T>*/ make(Class<?> javaClass, Variance[] variances) {
if (useCache) {
VoidFunType<?> type = typeCache.get(javaClass);
if (type == null) {
VoidFunType<?> type0 = new VoidFunType<T>(javaClass, variances, null);
type = typeCache.putIfAbsent(javaClass, type0);
if (type == null) type = type0;
}
return (VoidFunType<T>) type;
} else {
return new VoidFunType<T>(javaClass, variances, null);
}
}
public static <T> VoidFunType/*<T>*/ make(Class<?> javaClass, Type<?>[] parents) {
if (useCache) {
VoidFunType<?> type = typeCache.get(javaClass);
if (type == null) {
VoidFunType<?> type0 = new VoidFunType<T>(javaClass, null, parents);
type = typeCache.putIfAbsent(javaClass, type0);
if (type == null) type = type0;
}
return (VoidFunType<T>) type;
} else {
return new VoidFunType<T>(javaClass, null, parents);
}
}
public static <T> VoidFunType/*<T>*/ make(Class<?> javaClass, Variance[] variances, Type<?>[] parents) {
if (useCache) {
VoidFunType<?> type = typeCache.get(javaClass);
if (type == null) {
VoidFunType<?> type0 = new VoidFunType<T>(javaClass, variances, parents);
type = typeCache.putIfAbsent(javaClass, type0);
if (type == null) type = type0;
}
return (VoidFunType<T>) type;
} else {
return new VoidFunType<T>(javaClass, variances, parents);
}
}
@Override
public String typeName(Object o) {
return typeNameForVoidFun(o);
}
}