Skip to content

Commit 0fdb754

Browse files
committed
Fix PR 1.2 — Restore checkNotNull guards in parsing-commons/ParserUtils
These guards were present in target-rule-module but were lost when ParserUtils was extracted to parsing-commons before those commits landed. Uses Objects.requireNonNull (no Guava dependency in parsing-commons). AI-Session-Id: 8708ddbc-41d6-47c9-bcb7-9d209ee25aeb AI-Tool: claude-code AI-Model: unknown
1 parent 7ac5ee4 commit 0fdb754

1 file changed

Lines changed: 36 additions & 6 deletions

File tree

parsing-commons/src/main/java/io/split/engine/experiments/ParserUtils.java

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.split.engine.experiments;
22

33
import io.split.client.dtos.DataType;
4+
import io.split.client.dtos.MatcherCombiner;
45
import io.split.client.dtos.MatcherType;
56
import io.split.client.dtos.Partition;
67
import io.split.client.dtos.MatcherGroup;
@@ -35,6 +36,7 @@
3536

3637
import java.util.ArrayList;
3738
import java.util.List;
39+
import java.util.Objects;
3840

3941
public final class ParserUtils {
4042

@@ -79,99 +81,127 @@ public static CombiningMatcher toMatcher(MatcherGroup matcherGroup) {
7981
toCombine.add(toMatcher(matcher));
8082
}
8183

82-
return new CombiningMatcher(CombiningMatcher.Combiner.AND, toCombine);
84+
return new CombiningMatcher(toCombiner(matcherGroup.combiner), toCombine);
8385
}
8486

8587

8688
private static io.split.rules.model.DataType toRulesDataType(DataType dt) {
8789
return io.split.rules.model.DataType.valueOf(dt.name());
8890
}
8991

92+
private static CombiningMatcher.Combiner toCombiner(MatcherCombiner combiner) {
93+
return CombiningMatcher.Combiner.valueOf(combiner.name());
94+
}
95+
9096
public static AttributeMatcher toMatcher(Matcher matcher) {
9197
io.split.rules.matchers.Matcher delegate = null;
9298
switch (matcher.matcherType) {
9399
case ALL_KEYS:
94100
delegate = new AllKeysMatcher();
95101
break;
96102
case IN_SEGMENT:
103+
Objects.requireNonNull(matcher.userDefinedSegmentMatcherData);
97104
String segmentName = matcher.userDefinedSegmentMatcherData.segmentName;
98105
delegate = new UserDefinedSegmentMatcher(segmentName);
99106
break;
100107
case WHITELIST:
108+
Objects.requireNonNull(matcher.whitelistMatcherData);
101109
delegate = new WhitelistMatcher(matcher.whitelistMatcherData.whitelist);
102110
break;
103111
case EQUAL_TO:
112+
Objects.requireNonNull(matcher.unaryNumericMatcherData);
104113
delegate = new EqualToMatcher(matcher.unaryNumericMatcherData.value, toRulesDataType(matcher.unaryNumericMatcherData.dataType));
105114
break;
106115
case GREATER_THAN_OR_EQUAL_TO:
116+
Objects.requireNonNull(matcher.unaryNumericMatcherData);
107117
delegate = new GreaterThanOrEqualToMatcher(
108118
matcher.unaryNumericMatcherData.value, toRulesDataType(matcher.unaryNumericMatcherData.dataType));
109119
break;
110120
case LESS_THAN_OR_EQUAL_TO:
121+
Objects.requireNonNull(matcher.unaryNumericMatcherData);
111122
delegate = new LessThanOrEqualToMatcher(
112123
matcher.unaryNumericMatcherData.value, toRulesDataType(matcher.unaryNumericMatcherData.dataType));
113124
break;
114125
case BETWEEN:
126+
Objects.requireNonNull(matcher.betweenMatcherData);
115127
delegate = new BetweenMatcher(matcher.betweenMatcherData.start,
116128
matcher.betweenMatcherData.end, toRulesDataType(matcher.betweenMatcherData.dataType));
117129
break;
118130
case EQUAL_TO_SET:
131+
Objects.requireNonNull(matcher.whitelistMatcherData);
119132
delegate = new EqualToSetMatcher(matcher.whitelistMatcherData.whitelist);
120133
break;
121134
case PART_OF_SET:
135+
Objects.requireNonNull(matcher.whitelistMatcherData);
122136
delegate = new PartOfSetMatcher(matcher.whitelistMatcherData.whitelist);
123137
break;
124138
case CONTAINS_ALL_OF_SET:
139+
Objects.requireNonNull(matcher.whitelistMatcherData);
125140
delegate = new ContainsAllOfSetMatcher(matcher.whitelistMatcherData.whitelist);
126141
break;
127142
case CONTAINS_ANY_OF_SET:
143+
Objects.requireNonNull(matcher.whitelistMatcherData);
128144
delegate = new ContainsAnyOfSetMatcher(matcher.whitelistMatcherData.whitelist);
129145
break;
130146
case STARTS_WITH:
147+
Objects.requireNonNull(matcher.whitelistMatcherData);
131148
delegate = new StartsWithAnyOfMatcher(matcher.whitelistMatcherData.whitelist);
132149
break;
133150
case ENDS_WITH:
151+
Objects.requireNonNull(matcher.whitelistMatcherData);
134152
delegate = new EndsWithAnyOfMatcher(matcher.whitelistMatcherData.whitelist);
135153
break;
136154
case CONTAINS_STRING:
155+
Objects.requireNonNull(matcher.whitelistMatcherData);
137156
delegate = new ContainsAnyOfMatcher(matcher.whitelistMatcherData.whitelist);
138157
break;
139158
case MATCHES_STRING:
159+
Objects.requireNonNull(matcher.stringMatcherData);
140160
delegate = new RegularExpressionMatcher(matcher.stringMatcherData);
141161
break;
142162
case IN_SPLIT_TREATMENT:
143-
if (matcher.dependencyMatcherData == null) throw new NullPointerException(
144-
"MatcherType is " + matcher.matcherType + ". matcher.dependencyMatcherData() MUST NOT BE null");
163+
Objects.requireNonNull(matcher.dependencyMatcherData,
164+
"MatcherType is " + matcher.matcherType
165+
+ ". matcher.dependencyMatcherData() MUST NOT BE null");
145166
delegate = new DependencyMatcher(matcher.dependencyMatcherData.split, matcher.dependencyMatcherData.treatments);
146167
break;
147168
case EQUAL_TO_BOOLEAN:
148-
if (matcher.booleanMatcherData == null) throw new NullPointerException(
149-
"MatcherType is " + matcher.matcherType + ". matcher.booleanMatcherData() MUST NOT BE null");
169+
Objects.requireNonNull(matcher.booleanMatcherData,
170+
"MatcherType is " + matcher.matcherType
171+
+ ". matcher.booleanMatcherData() MUST NOT BE null");
150172
delegate = new BooleanMatcher(matcher.booleanMatcherData);
151173
break;
152174
case EQUAL_TO_SEMVER:
175+
Objects.requireNonNull(matcher.stringMatcherData, "stringMatcherData is required for EQUAL_TO_SEMVER matcher type");
153176
delegate = new EqualToSemverMatcher(matcher.stringMatcherData);
154177
break;
155178
case GREATER_THAN_OR_EQUAL_TO_SEMVER:
179+
Objects.requireNonNull(matcher.stringMatcherData, "stringMatcherData is required for GREATER_THAN_OR_EQUAL_TO_SEMVER matcher type");
156180
delegate = new GreaterThanOrEqualToSemverMatcher(matcher.stringMatcherData);
157181
break;
158182
case LESS_THAN_OR_EQUAL_TO_SEMVER:
183+
Objects.requireNonNull(matcher.stringMatcherData, "stringMatcherData is required for LESS_THAN_OR_EQUAL_SEMVER matcher type");
159184
delegate = new LessThanOrEqualToSemverMatcher(matcher.stringMatcherData);
160185
break;
161186
case IN_LIST_SEMVER:
187+
Objects.requireNonNull(matcher.whitelistMatcherData, "whitelistMatcherData is required for IN_LIST_SEMVER matcher type");
162188
delegate = new InListSemverMatcher(matcher.whitelistMatcherData.whitelist);
163189
break;
164190
case BETWEEN_SEMVER:
191+
Objects.requireNonNull(matcher.betweenStringMatcherData, "betweenStringMatcherData is required for BETWEEN_SEMVER matcher type");
165192
delegate = new BetweenSemverMatcher(matcher.betweenStringMatcherData.start, matcher.betweenStringMatcherData.end);
166193
break;
167194
case IN_RULE_BASED_SEGMENT:
195+
Objects.requireNonNull(matcher.userDefinedSegmentMatcherData);
168196
String ruleBasedSegmentName = matcher.userDefinedSegmentMatcherData.segmentName;
169197
delegate = new RuleBasedSegmentMatcher(ruleBasedSegmentName);
170198
break;
171199
default:
172200
throw new IllegalArgumentException("Unknown matcher type: " + matcher.matcherType);
173201
}
174202

203+
Objects.requireNonNull(delegate, "We were not able to create a matcher for: " + matcher.matcherType);
204+
175205
String attribute = null;
176206
if (matcher.keySelector != null && matcher.keySelector.attribute != null) {
177207
attribute = matcher.keySelector.attribute;
@@ -182,4 +212,4 @@ public static AttributeMatcher toMatcher(Matcher matcher) {
182212

183213
return new AttributeMatcher(attribute, delegate, negate);
184214
}
185-
}
215+
}

0 commit comments

Comments
 (0)