Package freemarker.template.utility
Class ClassUtil
- java.lang.Object
-
- freemarker.template.utility.ClassUtil
-
public class ClassUtil extends java.lang.Object
-
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.lang.ClassboxingClassToPrimitiveClass(java.lang.Class boxingClass)The exact reverse ofprimitiveClassToBoxingClass(java.lang.Class).static java.lang.ClassforName(java.lang.String className)Similar toClass.forName(java.lang.String), but attempts to load through the thread context class loader.static java.lang.Class<?>getArrayClass(java.lang.Class<?> elementType, int dimensions)Returns the array type that corresponds to the element type and the given number of array dimensions.static java.lang.StringgetFTLTypeDescription(TemplateModel tm)Returns the type description of a value with FTL terms (not plain class name), as it should be used in type-related error messages and for debugging purposes.static java.io.InputStreamgetReasourceAsStream(java.lang.Class<?> baseClass, java.lang.String resource, boolean optional)Very similar toClass.getResourceAsStream(String), but throwsIOExceptioninstead of returningnullifoptionalisfalse, and attempts to work around "IllegalStateException: zip file closed" and similarsun.net.www.protocol.jar.JarURLConnection-related glitches.static java.io.InputStreamgetReasourceAsStream(java.lang.ClassLoader classLoader, java.lang.String resource, boolean optional)Same asgetReasourceAsStream(Class, String, boolean), but uses aClassLoaderdirectly instead of aClass.static java.lang.StringgetShortClassName(java.lang.Class pClass)Same asgetShortClassName(pClass, false).static java.lang.StringgetShortClassName(java.lang.Class pClass, boolean shortenFreeMarkerClasses)Returns a class name without "java.lang." and "java.util." prefix, also shows array types in a format likeint[]; useful for printing class names in error messages.static java.lang.StringgetShortClassNameOfObject(java.lang.Object obj)static java.lang.StringgetShortClassNameOfObject(java.lang.Object obj, boolean shortenFreeMarkerClasses)getShortClassName(Class, boolean)called withobject.getClass(), but returns the fictional class nameNullfor anullvalue.static booleanisNumerical(java.lang.Class type)Tells if a type is numerical; works both for primitive types and classes.static java.util.PropertiesloadProperties(java.lang.Class<?> baseClass, java.lang.String resource)Loads a class loader resource into aProperties; tries to work around "zip file closed" and relatedsun.net.www.protocol.jar.JarURLConnectionglitches.static java.lang.ClassprimitiveClassToBoxingClass(java.lang.Class primitiveClass)Gets the wrapper class for a primitive class, likeIntegerforint, also returnsVoidforvoid.static java.lang.Class<?>resolveIfPrimitiveTypeName(java.lang.String typeName)Returns theClassfor a primitive type name, ornullif it's not the name of a primitive type.
-
-
-
Method Detail
-
forName
public static java.lang.Class forName(java.lang.String className) throws java.lang.ClassNotFoundExceptionSimilar toClass.forName(java.lang.String), but attempts to load through the thread context class loader. Only if thread context class loader is inaccessible, or it can't find the class will it attempt to fall back to the class loader that loads the FreeMarker classes.- Throws:
java.lang.ClassNotFoundException
-
resolveIfPrimitiveTypeName
public static java.lang.Class<?> resolveIfPrimitiveTypeName(java.lang.String typeName)
Returns theClassfor a primitive type name, ornullif it's not the name of a primitive type.- Since:
- 2.3.30
-
getArrayClass
public static java.lang.Class<?> getArrayClass(java.lang.Class<?> elementType, int dimensions)Returns the array type that corresponds to the element type and the given number of array dimensions. If the dimension is 0, it just returns the element type as is.- Since:
- 2.3.30
-
getShortClassName
public static java.lang.String getShortClassName(java.lang.Class pClass)
Same asgetShortClassName(pClass, false).- Since:
- 2.3.20
-
getShortClassName
public static java.lang.String getShortClassName(java.lang.Class pClass, boolean shortenFreeMarkerClasses)Returns a class name without "java.lang." and "java.util." prefix, also shows array types in a format likeint[]; useful for printing class names in error messages.- Parameters:
pClass- can benull, in which case the method returnsnull.shortenFreeMarkerClasses- iftrue, it will also shorten FreeMarker class names. The exact rules aren't specified and might change over time, but right now,freemarker.ext.beans.NumberModelfor example becomes tof.e.b.NumberModel.- Since:
- 2.3.20
-
getShortClassNameOfObject
public static java.lang.String getShortClassNameOfObject(java.lang.Object obj)
- Since:
- 2.3.20
-
getShortClassNameOfObject
public static java.lang.String getShortClassNameOfObject(java.lang.Object obj, boolean shortenFreeMarkerClasses)getShortClassName(Class, boolean)called withobject.getClass(), but returns the fictional class nameNullfor anullvalue.- Since:
- 2.3.20
-
getFTLTypeDescription
public static java.lang.String getFTLTypeDescription(TemplateModel tm)
Returns the type description of a value with FTL terms (not plain class name), as it should be used in type-related error messages and for debugging purposes. The exact format is not specified and might change over time, but currently it's something like"string (wrapper: f.t.SimpleScalar)"or"sequence+hash+string (ArrayList wrapped into f.e.b.CollectionModel)".- Since:
- 2.3.20
-
primitiveClassToBoxingClass
public static java.lang.Class primitiveClassToBoxingClass(java.lang.Class primitiveClass)
Gets the wrapper class for a primitive class, likeIntegerforint, also returnsVoidforvoid.- Parameters:
primitiveClass- AClasslikeint.type,boolean.type, etc. If it's not a primitive class, or it'snull, then the parameter value is returned as is. Note that performance-wise the method assumes that it's a primitive class.- Since:
- 2.3.21
-
boxingClassToPrimitiveClass
public static java.lang.Class boxingClassToPrimitiveClass(java.lang.Class boxingClass)
The exact reverse ofprimitiveClassToBoxingClass(java.lang.Class).- Since:
- 2.3.21
-
isNumerical
public static boolean isNumerical(java.lang.Class type)
Tells if a type is numerical; works both for primitive types and classes.- Parameters:
type- can't benull- Since:
- 2.3.21
-
getReasourceAsStream
public static java.io.InputStream getReasourceAsStream(java.lang.Class<?> baseClass, java.lang.String resource, boolean optional) throws java.io.IOExceptionVery similar toClass.getResourceAsStream(String), but throwsIOExceptioninstead of returningnullifoptionalisfalse, and attempts to work around "IllegalStateException: zip file closed" and similarsun.net.www.protocol.jar.JarURLConnection-related glitches. These are caused by bugs outside of FreeMarker. Note that in cases where the JAR resource becomes broken concurrently, similar errors can still occur later when theInputStreamis read (loadProperties(Class, String)works that around as well).- Returns:
- If
optionalisfalse, it's nevernull, otherwisenullindicates that the resource doesn't exist. - Throws:
java.io.IOException- If the resource wasn't found, or otherIOExceptionoccurs.- Since:
- 2.3.27
-
getReasourceAsStream
public static java.io.InputStream getReasourceAsStream(java.lang.ClassLoader classLoader, java.lang.String resource, boolean optional) throws java.io.IOExceptionSame asgetReasourceAsStream(Class, String, boolean), but uses aClassLoaderdirectly instead of aClass.- Throws:
java.io.IOException- Since:
- 2.3.27
-
loadProperties
public static java.util.Properties loadProperties(java.lang.Class<?> baseClass, java.lang.String resource) throws java.io.IOExceptionLoads a class loader resource into aProperties; tries to work around "zip file closed" and relatedsun.net.www.protocol.jar.JarURLConnectionglitches.- Throws:
java.io.IOException- Since:
- 2.3.27
-
-