class freemarker.core.JavaTemplateDateFormatFactory extends freemarker.core.TemplateDateFormatFactory
minor version: 0
major version: 59
flags: flags: (0x0020) ACC_SUPER
this_class: freemarker.core.JavaTemplateDateFormatFactory
super_class: freemarker.core.TemplateDateFormatFactory
{
static final freemarker.core.JavaTemplateDateFormatFactory INSTANCE;
descriptor: Lfreemarker/core/JavaTemplateDateFormatFactory;
flags: (0x0018) ACC_STATIC, ACC_FINAL
private static final freemarker.log.Logger LOG;
descriptor: Lfreemarker/log/Logger;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final java.util.concurrent.ConcurrentHashMap<freemarker.core.JavaTemplateDateFormatFactory$CacheKey, java.text.DateFormat> GLOBAL_FORMAT_CACHE;
descriptor: Ljava/util/concurrent/ConcurrentHashMap;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
Signature: Ljava/util/concurrent/ConcurrentHashMap<Lfreemarker/core/JavaTemplateDateFormatFactory$CacheKey;Ljava/text/DateFormat;>;
private static final int LEAK_ALERT_DATE_FORMAT_CACHE_SIZE;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 1024
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=2, locals=0, args_size=0
0: new freemarker.core.JavaTemplateDateFormatFactory
dup
invokespecial freemarker.core.JavaTemplateDateFormatFactory.<init>:()V
putstatic freemarker.core.JavaTemplateDateFormatFactory.INSTANCE:Lfreemarker/core/JavaTemplateDateFormatFactory;
1: ldc "freemarker.runtime"
invokestatic freemarker.log.Logger.getLogger:(Ljava/lang/String;)Lfreemarker/log/Logger;
putstatic freemarker.core.JavaTemplateDateFormatFactory.LOG:Lfreemarker/log/Logger;
2: new java.util.concurrent.ConcurrentHashMap
dup
invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
3: putstatic freemarker.core.JavaTemplateDateFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
4: return
LocalVariableTable:
Start End Slot Name Signature
private void <init>();
descriptor: ()V
flags: (0x0002) ACC_PRIVATE
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
invokespecial freemarker.core.TemplateDateFormatFactory.<init>:()V
1: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lfreemarker/core/JavaTemplateDateFormatFactory;
public freemarker.core.TemplateDateFormat get(java.lang.String, int, java.util.Locale, java.util.TimeZone, boolean, freemarker.core.Environment);
descriptor: (Ljava/lang/String;ILjava/util/Locale;Ljava/util/TimeZone;ZLfreemarker/core/Environment;)Lfreemarker/core/TemplateDateFormat;
flags: (0x0001) ACC_PUBLIC
Code:
stack=7, locals=7, args_size=7
start local 0 start local 1 start local 2 start local 3 start local 4 start local 5 start local 6 0: new freemarker.core.JavaTemplateDateFormat
dup
aload 0
iload 2
aload 1
aload 3
aload 4
invokevirtual freemarker.core.JavaTemplateDateFormatFactory.getJavaDateFormat:(ILjava/lang/String;Ljava/util/Locale;Ljava/util/TimeZone;)Ljava/text/DateFormat;
invokespecial freemarker.core.JavaTemplateDateFormat.<init>:(Ljava/text/DateFormat;)V
areturn
end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lfreemarker/core/JavaTemplateDateFormatFactory;
0 1 1 params Ljava/lang/String;
0 1 2 dateType I
0 1 3 locale Ljava/util/Locale;
0 1 4 timeZone Ljava/util/TimeZone;
0 1 5 zonelessInput Z
0 1 6 env Lfreemarker/core/Environment;
Exceptions:
throws freemarker.core.UnknownDateTypeFormattingUnsupportedException, freemarker.core.InvalidFormatParametersException
MethodParameters:
Name Flags
params
dateType
locale
timeZone
zonelessInput
env
private java.text.DateFormat getJavaDateFormat(int, java.lang.String, java.util.Locale, java.util.TimeZone);
descriptor: (ILjava/lang/String;Ljava/util/Locale;Ljava/util/TimeZone;)Ljava/text/DateFormat;
flags: (0x0002) ACC_PRIVATE
Code:
stack=6, locals=11, args_size=5
start local 0 start local 1 start local 2 start local 3 start local 4 0: new freemarker.core.JavaTemplateDateFormatFactory$CacheKey
dup
iload 1
aload 2
aload 3
aload 4
invokespecial freemarker.core.JavaTemplateDateFormatFactory$CacheKey.<init>:(ILjava/lang/String;Ljava/util/Locale;Ljava/util/TimeZone;)V
astore 5
start local 5 1: getstatic freemarker.core.JavaTemplateDateFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
aload 5
invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.text.DateFormat
astore 6
start local 6 2: aload 6
ifnonnull 45
3: new java.util.StringTokenizer
dup
aload 2
ldc "_"
invokespecial java.util.StringTokenizer.<init>:(Ljava/lang/String;Ljava/lang/String;)V
astore 7
start local 7 4: aload 7
invokevirtual java.util.StringTokenizer.hasMoreTokens:()Z
ifeq 5
aload 0
aload 7
invokevirtual java.util.StringTokenizer.nextToken:()Ljava/lang/String;
invokevirtual freemarker.core.JavaTemplateDateFormatFactory.parseDateStyleToken:(Ljava/lang/String;)I
goto 6
StackMap locals: freemarker.core.JavaTemplateDateFormatFactory$CacheKey java.text.DateFormat java.util.StringTokenizer
StackMap stack:
5: iconst_2
StackMap locals:
StackMap stack: int
6: istore 8
start local 8 7: iload 8
iconst_m1
if_icmpeq 19
8: iload 1
tableswitch { // 0 - 3
0: 9
1: 10
2: 12
3: 14
default: 19
}
9: StackMap locals: int
StackMap stack:
new freemarker.core.UnknownDateTypeFormattingUnsupportedException
dup
invokespecial freemarker.core.UnknownDateTypeFormattingUnsupportedException.<init>:()V
athrow
10: StackMap locals:
StackMap stack:
iload 8
aload 5
getfield freemarker.core.JavaTemplateDateFormatFactory$CacheKey.locale:Ljava/util/Locale;
invokestatic java.text.DateFormat.getTimeInstance:(ILjava/util/Locale;)Ljava/text/DateFormat;
astore 6
11: goto 19
12: StackMap locals:
StackMap stack:
iload 8
aload 5
getfield freemarker.core.JavaTemplateDateFormatFactory$CacheKey.locale:Ljava/util/Locale;
invokestatic java.text.DateFormat.getDateInstance:(ILjava/util/Locale;)Ljava/text/DateFormat;
astore 6
13: goto 19
14: StackMap locals:
StackMap stack:
aload 7
invokevirtual java.util.StringTokenizer.hasMoreTokens:()Z
ifeq 15
aload 0
aload 7
invokevirtual java.util.StringTokenizer.nextToken:()Ljava/lang/String;
invokevirtual freemarker.core.JavaTemplateDateFormatFactory.parseDateStyleToken:(Ljava/lang/String;)I
goto 16
StackMap locals:
StackMap stack:
15: iload 8
StackMap locals:
StackMap stack: int
16: istore 9
start local 9 17: iload 9
iconst_m1
if_icmpeq 19
18: iload 8
iload 9
aload 5
getfield freemarker.core.JavaTemplateDateFormatFactory$CacheKey.locale:Ljava/util/Locale;
invokestatic java.text.DateFormat.getDateTimeInstance:(IILjava/util/Locale;)Ljava/text/DateFormat;
astore 6
end local 9 19: StackMap locals:
StackMap stack:
aload 6
ifnonnull 29
20: new java.text.SimpleDateFormat
dup
aload 2
aload 5
getfield freemarker.core.JavaTemplateDateFormatFactory$CacheKey.locale:Ljava/util/Locale;
invokespecial java.text.SimpleDateFormat.<init>:(Ljava/lang/String;Ljava/util/Locale;)V
astore 6
21: goto 29
StackMap locals:
StackMap stack: java.lang.IllegalArgumentException
22: astore 9
start local 9 23: aload 9
invokevirtual java.lang.IllegalArgumentException.getMessage:()Ljava/lang/String;
astore 10
start local 10 24: new freemarker.core.InvalidFormatParametersException
dup
25: aload 10
ifnull 26
aload 10
goto 27
StackMap locals: freemarker.core.JavaTemplateDateFormatFactory int java.lang.String java.util.Locale java.util.TimeZone freemarker.core.JavaTemplateDateFormatFactory$CacheKey java.text.DateFormat java.util.StringTokenizer int java.lang.IllegalArgumentException java.lang.String
StackMap stack: new 24 new 24
26: ldc "Invalid SimpleDateFormat pattern"
StackMap locals: freemarker.core.JavaTemplateDateFormatFactory int java.lang.String java.util.Locale java.util.TimeZone freemarker.core.JavaTemplateDateFormatFactory$CacheKey java.text.DateFormat java.util.StringTokenizer int java.lang.IllegalArgumentException java.lang.String
StackMap stack: new 24 new 24 java.lang.String
27: aload 9
28: invokespecial freemarker.core.InvalidFormatParametersException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
end local 10 end local 9 29: StackMap locals:
StackMap stack:
aload 6
aload 5
getfield freemarker.core.JavaTemplateDateFormatFactory$CacheKey.timeZone:Ljava/util/TimeZone;
invokevirtual java.text.DateFormat.setTimeZone:(Ljava/util/TimeZone;)V
30: getstatic freemarker.core.JavaTemplateDateFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
invokevirtual java.util.concurrent.ConcurrentHashMap.size:()I
sipush 1024
if_icmplt 42
31: iconst_0
istore 9
start local 9 32: ldc Lfreemarker/core/JavaTemplateDateFormatFactory;
dup
astore 10
monitorenter
33: getstatic freemarker.core.JavaTemplateDateFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
invokevirtual java.util.concurrent.ConcurrentHashMap.size:()I
sipush 1024
if_icmplt 36
34: iconst_1
istore 9
35: getstatic freemarker.core.JavaTemplateDateFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
invokevirtual java.util.concurrent.ConcurrentHashMap.clear:()V
36: StackMap locals: int java.lang.Class
StackMap stack:
aload 10
monitorexit
37: goto 40
StackMap locals:
StackMap stack: java.lang.Throwable
38: aload 10
monitorexit
39: athrow
40: StackMap locals:
StackMap stack:
iload 9
ifeq 42
41: getstatic freemarker.core.JavaTemplateDateFormatFactory.LOG:Lfreemarker/log/Logger;
ldc "Global Java DateFormat cache has exceeded 1024 entries => cache flushed. Typical cause: Some template generates high variety of format pattern strings."
invokevirtual freemarker.log.Logger.warn:(Ljava/lang/String;)V
end local 9 42: StackMap locals:
StackMap stack:
getstatic freemarker.core.JavaTemplateDateFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
aload 5
aload 6
invokevirtual java.util.concurrent.ConcurrentHashMap.putIfAbsent:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.text.DateFormat
astore 9
start local 9 43: aload 9
ifnull 45
44: aload 9
astore 6
end local 9 end local 8 end local 7 45: StackMap locals:
StackMap stack:
aload 6
invokevirtual java.text.DateFormat.clone:()Ljava/lang/Object;
checkcast java.text.DateFormat
areturn
end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 46 0 this Lfreemarker/core/JavaTemplateDateFormatFactory;
0 46 1 dateType I
0 46 2 nameOrPattern Ljava/lang/String;
0 46 3 locale Ljava/util/Locale;
0 46 4 timeZone Ljava/util/TimeZone;
1 46 5 cacheKey Lfreemarker/core/JavaTemplateDateFormatFactory$CacheKey;
2 46 6 jFormat Ljava/text/DateFormat;
4 45 7 tok Ljava/util/StringTokenizer;
7 45 8 tok1Style I
17 19 9 tok2Style I
23 29 9 e Ljava/lang/IllegalArgumentException;
24 29 10 msg Ljava/lang/String;
32 42 9 triggered Z
43 45 9 prevJFormat Ljava/text/DateFormat;
Exception table:
from to target type
20 21 22 Class java.lang.IllegalArgumentException
33 37 38 any
38 39 38 any
Exceptions:
throws freemarker.core.UnknownDateTypeFormattingUnsupportedException, freemarker.core.InvalidFormatParametersException
MethodParameters:
Name Flags
dateType
nameOrPattern
locale
timeZone
private int parseDateStyleToken(java.lang.String);
descriptor: (Ljava/lang/String;)I
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=2, args_size=2
start local 0 start local 1 0: ldc "short"
aload 1
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 2
1: iconst_3
ireturn
2: StackMap locals:
StackMap stack:
ldc "medium"
aload 1
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 4
3: iconst_2
ireturn
4: StackMap locals:
StackMap stack:
ldc "long"
aload 1
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 6
5: iconst_1
ireturn
6: StackMap locals:
StackMap stack:
ldc "full"
aload 1
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 8
7: iconst_0
ireturn
8: StackMap locals:
StackMap stack:
iconst_m1
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lfreemarker/core/JavaTemplateDateFormatFactory;
0 9 1 token Ljava/lang/String;
MethodParameters:
Name Flags
token
}
SourceFile: "JavaTemplateDateFormatFactory.java"
NestMembers:
freemarker.core.JavaTemplateDateFormatFactory$CacheKey
InnerClasses:
private final CacheKey = freemarker.core.JavaTemplateDateFormatFactory$CacheKey of freemarker.core.JavaTemplateDateFormatFactory