Skip to content

Commit 9b53188

Browse files
committed
Java: Improve tests and allow spurious models.
1 parent 91aa75d commit 9b53188

File tree

2 files changed

+20
-20
lines changed

2 files changed

+20
-20
lines changed

java/ql/test/utils/model-generator/typebasedflow/CaptureTypeBasedSummaryModels.ql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ import java
22
import utils.modelgenerator.internal.CaptureTypeBasedSummaryModels
33

44
private string expects() {
5-
exists(Javadoc doc | doc.getChild(0).toString().regexpCapture(" *MaD=(.*)", 1) = result)
5+
exists(Javadoc doc |
6+
doc.getChild(0).toString().regexpCapture(" *(SPURIOUS-)?MaD=(.*)", 2) = result
7+
)
68
}
79

810
private string flows() { exists(TypeBasedFlowTargetApi api | result = captureFlow(api)) }

java/ql/test/utils/model-generator/typebasedflow/p/Stream.java

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,11 @@ public Optional<T> findFirst() {
6767
return null;
6868
}
6969

70-
// public <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends
71-
// R>> mapper) {
72-
// return null;
73-
// }
70+
// MaD=p;Stream;true;flatMap;(Function);;Argument[0].ReturnValue.Element;ReturnValue.Element;value;generated
71+
// MaD=p;Stream;true;flatMap;(Function);;Argument[-1].Element;Argument[0].Parameter[0];value;generated
72+
public <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) {
73+
return null;
74+
}
7475

7576
// MaD=p;Stream;true;flatMapToDouble;(Function);;Argument[-1].Element;Argument[0].Parameter[0];value;generated
7677
public DoubleStream flatMapToDouble(Function<? super T, ? extends DoubleStream> mapper) {
@@ -100,8 +101,6 @@ public static <T> Stream<T> generate(Supplier<T> s) {
100101
return null;
101102
}
102103

103-
// Model generator adds a couple of extra models, which can't be
104-
// dismissed based on the type information.
105104
// MaD=p;Stream;true;iterate;(Object,UnaryOperator);;Argument[0];Argument[1].Parameter[0];value;generated
106105
// MaD=p;Stream;true;iterate;(Object,UnaryOperator);;Argument[0];ReturnValue.Element;value;generated
107106
// MaD=p;Stream;true;iterate;(Object,UnaryOperator);;Argument[1].ReturnValue;Argument[1].Parameter[0];value;generated
@@ -155,10 +154,10 @@ public boolean noneMatch(Predicate<? super T> predicate) {
155154
return false;
156155
}
157156

158-
// Issue with model generator. ... is not supported.
159-
// public static <T> Stream<T> of(T... t) {
160-
// return null;
161-
// }
157+
// MaD=p;Stream;true;of;(Object[]);;Argument[0].ArrayElement;ReturnValue.Element;value;generated
158+
public static <T> Stream<T> of(T... t) {
159+
return null;
160+
}
162161

163162
// MaD=p;Stream;true;of;(Object);;Argument[0];ReturnValue.Element;value;generated
164163
public static <T> Stream<T> of(T t) {
@@ -171,32 +170,30 @@ public Stream<T> peek(Consumer<? super T> action) {
171170
return null;
172171
}
173172

174-
// Model generator yields a couple of extra results as models are generated for
175-
// writing to the stream.
173+
// The generated models are only partially correct.
176174
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[-1].Element;Argument[0].Parameter[0];value;generated
177175
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[-1].Element;Argument[0].Parameter[1];value;generated
178176
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[-1].Element;ReturnValue.SyntheticField[ArgType0];value;generated
179-
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;Argument[-1].Element;value;generated
180177
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;Argument[0].Parameter[0];value;generated
181178
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;Argument[0].Parameter[1];value;generated
182179
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;ReturnValue.SyntheticField[ArgType0];value;generated
180+
// SPURIOUS-MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;Argument[-1].Element;value;generated
183181
public Optional<T> reduce(BinaryOperator<T> accumulator) {
184182
return null;
185183
}
186184

187-
// Model generator yields a couple of extra results as models are generated for
188-
// writing to the stream.
185+
// The generated models are only partially correct.
189186
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[-1].Element;Argument[1].Parameter[0];value;generated
190187
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[-1].Element;Argument[1].Parameter[1];value;generated
191-
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[-1].Element;ReturnValue;value;generated
192-
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];Argument[-1].Element;value;generated
193188
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];Argument[1].Parameter[0];value;generated
194189
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];Argument[1].Parameter[1];value;generated
195190
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];ReturnValue;value;generated
196-
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;Argument[-1].Element;value;generated
197191
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;Argument[1].Parameter[0];value;generated
198192
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;Argument[1].Parameter[1];value;generated
199193
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;ReturnValue;value;generated
194+
// SPURIOUS-MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[-1].Element;ReturnValue;value;generated
195+
// SPURIOUS-MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];Argument[-1].Element;value;generated
196+
// SPURIOUS-MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;Argument[-1].Element;value;generated
200197
public T reduce(T identity, BinaryOperator<T> accumulator) {
201198
return null;
202199
}
@@ -241,7 +238,8 @@ public Object[] toArray() {
241238
return null;
242239
}
243240

244-
// Models will only be partial correct as there is no mentioning of the type T.
241+
// The generated result is only partially correct as there is no mentioning of
242+
// the type T in the method definition.
245243
// MaD=p;Stream;true;toArray;(IntFunction);;Argument[0].ReturnValue.ArrayElement;ReturnValue.ArrayElement;value;generated
246244
public <A> A[] toArray(IntFunction<A[]> generator) {
247245
return null;

0 commit comments

Comments
 (0)