27
27
import static org .inferred .freebuilder .processor .model .ModelUtils .erasesToAnyOf ;
28
28
import static org .inferred .freebuilder .processor .model .ModelUtils .maybeDeclared ;
29
29
import static org .inferred .freebuilder .processor .model .ModelUtils .maybeUnbox ;
30
+ import static org .inferred .freebuilder .processor .model .ModelUtils .override ;
30
31
import static org .inferred .freebuilder .processor .model .ModelUtils .overrides ;
31
32
import static org .inferred .freebuilder .processor .model .ModelUtils .upperBound ;
32
33
import static org .inferred .freebuilder .processor .property .MergeAction .appendingToCollections ;
33
34
import static org .inferred .freebuilder .processor .source .FunctionalType .consumer ;
34
35
import static org .inferred .freebuilder .processor .source .FunctionalType .functionalTypeAcceptedByMethod ;
35
36
37
+ import com .google .common .base .Preconditions ;
38
+ import com .google .common .collect .BiMap ;
39
+ import com .google .common .collect .HashBiMap ;
40
+ import com .google .common .collect .ImmutableBiMap ;
41
+ import com .google .common .collect .ImmutableSet ;
42
+ import com .google .common .collect .Maps ;
43
+
44
+ import org .inferred .freebuilder .processor .Datatype ;
45
+ import org .inferred .freebuilder .processor .Declarations ;
46
+ import org .inferred .freebuilder .processor .excerpt .CheckedBiMap ;
47
+ import org .inferred .freebuilder .processor .source .Excerpt ;
48
+ import org .inferred .freebuilder .processor .source .FunctionalType ;
49
+ import org .inferred .freebuilder .processor .source .SourceBuilder ;
50
+ import org .inferred .freebuilder .processor .source .Type ;
51
+ import org .inferred .freebuilder .processor .source .Variable ;
52
+
36
53
import java .util .Collection ;
37
54
import java .util .Map ;
38
55
import java .util .Objects ;
39
56
import java .util .Optional ;
40
57
import java .util .Set ;
41
58
59
+ import javax .lang .model .element .ExecutableElement ;
42
60
import javax .lang .model .element .TypeElement ;
43
61
import javax .lang .model .type .DeclaredType ;
44
62
import javax .lang .model .type .TypeMirror ;
45
63
import javax .lang .model .util .Elements ;
46
64
import javax .lang .model .util .Types ;
47
-
48
- import org .inferred .freebuilder .processor .Datatype ;
49
- import org .inferred .freebuilder .processor .Declarations ;
50
- import org .inferred .freebuilder .processor .excerpt .CheckedBiMap ;
51
- import org .inferred .freebuilder .processor .source .Excerpt ;
52
- import org .inferred .freebuilder .processor .source .FunctionalType ;
53
- import org .inferred .freebuilder .processor .source .SourceBuilder ;
54
- import org .inferred .freebuilder .processor .source .Type ;
55
- import org .inferred .freebuilder .processor .source .Variable ;
56
-
57
- import com .google .common .base .Preconditions ;
58
- import com .google .common .collect .BiMap ;
59
- import com .google .common .collect .HashBiMap ;
60
- import com .google .common .collect .ImmutableBiMap ;
61
- import com .google .common .collect .ImmutableSet ;
62
- import com .google .common .collect .Maps ;
65
+ import javax .tools .Diagnostic .Kind ;
63
66
64
67
/**
65
68
* {@link PropertyCodeGenerator} providing fluent methods for {@link BiMap} properties.
@@ -79,8 +82,21 @@ public Optional<BiMapProperty> create(Config config) {
79
82
TypeMirror valueType = upperBound (config .getElements (), type .getTypeArguments ().get (1 ));
80
83
Optional <TypeMirror > unboxedKeyType = maybeUnbox (keyType , config .getTypes ());
81
84
Optional <TypeMirror > unboxedValueType = maybeUnbox (valueType , config .getTypes ());
85
+ Optional <ExecutableElement > putMethodOverride = putMethodOverride (
86
+ config , unboxedKeyType .orElse (keyType ), unboxedValueType .orElse (valueType ));
82
87
boolean overridesForcePutMethod = hasForcePutMethodOverride (
83
88
config , unboxedKeyType .orElse (keyType ), unboxedValueType .orElse (valueType ));
89
+
90
+ if (putMethodOverride .isPresent () && !overridesForcePutMethod ) {
91
+ config .getEnvironment ().getMessager ().printMessage (
92
+ Kind .ERROR ,
93
+ "Overriding "
94
+ + putMethod (property )
95
+ + " will not correctly validate all inputs. Please override "
96
+ + forcePutMethod (property )
97
+ + "." ,
98
+ putMethodOverride .get ());
99
+ }
84
100
85
101
FunctionalType mutatorType = functionalTypeAcceptedByMethod (
86
102
config .getBuilder (),
@@ -100,6 +116,16 @@ public Optional<BiMapProperty> create(Config config) {
100
116
mutatorType ));
101
117
}
102
118
119
+ private static Optional <ExecutableElement > putMethodOverride (
120
+ Config config , TypeMirror keyType , TypeMirror valueType ) {
121
+ return override (
122
+ config .getBuilder (),
123
+ config .getTypes (),
124
+ putMethod (config .getProperty ()),
125
+ keyType ,
126
+ valueType );
127
+ }
128
+
103
129
private static boolean hasForcePutMethodOverride (
104
130
Config config , TypeMirror keyType , TypeMirror valueType ) {
105
131
return overrides (
0 commit comments