public abstract class freemarker.ext.util.ModelCache
minor version: 0
major version: 59
flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
this_class: freemarker.ext.util.ModelCache
super_class: java.lang.Object
{
private boolean useCache;
descriptor: Z
flags: (0x0002) ACC_PRIVATE
private java.util.Map<java.lang.Object, freemarker.ext.util.ModelCache$ModelReference> modelCache;
descriptor: Ljava/util/Map;
flags: (0x0002) ACC_PRIVATE
Signature: Ljava/util/Map<Ljava/lang/Object;Lfreemarker/ext/util/ModelCache$ModelReference;>;
private java.lang.ref.ReferenceQueue<freemarker.template.TemplateModel> refQueue;
descriptor: Ljava/lang/ref/ReferenceQueue;
flags: (0x0002) ACC_PRIVATE
Signature: Ljava/lang/ref/ReferenceQueue<Lfreemarker/template/TemplateModel;>;
protected void <init>();
descriptor: ()V
flags: (0x0004) ACC_PROTECTED
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
iconst_0
putfield freemarker.ext.util.ModelCache.useCache:Z
2: aload 0
aconst_null
putfield freemarker.ext.util.ModelCache.modelCache:Ljava/util/Map;
3: aload 0
aconst_null
putfield freemarker.ext.util.ModelCache.refQueue:Ljava/lang/ref/ReferenceQueue;
4: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lfreemarker/ext/util/ModelCache;
public synchronized void setUseCache(boolean);
descriptor: (Z)V
flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
iload 1
putfield freemarker.ext.util.ModelCache.useCache:Z
1: iload 1
ifeq 5
2: aload 0
new java.util.IdentityHashMap
dup
invokespecial java.util.IdentityHashMap.<init>:()V
putfield freemarker.ext.util.ModelCache.modelCache:Ljava/util/Map;
3: aload 0
new java.lang.ref.ReferenceQueue
dup
invokespecial java.lang.ref.ReferenceQueue.<init>:()V
putfield freemarker.ext.util.ModelCache.refQueue:Ljava/lang/ref/ReferenceQueue;
4: goto 7
5: StackMap locals:
StackMap stack:
aload 0
aconst_null
putfield freemarker.ext.util.ModelCache.modelCache:Ljava/util/Map;
6: aload 0
aconst_null
putfield freemarker.ext.util.ModelCache.refQueue:Ljava/lang/ref/ReferenceQueue;
7: StackMap locals:
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lfreemarker/ext/util/ModelCache;
0 8 1 useCache Z
MethodParameters:
Name Flags
useCache
public synchronized boolean getUseCache();
descriptor: ()Z
flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield freemarker.ext.util.ModelCache.useCache:Z
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lfreemarker/ext/util/ModelCache;
public freemarker.template.TemplateModel getInstance(java.lang.Object);
descriptor: (Ljava/lang/Object;)Lfreemarker/template/TemplateModel;
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=3, args_size=2
start local 0 start local 1 0: aload 1
instanceof freemarker.template.TemplateModel
ifeq 2
1: aload 1
checkcast freemarker.template.TemplateModel
areturn
2: StackMap locals:
StackMap stack:
aload 1
instanceof freemarker.template.TemplateModelAdapter
ifeq 4
3: aload 1
checkcast freemarker.template.TemplateModelAdapter
invokeinterface freemarker.template.TemplateModelAdapter.getTemplateModel:()Lfreemarker/template/TemplateModel;
areturn
4: StackMap locals:
StackMap stack:
aload 0
getfield freemarker.ext.util.ModelCache.useCache:Z
ifeq 10
aload 0
aload 1
invokevirtual freemarker.ext.util.ModelCache.isCacheable:(Ljava/lang/Object;)Z
ifeq 10
5: aload 0
aload 1
invokevirtual freemarker.ext.util.ModelCache.lookup:(Ljava/lang/Object;)Lfreemarker/template/TemplateModel;
astore 2
start local 2 6: aload 2
ifnonnull 9
7: aload 0
aload 1
invokevirtual freemarker.ext.util.ModelCache.create:(Ljava/lang/Object;)Lfreemarker/template/TemplateModel;
astore 2
8: aload 0
aload 2
aload 1
invokevirtual freemarker.ext.util.ModelCache.register:(Lfreemarker/template/TemplateModel;Ljava/lang/Object;)V
9: StackMap locals: freemarker.template.TemplateModel
StackMap stack:
aload 2
areturn
end local 2 10: StackMap locals:
StackMap stack:
aload 0
aload 1
invokevirtual freemarker.ext.util.ModelCache.create:(Ljava/lang/Object;)Lfreemarker/template/TemplateModel;
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 11 0 this Lfreemarker/ext/util/ModelCache;
0 11 1 object Ljava/lang/Object;
6 10 2 model Lfreemarker/template/TemplateModel;
MethodParameters:
Name Flags
object
protected abstract freemarker.template.TemplateModel create(java.lang.Object);
descriptor: (Ljava/lang/Object;)Lfreemarker/template/TemplateModel;
flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
MethodParameters:
Name Flags
object
protected abstract boolean isCacheable(java.lang.Object);
descriptor: (Ljava/lang/Object;)Z
flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
MethodParameters:
Name Flags
object
public void clearCache();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=2, args_size=1
start local 0 0: aload 0
getfield freemarker.ext.util.ModelCache.modelCache:Ljava/util/Map;
ifnull 7
1: aload 0
getfield freemarker.ext.util.ModelCache.modelCache:Ljava/util/Map;
dup
astore 1
monitorenter
2: aload 0
getfield freemarker.ext.util.ModelCache.modelCache:Ljava/util/Map;
invokeinterface java.util.Map.clear:()V
3: aload 1
monitorexit
4: goto 7
StackMap locals: freemarker.ext.util.ModelCache java.util.Map
StackMap stack: java.lang.Throwable
5: aload 1
monitorexit
6: athrow
7: StackMap locals:
StackMap stack:
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lfreemarker/ext/util/ModelCache;
Exception table:
from to target type
2 4 5 any
5 6 5 any
private final freemarker.template.TemplateModel lookup(java.lang.Object);
descriptor: (Ljava/lang/Object;)Lfreemarker/template/TemplateModel;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Code:
stack=2, locals=4, args_size=2
start local 0 start local 1 0: aconst_null
astore 2
start local 2 1: aload 0
getfield freemarker.ext.util.ModelCache.modelCache:Ljava/util/Map;
dup
astore 3
monitorenter
2: aload 0
getfield freemarker.ext.util.ModelCache.modelCache:Ljava/util/Map;
aload 1
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast freemarker.ext.util.ModelCache$ModelReference
astore 2
3: aload 3
monitorexit
4: goto 7
StackMap locals: freemarker.ext.util.ModelCache java.lang.Object freemarker.ext.util.ModelCache$ModelReference java.util.Map
StackMap stack: java.lang.Throwable
5: aload 3
monitorexit
6: athrow
7: StackMap locals:
StackMap stack:
aload 2
ifnull 9
8: aload 2
invokevirtual freemarker.ext.util.ModelCache$ModelReference.getModel:()Lfreemarker/template/TemplateModel;
areturn
9: StackMap locals:
StackMap stack:
aconst_null
areturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 10 0 this Lfreemarker/ext/util/ModelCache;
0 10 1 object Ljava/lang/Object;
1 10 2 ref Lfreemarker/ext/util/ModelCache$ModelReference;
Exception table:
from to target type
2 4 5 any
5 6 5 any
MethodParameters:
Name Flags
object
private final void register(freemarker.template.TemplateModel, java.lang.Object);
descriptor: (Lfreemarker/template/TemplateModel;Ljava/lang/Object;)V
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Code:
stack=7, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 0
getfield freemarker.ext.util.ModelCache.modelCache:Ljava/util/Map;
dup
astore 3
monitorenter
1: StackMap locals: java.util.Map
StackMap stack:
aload 0
getfield freemarker.ext.util.ModelCache.refQueue:Ljava/lang/ref/ReferenceQueue;
invokevirtual java.lang.ref.ReferenceQueue.poll:()Ljava/lang/ref/Reference;
checkcast freemarker.ext.util.ModelCache$ModelReference
astore 4
start local 4 2: aload 4
ifnonnull 4
3: goto 6
4: StackMap locals: freemarker.ext.util.ModelCache$ModelReference
StackMap stack:
aload 0
getfield freemarker.ext.util.ModelCache.modelCache:Ljava/util/Map;
aload 4
getfield freemarker.ext.util.ModelCache$ModelReference.object:Ljava/lang/Object;
invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
pop
end local 4 5: goto 1
6: StackMap locals:
StackMap stack:
aload 0
getfield freemarker.ext.util.ModelCache.modelCache:Ljava/util/Map;
aload 2
new freemarker.ext.util.ModelCache$ModelReference
dup
aload 1
aload 2
aload 0
getfield freemarker.ext.util.ModelCache.refQueue:Ljava/lang/ref/ReferenceQueue;
invokespecial freemarker.ext.util.ModelCache$ModelReference.<init>:(Lfreemarker/template/TemplateModel;Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
7: aload 3
monitorexit
8: goto 11
StackMap locals:
StackMap stack: java.lang.Throwable
9: aload 3
monitorexit
10: athrow
11: StackMap locals:
StackMap stack:
return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 12 0 this Lfreemarker/ext/util/ModelCache;
0 12 1 model Lfreemarker/template/TemplateModel;
0 12 2 object Ljava/lang/Object;
2 5 4 queuedRef Lfreemarker/ext/util/ModelCache$ModelReference;
Exception table:
from to target type
1 8 9 any
9 10 9 any
MethodParameters:
Name Flags
model
object
}
SourceFile: "ModelCache.java"
NestMembers:
freemarker.ext.util.ModelCache$ModelReference
InnerClasses:
private final ModelReference = freemarker.ext.util.ModelCache$ModelReference of freemarker.ext.util.ModelCache