37
37
*/
38
38
public abstract class FunctionEncoder {
39
39
40
- private static FunctionEncoder DEFAULT_ENCODER ;
40
+ private static final FunctionEncoder FUNCTION_ENCODER ;
41
41
42
- private static final ServiceLoader <FunctionEncoderProvider > loader =
43
- ServiceLoader .load (FunctionEncoderProvider .class );
42
+ static {
43
+ ServiceLoader <FunctionEncoderProvider > loader =
44
+ ServiceLoader .load (FunctionEncoderProvider .class );
45
+ final Iterator <FunctionEncoderProvider > iterator = loader .iterator ();
46
+
47
+ FUNCTION_ENCODER =
48
+ iterator .hasNext () ? iterator .next ().get () : new DefaultFunctionEncoder ();
49
+ }
44
50
45
51
public static String encode (final Function function ) {
46
- return encoder () .encodeFunction (function );
52
+ return FUNCTION_ENCODER .encodeFunction (function );
47
53
}
48
54
49
55
/** Encode function when we know function method Id / Selector. */
50
56
public static String encode (final String methodId , final List <Type > parameters ) {
51
- return encoder () .encodeWithSelector (methodId , parameters );
57
+ return FUNCTION_ENCODER .encodeWithSelector (methodId , parameters );
52
58
}
53
59
54
60
public static String encodeConstructor (final List <Type > parameters ) {
55
- return encoder () .encodeParameters (parameters );
61
+ return FUNCTION_ENCODER .encodeParameters (parameters );
56
62
}
57
63
58
64
public static String encodeConstructorPacked (final List <Type > parameters ) {
59
- return encoder () .encodePackedParameters (parameters );
65
+ return FUNCTION_ENCODER .encodePackedParameters (parameters );
60
66
}
61
67
62
68
public static Function makeFunction (
63
- String fnname ,
69
+ String fnName ,
64
70
List <String > solidityInputTypes ,
65
71
List <Object > arguments ,
66
72
List <String > solidityOutputTypes )
@@ -75,7 +81,7 @@ public static Function makeFunction(
75
81
for (String st : solidityOutputTypes ) {
76
82
encodedOutput .add (makeTypeReference (st ));
77
83
}
78
- return new Function (fnname , encodedInput , encodedOutput );
84
+ return new Function (fnName , encodedInput , encodedOutput );
79
85
}
80
86
81
87
protected abstract String encodeFunction (Function function );
@@ -106,16 +112,4 @@ protected static String buildMethodId(final String methodSignature) {
106
112
final byte [] hash = Hash .sha3 (input );
107
113
return Numeric .toHexString (hash ).substring (0 , 10 );
108
114
}
109
-
110
- private static FunctionEncoder encoder () {
111
- final Iterator <FunctionEncoderProvider > iterator = loader .iterator ();
112
- return iterator .hasNext () ? iterator .next ().get () : defaultEncoder ();
113
- }
114
-
115
- private static FunctionEncoder defaultEncoder () {
116
- if (DEFAULT_ENCODER == null ) {
117
- DEFAULT_ENCODER = new DefaultFunctionEncoder ();
118
- }
119
- return DEFAULT_ENCODER ;
120
- }
121
115
}
0 commit comments