class freemarker.core.BuiltInsForSequences$sortBI extends freemarker.core.BuiltInForSequence
minor version: 0
major version: 59
flags: flags: (0x0020) ACC_SUPER
this_class: freemarker.core.BuiltInsForSequences$sortBI
super_class: freemarker.core.BuiltInForSequence
{
static final int KEY_TYPE_NOT_YET_DETECTED;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: 0
static final int KEY_TYPE_STRING;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: 1
static final int KEY_TYPE_NUMBER;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: 2
static final int KEY_TYPE_DATE;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: 3
static final int KEY_TYPE_BOOLEAN;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: 4
void <init>();
descriptor: ()V
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
invokespecial freemarker.core.BuiltInForSequence.<init>:()V
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lfreemarker/core/BuiltInsForSequences$sortBI;
static freemarker.template.TemplateModelException newInconsistentSortKeyTypeException(int, java.lang.String, java.lang.String, int, freemarker.template.TemplateModel);
descriptor: (ILjava/lang/String;Ljava/lang/String;ILfreemarker/template/TemplateModel;)Lfreemarker/template/TemplateModelException;
flags: (0x0008) ACC_STATIC
Code:
stack=8, locals=7, args_size=5
start local 0 start local 1 start local 2 start local 3 start local 4 0: iload 0
ifne 4
1: ldc "value"
astore 5
start local 5 2: ldc "values"
astore 6
start local 6 3: goto 6
end local 6 end local 5 4: StackMap locals:
StackMap stack:
ldc "key value"
astore 5
start local 5 5: ldc "key values"
astore 6
start local 6 6: StackMap locals: java.lang.String java.lang.String
StackMap stack:
new freemarker.core._TemplateModelException
dup
bipush 14
anewarray java.lang.Object
dup
iconst_0
7: iload 0
iload 3
invokestatic freemarker.core.BuiltInsForSequences$sortBI.startErrorMessage:(II)[Ljava/lang/Object;
aastore
dup
iconst_1
8: ldc "All "
aastore
dup
iconst_2
aload 6
aastore
dup
iconst_3
ldc " in the sequence must be "
aastore
dup
iconst_4
9: aload 2
aastore
dup
iconst_5
ldc ", because the first "
aastore
dup
bipush 6
aload 5
aastore
dup
bipush 7
10: ldc " was that. However, the "
aastore
dup
bipush 8
aload 5
aastore
dup
bipush 9
11: ldc " of the current item isn't a "
aastore
dup
bipush 10
aload 1
aastore
dup
bipush 11
ldc " but a "
aastore
dup
bipush 12
12: new freemarker.core._DelayedFTLTypeDescription
dup
aload 4
invokespecial freemarker.core._DelayedFTLTypeDescription.<init>:(Lfreemarker/template/TemplateModel;)V
aastore
dup
bipush 13
ldc "."
13: aastore
invokespecial freemarker.core._TemplateModelException.<init>:([Ljava/lang/Object;)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 14 0 keyNamesLn I
0 14 1 firstType Ljava/lang/String;
0 14 2 firstTypePlural Ljava/lang/String;
0 14 3 index I
0 14 4 key Lfreemarker/template/TemplateModel;
2 4 5 valueInMsg Ljava/lang/String;
5 14 5 valueInMsg Ljava/lang/String;
3 4 6 valuesInMsg Ljava/lang/String;
6 14 6 valuesInMsg Ljava/lang/String;
MethodParameters:
Name Flags
keyNamesLn
firstType
firstTypePlural
index
key
static freemarker.template.TemplateSequenceModel sort(freemarker.template.TemplateSequenceModel, java.lang.String[]);
descriptor: (Lfreemarker/template/TemplateSequenceModel;[Ljava/lang/String;)Lfreemarker/template/TemplateSequenceModel;
flags: (0x0008) ACC_STATIC
Code:
stack=9, locals=12, args_size=2
start local 0 start local 1 0: aload 0
invokeinterface freemarker.template.TemplateSequenceModel.size:()I
istore 2
start local 2 1: iload 2
ifne 2
aload 0
areturn
2: StackMap locals: int
StackMap stack:
new java.util.ArrayList
dup
iload 2
invokespecial java.util.ArrayList.<init>:(I)V
astore 3
start local 3 3: aload 1
ifnonnull 4
iconst_0
goto 5
StackMap locals: java.util.ArrayList
StackMap stack:
4: aload 1
arraylength
StackMap locals:
StackMap stack: int
5: istore 4
start local 4 6: iconst_0
istore 5
start local 5 7: aconst_null
astore 6
start local 6 8: iconst_0
istore 7
start local 7 9: goto 103
10: StackMap locals: freemarker.template.TemplateSequenceModel java.lang.String[] int java.util.ArrayList int int java.util.Comparator int
StackMap stack:
aload 0
iload 7
invokeinterface freemarker.template.TemplateSequenceModel.get:(I)Lfreemarker/template/TemplateModel;
astore 8
start local 8 11: aload 8
astore 9
start local 9 12: iconst_0
istore 10
start local 10 13: goto 36
14: StackMap locals: freemarker.template.TemplateModel freemarker.template.TemplateModel int
StackMap stack:
aload 9
checkcast freemarker.template.TemplateHashModel
aload 1
iload 10
aaload
invokeinterface freemarker.template.TemplateHashModel.get:(Ljava/lang/String;)Lfreemarker/template/TemplateModel;
astore 9
15: goto 30
StackMap locals:
StackMap stack: java.lang.ClassCastException
16: astore 11
start local 11 17: aload 9
instanceof freemarker.template.TemplateHashModel
ifne 29
18: new freemarker.core._TemplateModelException
dup
bipush 6
anewarray java.lang.Object
dup
iconst_0
19: iload 4
iload 7
invokestatic freemarker.core.BuiltInsForSequences$sortBI.startErrorMessage:(II)[Ljava/lang/Object;
aastore
dup
iconst_1
20: iload 10
ifne 22
21: ldc "Sequence items must be hashes when using ?sort_by. "
goto 23
22: StackMap locals: freemarker.template.TemplateSequenceModel java.lang.String[] int java.util.ArrayList int int java.util.Comparator int freemarker.template.TemplateModel freemarker.template.TemplateModel int java.lang.ClassCastException
StackMap stack: new 18 new 18 java.lang.Object[] java.lang.Object[] int
new java.lang.StringBuilder
dup
ldc "The "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 1
iload 10
iconst_1
isub
aaload
invokestatic freemarker.template.utility.StringUtil.jQuote:(Ljava/lang/String;)Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
StackMap locals: freemarker.template.TemplateSequenceModel java.lang.String[] int java.util.ArrayList int int java.util.Comparator int freemarker.template.TemplateModel freemarker.template.TemplateModel int java.lang.ClassCastException
StackMap stack: new 18 new 18 java.lang.Object[] java.lang.Object[] int java.lang.String
23: aastore
dup
iconst_2
24: ldc " subvariable is not a hash, so ?sort_by "
aastore
dup
iconst_3
25: ldc "can't proceed with getting the "
aastore
dup
iconst_4
26: new freemarker.core._DelayedJQuote
dup
aload 1
iload 10
aaload
invokespecial freemarker.core._DelayedJQuote.<init>:(Ljava/lang/Object;)V
aastore
dup
iconst_5
27: ldc " subvariable."
28: aastore
invokespecial freemarker.core._TemplateModelException.<init>:([Ljava/lang/Object;)V
athrow
29: StackMap locals:
StackMap stack:
aload 11
athrow
end local 11 30: StackMap locals:
StackMap stack:
aload 9
ifnonnull 35
31: new freemarker.core._TemplateModelException
dup
iconst_3
anewarray java.lang.Object
dup
iconst_0
32: iload 4
iload 7
invokestatic freemarker.core.BuiltInsForSequences$sortBI.startErrorMessage:(II)[Ljava/lang/Object;
aastore
dup
iconst_1
33: new java.lang.StringBuilder
dup
ldc "The "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 1
iload 10
aaload
invokestatic freemarker.template.utility.StringUtil.jQuote:(Ljava/lang/String;)Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
aastore
dup
iconst_2
ldc " subvariable was null or missing."
34: aastore
invokespecial freemarker.core._TemplateModelException.<init>:([Ljava/lang/Object;)V
athrow
35: StackMap locals:
StackMap stack:
iinc 10 1
StackMap locals:
StackMap stack:
36: iload 10
iload 4
if_icmplt 14
end local 10 37: iload 5
ifne 63
38: aload 9
instanceof freemarker.template.TemplateScalarModel
ifeq 44
39: iconst_1
istore 5
40: new freemarker.core.BuiltInsForSequences$sortBI$LexicalKVPComparator
dup
41: invokestatic freemarker.core.Environment.getCurrentEnvironment:()Lfreemarker/core/Environment;
invokevirtual freemarker.core.Environment.getCollator:()Ljava/text/Collator;
42: invokespecial freemarker.core.BuiltInsForSequences$sortBI$LexicalKVPComparator.<init>:(Ljava/text/Collator;)V
astore 6
43: goto 63
StackMap locals:
StackMap stack:
44: aload 9
instanceof freemarker.template.TemplateNumberModel
ifeq 51
45: iconst_2
istore 5
46: new freemarker.core.BuiltInsForSequences$sortBI$NumericalKVPComparator
dup
47: invokestatic freemarker.core.Environment.getCurrentEnvironment:()Lfreemarker/core/Environment;
48: invokevirtual freemarker.core.Environment.getArithmeticEngine:()Lfreemarker/core/ArithmeticEngine;
49: invokespecial freemarker.core.BuiltInsForSequences$sortBI$NumericalKVPComparator.<init>:(Lfreemarker/core/ArithmeticEngine;)V
astore 6
50: goto 63
StackMap locals:
StackMap stack:
51: aload 9
instanceof freemarker.template.TemplateDateModel
ifeq 55
52: iconst_3
istore 5
53: new freemarker.core.BuiltInsForSequences$sortBI$DateKVPComparator
dup
invokespecial freemarker.core.BuiltInsForSequences$sortBI$DateKVPComparator.<init>:()V
astore 6
54: goto 63
StackMap locals:
StackMap stack:
55: aload 9
instanceof freemarker.template.TemplateBooleanModel
ifeq 59
56: iconst_4
istore 5
57: new freemarker.core.BuiltInsForSequences$sortBI$BooleanKVPComparator
dup
invokespecial freemarker.core.BuiltInsForSequences$sortBI$BooleanKVPComparator.<init>:()V
astore 6
58: goto 63
59: StackMap locals:
StackMap stack:
new freemarker.core._TemplateModelException
dup
iconst_2
anewarray java.lang.Object
dup
iconst_0
60: iload 4
iload 7
invokestatic freemarker.core.BuiltInsForSequences$sortBI.startErrorMessage:(II)[Ljava/lang/Object;
aastore
dup
iconst_1
61: ldc "Values used for sorting must be numbers, strings, date/times or booleans."
62: aastore
invokespecial freemarker.core._TemplateModelException.<init>:([Ljava/lang/Object;)V
athrow
63: StackMap locals:
StackMap stack:
iload 5
tableswitch { // 1 - 4
1: 64
2: 74
3: 83
4: 92
default: 101
}
64: StackMap locals:
StackMap stack:
aload 3
new freemarker.core.BuiltInsForSequences$sortBI$KVP
dup
65: aload 9
checkcast freemarker.template.TemplateScalarModel
invokeinterface freemarker.template.TemplateScalarModel.getAsString:()Ljava/lang/String;
66: aload 8
invokespecial freemarker.core.BuiltInsForSequences$sortBI$KVP.<init>:(Ljava/lang/Object;Ljava/lang/Object;)V
67: invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
pop
68: goto 102
StackMap locals:
StackMap stack: java.lang.ClassCastException
69: astore 10
start local 10 70: aload 9
instanceof freemarker.template.TemplateScalarModel
ifne 73
71: iload 4
ldc "string"
ldc "strings"
iload 7
aload 9
72: invokestatic freemarker.core.BuiltInsForSequences$sortBI.newInconsistentSortKeyTypeException:(ILjava/lang/String;Ljava/lang/String;ILfreemarker/template/TemplateModel;)Lfreemarker/template/TemplateModelException;
athrow
73: StackMap locals: java.lang.ClassCastException
StackMap stack:
aload 10
athrow
end local 10 74: StackMap locals:
StackMap stack:
aload 3
new freemarker.core.BuiltInsForSequences$sortBI$KVP
dup
75: aload 9
checkcast freemarker.template.TemplateNumberModel
invokeinterface freemarker.template.TemplateNumberModel.getAsNumber:()Ljava/lang/Number;
76: aload 8
invokespecial freemarker.core.BuiltInsForSequences$sortBI$KVP.<init>:(Ljava/lang/Object;Ljava/lang/Object;)V
77: invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
pop
78: goto 102
StackMap locals:
StackMap stack: java.lang.ClassCastException
79: pop
80: aload 9
instanceof freemarker.template.TemplateNumberModel
ifne 102
81: iload 4
ldc "number"
ldc "numbers"
iload 7
aload 9
82: invokestatic freemarker.core.BuiltInsForSequences$sortBI.newInconsistentSortKeyTypeException:(ILjava/lang/String;Ljava/lang/String;ILfreemarker/template/TemplateModel;)Lfreemarker/template/TemplateModelException;
athrow
83: StackMap locals:
StackMap stack:
aload 3
new freemarker.core.BuiltInsForSequences$sortBI$KVP
dup
84: aload 9
checkcast freemarker.template.TemplateDateModel
invokeinterface freemarker.template.TemplateDateModel.getAsDate:()Ljava/util/Date;
85: aload 8
invokespecial freemarker.core.BuiltInsForSequences$sortBI$KVP.<init>:(Ljava/lang/Object;Ljava/lang/Object;)V
86: invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
pop
87: goto 102
StackMap locals:
StackMap stack: java.lang.ClassCastException
88: pop
89: aload 9
instanceof freemarker.template.TemplateDateModel
ifne 102
90: iload 4
ldc "date/time"
ldc "date/times"
iload 7
aload 9
91: invokestatic freemarker.core.BuiltInsForSequences$sortBI.newInconsistentSortKeyTypeException:(ILjava/lang/String;Ljava/lang/String;ILfreemarker/template/TemplateModel;)Lfreemarker/template/TemplateModelException;
athrow
92: StackMap locals:
StackMap stack:
aload 3
new freemarker.core.BuiltInsForSequences$sortBI$KVP
dup
93: aload 9
checkcast freemarker.template.TemplateBooleanModel
invokeinterface freemarker.template.TemplateBooleanModel.getAsBoolean:()Z
invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
94: aload 8
invokespecial freemarker.core.BuiltInsForSequences$sortBI$KVP.<init>:(Ljava/lang/Object;Ljava/lang/Object;)V
95: invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
pop
96: goto 102
StackMap locals:
StackMap stack: java.lang.ClassCastException
97: pop
98: aload 9
instanceof freemarker.template.TemplateBooleanModel
ifne 102
99: iload 4
ldc "boolean"
ldc "booleans"
iload 7
aload 9
100: invokestatic freemarker.core.BuiltInsForSequences$sortBI.newInconsistentSortKeyTypeException:(ILjava/lang/String;Ljava/lang/String;ILfreemarker/template/TemplateModel;)Lfreemarker/template/TemplateModelException;
athrow
101: StackMap locals:
StackMap stack:
new freemarker.core.BugException
dup
ldc "Unexpected key type"
invokespecial freemarker.core.BugException.<init>:(Ljava/lang/String;)V
athrow
end local 9 end local 8 102: StackMap locals:
StackMap stack:
iinc 7 1
StackMap locals:
StackMap stack:
103: iload 7
iload 2
if_icmplt 10
end local 7 104: aload 3
aload 6
invokestatic java.util.Collections.sort:(Ljava/util/List;Ljava/util/Comparator;)V
105: goto 110
StackMap locals: freemarker.template.TemplateSequenceModel java.lang.String[] int java.util.ArrayList int int java.util.Comparator
StackMap stack: java.lang.Exception
106: astore 7
start local 7 107: new freemarker.core._TemplateModelException
dup
aload 7
iconst_2
anewarray java.lang.Object
dup
iconst_0
108: iload 4
invokestatic freemarker.core.BuiltInsForSequences$sortBI.startErrorMessage:(I)[Ljava/lang/Object;
aastore
dup
iconst_1
new java.lang.StringBuilder
dup
ldc "Unexpected error while sorting:"
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 7
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
109: aastore
invokespecial freemarker.core._TemplateModelException.<init>:(Ljava/lang/Throwable;[Ljava/lang/Object;)V
athrow
end local 7 110: StackMap locals:
StackMap stack:
iconst_0
istore 7
start local 7 111: goto 114
112: StackMap locals: int
StackMap stack:
aload 3
iload 7
aload 3
iload 7
invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
checkcast freemarker.core.BuiltInsForSequences$sortBI$KVP
getfield freemarker.core.BuiltInsForSequences$sortBI$KVP.value:Ljava/lang/Object;
invokevirtual java.util.ArrayList.set:(ILjava/lang/Object;)Ljava/lang/Object;
pop
113: iinc 7 1
StackMap locals:
StackMap stack:
114: iload 7
iload 2
if_icmplt 112
end local 7 115: new freemarker.template.TemplateModelListSequence
dup
aload 3
invokespecial freemarker.template.TemplateModelListSequence.<init>:(Ljava/util/List;)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 116 0 seq Lfreemarker/template/TemplateSequenceModel;
0 116 1 keyNames [Ljava/lang/String;
1 116 2 ln I
3 116 3 res Ljava/util/ArrayList;
6 116 4 keyNamesLn I
7 116 5 keyType I
8 116 6 keyComparator Ljava/util/Comparator;
9 104 7 i I
11 102 8 item Lfreemarker/template/TemplateModel;
12 102 9 key Lfreemarker/template/TemplateModel;
13 37 10 keyNameI I
17 30 11 e Ljava/lang/ClassCastException;
70 74 10 e Ljava/lang/ClassCastException;
107 110 7 exc Ljava/lang/Exception;
111 115 7 i I
Exception table:
from to target type
14 15 16 Class java.lang.ClassCastException
64 68 69 Class java.lang.ClassCastException
74 78 79 Class java.lang.ClassCastException
83 87 88 Class java.lang.ClassCastException
92 96 97 Class java.lang.ClassCastException
104 105 106 Class java.lang.Exception
Exceptions:
throws freemarker.template.TemplateModelException
MethodParameters:
Name Flags
seq
keyNames
static java.lang.Object[] startErrorMessage(int);
descriptor: (I)[Ljava/lang/Object;
flags: (0x0008) ACC_STATIC
Code:
stack=4, locals=1, args_size=1
start local 0 0: iconst_2
anewarray java.lang.Object
dup
iconst_0
iload 0
ifne 1
ldc "?sort"
goto 2
StackMap locals: int
StackMap stack: java.lang.Object[] java.lang.Object[] int
1: ldc "?sort_by(...)"
StackMap locals: int
StackMap stack: java.lang.Object[] java.lang.Object[] int java.lang.String
2: aastore
dup
iconst_1
ldc " failed: "
aastore
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 keyNamesLn I
MethodParameters:
Name Flags
keyNamesLn
static java.lang.Object[] startErrorMessage(int, int);
descriptor: (II)[Ljava/lang/Object;
flags: (0x0008) ACC_STATIC
Code:
stack=4, locals=2, args_size=2
start local 0 start local 1 0: iconst_4
anewarray java.lang.Object
dup
iconst_0
1: iload 0
ifne 2
ldc "?sort"
goto 3
StackMap locals: int int
StackMap stack: java.lang.Object[] java.lang.Object[] int
2: ldc "?sort_by(...)"
StackMap locals: int int
StackMap stack: java.lang.Object[] java.lang.Object[] int java.lang.String
3: aastore
dup
iconst_1
4: ldc " failed at sequence index "
aastore
dup
iconst_2
iload 1
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
aastore
dup
iconst_3
5: iload 1
ifne 6
ldc ": "
goto 7
StackMap locals: int int
StackMap stack: java.lang.Object[] java.lang.Object[] int
6: ldc " (0-based): "
StackMap locals: int int
StackMap stack: java.lang.Object[] java.lang.Object[] int java.lang.String
7: aastore
8: areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 keyNamesLn I
0 9 1 index I
MethodParameters:
Name Flags
keyNamesLn
index
freemarker.template.TemplateModel calculateResult(freemarker.template.TemplateSequenceModel);
descriptor: (Lfreemarker/template/TemplateSequenceModel;)Lfreemarker/template/TemplateModel;
flags: (0x0000)
Code:
stack=2, locals=2, args_size=2
start local 0 start local 1 0: aload 1
aconst_null
invokestatic freemarker.core.BuiltInsForSequences$sortBI.sort:(Lfreemarker/template/TemplateSequenceModel;[Ljava/lang/String;)Lfreemarker/template/TemplateSequenceModel;
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lfreemarker/core/BuiltInsForSequences$sortBI;
0 1 1 seq Lfreemarker/template/TemplateSequenceModel;
Exceptions:
throws freemarker.template.TemplateModelException
MethodParameters:
Name Flags
seq
}
SourceFile: "BuiltInsForSequences.java"
NestHost: freemarker.core.BuiltInsForSequences
InnerClasses:
sortBI = freemarker.core.BuiltInsForSequences$sortBI of freemarker.core.BuiltInsForSequences
private BooleanKVPComparator = freemarker.core.BuiltInsForSequences$sortBI$BooleanKVPComparator of freemarker.core.BuiltInsForSequences$sortBI
private DateKVPComparator = freemarker.core.BuiltInsForSequences$sortBI$DateKVPComparator of freemarker.core.BuiltInsForSequences$sortBI
private KVP = freemarker.core.BuiltInsForSequences$sortBI$KVP of freemarker.core.BuiltInsForSequences$sortBI
private LexicalKVPComparator = freemarker.core.BuiltInsForSequences$sortBI$LexicalKVPComparator of freemarker.core.BuiltInsForSequences$sortBI
private NumericalKVPComparator = freemarker.core.BuiltInsForSequences$sortBI$NumericalKVPComparator of freemarker.core.BuiltInsForSequences$sortBI