Skip to content

Commit de99fe8

Browse files
authored
Wrapper for basic Stream (#194)
1 parent 05f55b9 commit de99fe8

File tree

31 files changed

+2402
-128
lines changed

31 files changed

+2402
-128
lines changed

utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/impl/FieldIdStrategies.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class FieldIdReflectionStrategy(val fieldId: FieldId) : FieldIdStrategy {
4747
get() = Modifier.isStatic(fieldId.field.modifiers)
4848

4949
override val isSynthetic: Boolean
50-
get() = false
50+
get() = fieldId.field.isSynthetic
5151

5252
override val type: ClassId
5353
get() = fieldId.field.type.id
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.utbot.engine.overrides.collections;
2+
3+
import org.utbot.api.annotation.UtClassMock;
4+
import org.utbot.engine.overrides.stream.UtStream;
5+
6+
import java.util.stream.Stream;
7+
8+
@UtClassMock(target = java.util.Collection.class, internalUsage = true)
9+
public interface Collection<E> extends java.util.Collection<E> {
10+
@SuppressWarnings("unchecked")
11+
@Override
12+
default Stream<E> parallelStream() {
13+
Object[] data = toArray();
14+
int size = data.length;
15+
16+
return new UtStream<>((E[]) data, size);
17+
}
18+
19+
@SuppressWarnings("unchecked")
20+
@Override
21+
default Stream<E> stream() {
22+
Object[] data = toArray();
23+
int size = data.length;
24+
25+
return new UtStream<>((E[]) data, size);
26+
}
27+
}

utbot-framework/src/main/java/org/utbot/engine/overrides/collections/UtArrayList.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@
1313
import java.util.function.Consumer;
1414
import java.util.function.Predicate;
1515
import java.util.function.UnaryOperator;
16+
import java.util.stream.Stream;
17+
1618
import org.jetbrains.annotations.NotNull;
19+
import org.utbot.engine.overrides.stream.UtStream;
1720

1821
import static org.utbot.api.mock.UtMock.assume;
1922
import static org.utbot.engine.ResolverKt.MAX_LIST_SIZE;
@@ -361,6 +364,28 @@ public void replaceAll(UnaryOperator<E> operator) {
361364
}
362365
}
363366

367+
@SuppressWarnings("unchecked")
368+
@Override
369+
public Stream<E> stream() {
370+
preconditionCheck();
371+
372+
int size = elementData.end;
373+
Object[] data = elementData.toArray(0, size);
374+
375+
return new UtStream<>((E[]) data, size);
376+
}
377+
378+
@SuppressWarnings("unchecked")
379+
@Override
380+
public Stream<E> parallelStream() {
381+
preconditionCheck();
382+
383+
int size = elementData.end;
384+
Object[] data = elementData.toArray(0, size);
385+
386+
return new UtStream<>((E[]) data, size);
387+
}
388+
364389
/**
365390
* Auxiliary method, that should be only executed concretely
366391
* @return new ArrayList with all the elements from this.

utbot-framework/src/main/java/org/utbot/engine/overrides/collections/UtHashSet.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
import java.util.Objects;
99
import java.util.function.Consumer;
1010
import java.util.function.Predicate;
11+
import java.util.stream.Stream;
12+
1113
import org.jetbrains.annotations.NotNull;
14+
import org.utbot.engine.overrides.stream.UtStream;
1215

1316
import static org.utbot.api.mock.UtMock.assume;
1417
import static org.utbot.engine.overrides.UtOverrideMock.alreadyVisited;
@@ -263,6 +266,28 @@ public Iterator<E> iterator() {
263266
return new UtHashSetIterator();
264267
}
265268

269+
@SuppressWarnings("unchecked")
270+
@Override
271+
public Stream<E> stream() {
272+
preconditionCheck();
273+
274+
int size = elementData.end;
275+
Object[] data = elementData.toArray(0, size);
276+
277+
return new UtStream<>((E[]) data, size);
278+
}
279+
280+
@SuppressWarnings("unchecked")
281+
@Override
282+
public Stream<E> parallelStream() {
283+
preconditionCheck();
284+
285+
int size = elementData.end;
286+
Object[] data = elementData.toArray(0, size);
287+
288+
return new UtStream<>((E[]) data, size);
289+
}
290+
266291
public class UtHashSetIterator implements Iterator<E> {
267292
int index = 0;
268293

utbot-framework/src/main/java/org/utbot/engine/overrides/collections/UtLinkedList.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@
1313
import java.util.function.Consumer;
1414
import java.util.function.Predicate;
1515
import java.util.function.UnaryOperator;
16+
import java.util.stream.Stream;
17+
1618
import org.jetbrains.annotations.NotNull;
19+
import org.utbot.engine.overrides.stream.UtStream;
1720

1821
import static org.utbot.api.mock.UtMock.assume;
1922
import static org.utbot.engine.ResolverKt.MAX_LIST_SIZE;
@@ -448,6 +451,29 @@ public Iterator<E> descendingIterator() {
448451
preconditionCheck();
449452
return new ReverseIteratorWrapper(elementData.end);
450453
}
454+
455+
@SuppressWarnings("unchecked")
456+
@Override
457+
public Stream<E> stream() {
458+
preconditionCheck();
459+
460+
int size = elementData.end;
461+
Object[] data = elementData.toArray(0, size);
462+
463+
return new UtStream<>((E[]) data, size);
464+
}
465+
466+
@SuppressWarnings("unchecked")
467+
@Override
468+
public Stream<E> parallelStream() {
469+
preconditionCheck();
470+
471+
int size = elementData.end;
472+
Object[] data = elementData.toArray(0, size);
473+
474+
return new UtStream<>((E[]) data, size);
475+
}
476+
451477
public class ReverseIteratorWrapper implements ListIterator<E> {
452478

453479
int index;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.utbot.engine.overrides.stream;
2+
3+
import org.utbot.api.annotation.UtClassMock;
4+
5+
import java.util.stream.Stream;
6+
7+
@UtClassMock(target = java.util.Arrays.class, internalUsage = true)
8+
public class Arrays {
9+
public static <T> Stream<T> stream(T[] array, int startInclusive, int endExclusive) {
10+
int size = array.length;
11+
12+
if (startInclusive < 0 || endExclusive < startInclusive || endExclusive > size) {
13+
throw new ArrayIndexOutOfBoundsException();
14+
}
15+
16+
return new UtStream<>(array, startInclusive, endExclusive);
17+
}
18+
19+
// TODO primitive arrays https://github.com/UnitTestBot/UTBotJava/issues/146
20+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package org.utbot.engine.overrides.stream;
2+
3+
import org.utbot.api.annotation.UtClassMock;
4+
5+
import java.util.function.Supplier;
6+
import java.util.function.UnaryOperator;
7+
import java.util.stream.BaseStream;
8+
9+
import static org.utbot.engine.overrides.UtOverrideMock.executeConcretely;
10+
11+
@SuppressWarnings("unused")
12+
@UtClassMock(target = java.util.stream.Stream.class, internalUsage = true)
13+
public interface Stream<E> extends BaseStream<E, Stream<E>> {
14+
@SuppressWarnings("unchecked")
15+
static <E> java.util.stream.Stream<E> of(E element) {
16+
Object[] data = new Object[1];
17+
data[0] = element;
18+
19+
return new UtStream<>((E[]) data, 1);
20+
}
21+
22+
@SuppressWarnings("unchecked")
23+
static <E> java.util.stream.Stream<E> of(E... elements) {
24+
int size = elements.length;
25+
26+
return new UtStream<>(elements, size);
27+
}
28+
29+
@SuppressWarnings("unchecked")
30+
static <E> java.util.stream.Stream<E> empty() {
31+
return new UtStream<>((E[]) new Object[]{}, 0);
32+
}
33+
34+
static <E> java.util.stream.Stream<E> generate(Supplier<E> s) {
35+
// as "generate" method produces an infinite stream, we cannot analyze it symbolically
36+
executeConcretely();
37+
return null;
38+
}
39+
40+
static <E> java.util.stream.Stream<E> iterate(final E seed, final UnaryOperator<E> f) {
41+
// as "iterate" method produces an infinite stream, we cannot analyze it symbolically
42+
executeConcretely();
43+
return null;
44+
}
45+
46+
static <E> java.util.stream.Stream<E> concat(
47+
java.util.stream.Stream<? extends E> a,
48+
java.util.stream.Stream<? extends E> b
49+
) {
50+
// as provided streams might be infinite, we cannot analyze this method symbolically
51+
executeConcretely();
52+
return null;
53+
}
54+
}

0 commit comments

Comments
 (0)