class freemarker.core.JavaTemplateNumberFormatFactory extends freemarker.core.TemplateNumberFormatFactory
minor version: 0
major version: 59
flags: flags: (0x0020) ACC_SUPER
this_class: freemarker.core.JavaTemplateNumberFormatFactory
super_class: freemarker.core.TemplateNumberFormatFactory
{
static final freemarker.core.JavaTemplateNumberFormatFactory INSTANCE;
descriptor: Lfreemarker/core/JavaTemplateNumberFormatFactory;
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.JavaTemplateNumberFormatFactory$CacheKey, java.text.NumberFormat> GLOBAL_FORMAT_CACHE;
descriptor: Ljava/util/concurrent/ConcurrentHashMap;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
Signature: Ljava/util/concurrent/ConcurrentHashMap<Lfreemarker/core/JavaTemplateNumberFormatFactory$CacheKey;Ljava/text/NumberFormat;>;
private static final int LEAK_ALERT_NUMBER_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.JavaTemplateNumberFormatFactory
dup
invokespecial freemarker.core.JavaTemplateNumberFormatFactory.<init>:()V
putstatic freemarker.core.JavaTemplateNumberFormatFactory.INSTANCE:Lfreemarker/core/JavaTemplateNumberFormatFactory;
1: ldc "freemarker.runtime"
invokestatic freemarker.log.Logger.getLogger:(Ljava/lang/String;)Lfreemarker/log/Logger;
putstatic freemarker.core.JavaTemplateNumberFormatFactory.LOG:Lfreemarker/log/Logger;
2: new java.util.concurrent.ConcurrentHashMap
dup
invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
3: putstatic freemarker.core.JavaTemplateNumberFormatFactory.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.TemplateNumberFormatFactory.<init>:()V
1: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lfreemarker/core/JavaTemplateNumberFormatFactory;
public freemarker.core.TemplateNumberFormat get(java.lang.String, java.util.Locale, freemarker.core.Environment);
descriptor: (Ljava/lang/String;Ljava/util/Locale;Lfreemarker/core/Environment;)Lfreemarker/core/TemplateNumberFormat;
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=8, args_size=4
start local 0 start local 1 start local 2 start local 3 0: new freemarker.core.JavaTemplateNumberFormatFactory$CacheKey
dup
aload 1
aload 2
invokespecial freemarker.core.JavaTemplateNumberFormatFactory$CacheKey.<init>:(Ljava/lang/String;Ljava/util/Locale;)V
astore 4
start local 4 1: getstatic freemarker.core.JavaTemplateNumberFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
aload 4
invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.text.NumberFormat
astore 5
start local 5 2: aload 5
ifnonnull 39
3: ldc "number"
aload 1
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 6
4: aload 2
invokestatic java.text.NumberFormat.getNumberInstance:(Ljava/util/Locale;)Ljava/text/NumberFormat;
astore 5
5: goto 24
StackMap locals: freemarker.core.JavaTemplateNumberFormatFactory$CacheKey java.text.NumberFormat
StackMap stack:
6: ldc "currency"
aload 1
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 9
7: aload 2
invokestatic java.text.NumberFormat.getCurrencyInstance:(Ljava/util/Locale;)Ljava/text/NumberFormat;
astore 5
8: goto 24
StackMap locals:
StackMap stack:
9: ldc "percent"
aload 1
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 12
10: aload 2
invokestatic java.text.NumberFormat.getPercentInstance:(Ljava/util/Locale;)Ljava/text/NumberFormat;
astore 5
11: goto 24
StackMap locals:
StackMap stack:
12: ldc "computer"
aload 1
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 15
13: aload 3
invokevirtual freemarker.core.Environment.getCNumberFormat:()Ljava/text/NumberFormat;
astore 5
14: goto 24
15: StackMap locals:
StackMap stack:
aload 1
aload 2
invokestatic freemarker.core.ExtendedDecimalFormatParser.parse:(Ljava/lang/String;Ljava/util/Locale;)Ljava/text/DecimalFormat;
astore 5
16: goto 24
StackMap locals:
StackMap stack: java.text.ParseException
17: astore 6
start local 6 18: aload 6
invokevirtual java.text.ParseException.getMessage:()Ljava/lang/String;
astore 7
start local 7 19: new freemarker.core.InvalidFormatParametersException
dup
20: aload 7
ifnull 21
aload 7
goto 22
StackMap locals: freemarker.core.JavaTemplateNumberFormatFactory java.lang.String java.util.Locale freemarker.core.Environment freemarker.core.JavaTemplateNumberFormatFactory$CacheKey java.text.NumberFormat java.text.ParseException java.lang.String
StackMap stack: new 19 new 19
21: ldc "Invalid DecimalFormat pattern"
StackMap locals: freemarker.core.JavaTemplateNumberFormatFactory java.lang.String java.util.Locale freemarker.core.Environment freemarker.core.JavaTemplateNumberFormatFactory$CacheKey java.text.NumberFormat java.text.ParseException java.lang.String
StackMap stack: new 19 new 19 java.lang.String
22: aload 6
23: invokespecial freemarker.core.InvalidFormatParametersException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
end local 7 end local 6 24: StackMap locals:
StackMap stack:
getstatic freemarker.core.JavaTemplateNumberFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
invokevirtual java.util.concurrent.ConcurrentHashMap.size:()I
sipush 1024
if_icmplt 36
25: iconst_0
istore 6
start local 6 26: ldc Lfreemarker/core/JavaTemplateNumberFormatFactory;
dup
astore 7
monitorenter
27: getstatic freemarker.core.JavaTemplateNumberFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
invokevirtual java.util.concurrent.ConcurrentHashMap.size:()I
sipush 1024
if_icmplt 30
28: iconst_1
istore 6
29: getstatic freemarker.core.JavaTemplateNumberFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
invokevirtual java.util.concurrent.ConcurrentHashMap.clear:()V
30: StackMap locals: int java.lang.Class
StackMap stack:
aload 7
monitorexit
31: goto 34
StackMap locals:
StackMap stack: java.lang.Throwable
32: aload 7
monitorexit
33: athrow
34: StackMap locals:
StackMap stack:
iload 6
ifeq 36
35: getstatic freemarker.core.JavaTemplateNumberFormatFactory.LOG:Lfreemarker/log/Logger;
ldc "Global Java NumberFormat 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 6 36: StackMap locals:
StackMap stack:
getstatic freemarker.core.JavaTemplateNumberFormatFactory.GLOBAL_FORMAT_CACHE:Ljava/util/concurrent/ConcurrentHashMap;
aload 4
aload 5
invokevirtual java.util.concurrent.ConcurrentHashMap.putIfAbsent:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.text.NumberFormat
astore 6
start local 6 37: aload 6
ifnull 39
38: aload 6
astore 5
end local 6 39: StackMap locals:
StackMap stack:
aload 5
invokevirtual java.text.NumberFormat.clone:()Ljava/lang/Object;
checkcast java.text.NumberFormat
astore 5
40: new freemarker.core.JavaTemplateNumberFormat
dup
aload 5
aload 1
invokespecial freemarker.core.JavaTemplateNumberFormat.<init>:(Ljava/text/NumberFormat;Ljava/lang/String;)V
areturn
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 41 0 this Lfreemarker/core/JavaTemplateNumberFormatFactory;
0 41 1 params Ljava/lang/String;
0 41 2 locale Ljava/util/Locale;
0 41 3 env Lfreemarker/core/Environment;
1 41 4 cacheKey Lfreemarker/core/JavaTemplateNumberFormatFactory$CacheKey;
2 41 5 jFormat Ljava/text/NumberFormat;
18 24 6 e Ljava/text/ParseException;
19 24 7 msg Ljava/lang/String;
26 36 6 triggered Z
37 39 6 prevJFormat Ljava/text/NumberFormat;
Exception table:
from to target type
15 16 17 Class java.text.ParseException
27 31 32 any
32 33 32 any
Exceptions:
throws freemarker.core.InvalidFormatParametersException
MethodParameters:
Name Flags
params
locale
env
}
SourceFile: "JavaTemplateNumberFormatFactory.java"
NestMembers:
freemarker.core.JavaTemplateNumberFormatFactory$CacheKey
InnerClasses:
private final CacheKey = freemarker.core.JavaTemplateNumberFormatFactory$CacheKey of freemarker.core.JavaTemplateNumberFormatFactory