@@ -20,14 +20,14 @@ object ConverterCompiler {
20
20
.addModifiers(Modifier .PUBLIC )
21
21
22
22
val any = TypeVariableName .get(" ?" )
23
- val Origin = TypeVariableName .get(" Origin " )
24
- val Target = TypeVariableName .get(" Target " )
23
+ val OriginT = TypeVariableName .get(" OriginT " )
24
+ val TargetT = TypeVariableName .get(" TargetT " )
25
25
val anyClass = ParameterizedTypeName .get(ClassName .get(Class ::class .java), any)
26
26
val anyConverter = ParameterizedTypeName .get(ClassName .get(Converter ::class .java), any, any)
27
27
val extendsConverterClass = ParameterizedTypeName .get(ClassName .get(Class ::class .java),
28
28
WildcardTypeName .subtypeOf(ParameterizedTypeName .get(ClassName .get(Converter ::class .java), any, any)))
29
- val originClass = ParameterizedTypeName .get(ClassName .get(Class ::class .java), Origin )
30
- val knownConverter = ParameterizedTypeName .get(ClassName .get(Converter ::class .java), Origin , Target )
29
+ val originClass = ParameterizedTypeName .get(ClassName .get(Class ::class .java), OriginT )
30
+ val knownConverter = ParameterizedTypeName .get(ClassName .get(Converter ::class .java), OriginT , TargetT )
31
31
32
32
FieldSpec .builder(
33
33
ParameterizedTypeName .get(ClassName .get(Map ::class .java), anyClass, anyConverter),
@@ -43,54 +43,55 @@ object ConverterCompiler {
43
43
impl.addField(it.build())
44
44
}
45
45
46
+ val originClazzParam = ParameterSpec .builder(originClass, " clazz" ).build()
46
47
MethodSpec .methodBuilder(" getConverter" )
47
48
.addModifiers(Modifier .PRIVATE , Modifier .STATIC )
48
- .addTypeVariables(listOf (Origin , Target ))
49
- .addParameter(ParameterSpec .builder(originClass, " clazz " ).build() )
50
- .beginControlFlow(" if (!\$ T.registry.containsKey(clazz ))" , ExPreferenceProcessor .ExConverters )
51
- .addStatement(" throw new \$ T(\" Cannot find converter for \" + clazz + \" , " +
52
- " have you created its converter and added @ExConverter?\" )" , IllegalStateException ::class .java)
49
+ .addTypeVariables(listOf (OriginT , TargetT ))
50
+ .addParameter(originClazzParam )
51
+ .beginControlFlow(" if (!\$ T.registry.containsKey(\$ N ))" , ExPreferenceProcessor .ExConverters , originClazzParam )
52
+ .addStatement(" throw new \$ T(\" Cannot find converter for \" + \$ N + \" , " +
53
+ " have you created its converter and added @ExConverter?\" )" , IllegalStateException ::class .java, originClazzParam )
53
54
.endControlFlow()
54
- .beginControlFlow(" if (!\$ T.converters.containsKey(clazz ))" , ExPreferenceProcessor .ExConverters )
55
+ .beginControlFlow(" if (!\$ T.converters.containsKey(\$ N ))" , ExPreferenceProcessor .ExConverters , originClazzParam )
55
56
.beginControlFlow(" try" )
56
- .addStatement(" \$ T.converters.put(clazz, \$ T.registry.get(clazz ).newInstance())" ,
57
- ExPreferenceProcessor .ExConverters , ExPreferenceProcessor .ExConverters )
57
+ .addStatement(" \$ T.converters.put(clazz, \$ T.registry.get(\$ N ).newInstance())" ,
58
+ ExPreferenceProcessor .ExConverters , ExPreferenceProcessor .ExConverters , originClazzParam )
58
59
.nextControlFlow(" catch (IllegalAccessException | InstantiationException e)" )
59
- .addStatement(" throw new \$ T(\" Failed to create instance for \" + \$ T.registry.get(clazz ) + \" !\" )" ,
60
- RuntimeException ::class .java, ExPreferenceProcessor .ExConverters )
60
+ .addStatement(" throw new \$ T(\" Failed to create instance for \" + \$ T.registry.get(\$ N ) + \" !\" )" ,
61
+ RuntimeException ::class .java, ExPreferenceProcessor .ExConverters , originClazzParam )
61
62
.endControlFlow()
62
63
.endControlFlow()
63
- .addStatement(" return (\$ T<\$ T, \$ T>) \$ T.converters.get(clazz )" ,
64
- Converter ::class .java, Origin , Target , ExPreferenceProcessor .ExConverters )
64
+ .addStatement(" return (\$ T<\$ T, \$ T>) \$ T.converters.get(\$ N )" ,
65
+ Converter ::class .java, OriginT , TargetT , ExPreferenceProcessor .ExConverters , originClazzParam )
65
66
.returns(knownConverter)
66
67
.let {
67
68
impl.addMethod(it.build())
68
69
}
69
70
70
71
MethodSpec .methodBuilder(" toPreference" )
71
72
.addModifiers(Modifier .PUBLIC , Modifier .STATIC )
72
- .addTypeVariables(listOf (Origin , Target ))
73
- .addParameter(ParameterSpec .builder(originClass, " clazz " ).build() )
74
- .addParameter(ParameterSpec .builder(Origin , " value" ).build())
75
- .returns(Target )
76
- .addStatement(" \$ T<\$ T, \$ T> converter = \$ T.getConverter(clazz )" ,
77
- Converter ::class .java, Origin , Target , ExPreferenceProcessor .ExConverters )
73
+ .addTypeVariables(listOf (OriginT , TargetT ))
74
+ .addParameter(originClazzParam )
75
+ .addParameter(ParameterSpec .builder(OriginT , " value" ).build())
76
+ .returns(TargetT )
77
+ .addStatement(" \$ T<\$ T, \$ T> converter = \$ T.getConverter(\$ N )" ,
78
+ Converter ::class .java, OriginT , TargetT , ExPreferenceProcessor .ExConverters , originClazzParam )
78
79
.addStatement(" return converter.toPreference(value)" ,
79
- Converter ::class .java, Origin , Target , ExPreferenceProcessor .ExConverters )
80
+ Converter ::class .java, OriginT , TargetT , ExPreferenceProcessor .ExConverters )
80
81
.let {
81
82
impl.addMethod(it.build())
82
83
}
83
84
84
85
MethodSpec .methodBuilder(" fromPreference" )
85
86
.addModifiers(Modifier .PUBLIC , Modifier .STATIC )
86
- .addTypeVariables(listOf (Origin , Target ))
87
- .addParameter(ParameterSpec .builder(originClass, " clazz " ).build() )
88
- .addParameter(ParameterSpec .builder(Target , " value" ).build())
89
- .returns(Origin )
90
- .addStatement(" \$ T<\$ T, \$ T> converter = \$ T.getConverter(clazz )" ,
91
- Converter ::class .java, Origin , Target , ExPreferenceProcessor .ExConverters )
87
+ .addTypeVariables(listOf (OriginT , TargetT ))
88
+ .addParameter(originClazzParam )
89
+ .addParameter(ParameterSpec .builder(TargetT , " value" ).build())
90
+ .returns(OriginT )
91
+ .addStatement(" \$ T<\$ T, \$ T> converter = \$ T.getConverter(\$ N )" ,
92
+ Converter ::class .java, OriginT , TargetT , ExPreferenceProcessor .ExConverters , originClazzParam )
92
93
.addStatement(" return converter.fromPreference(value)" ,
93
- Converter ::class .java, Origin , Target , ExPreferenceProcessor .ExConverters )
94
+ Converter ::class .java, OriginT , TargetT , ExPreferenceProcessor .ExConverters )
94
95
.let {
95
96
impl.addMethod(it.build())
96
97
}
0 commit comments