Skip to content

Commit 0d267ec

Browse files
committed
Fixed wrong ClassCastException detection for streams
1 parent 5d1f57e commit 0d267ec

File tree

4 files changed

+48
-37
lines changed

4 files changed

+48
-37
lines changed

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

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -378,20 +378,17 @@ public Stream<E> stream() {
378378
preconditionCheck();
379379

380380
int size = elementData.end;
381-
Object[] data = elementData.toArray(0, size);
381+
E[] data = (E[]) new Object[size];
382+
for (int i = 0; i < size; i++) {
383+
data[i] = elementData.get(i);
384+
}
382385

383-
return new UtStream<>((E[]) data, size);
386+
return new UtStream<>(data, size);
384387
}
385388

386-
@SuppressWarnings("unchecked")
387389
@Override
388390
public Stream<E> parallelStream() {
389-
preconditionCheck();
390-
391-
int size = elementData.end;
392-
Object[] data = elementData.toArray(0, size);
393-
394-
return new UtStream<>((E[]) data, size);
391+
return stream();
395392
}
396393

397394
/**

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

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -272,20 +272,17 @@ public Stream<E> stream() {
272272
preconditionCheck();
273273

274274
int size = elementData.end;
275-
Object[] data = elementData.toArray(0, size);
275+
E[] data = (E[]) new Object[size];
276+
for (int i = 0; i < size; i++) {
277+
data[i] = elementData.get(i);
278+
}
276279

277-
return new UtStream<>((E[]) data, size);
280+
return new UtStream<>(data, size);
278281
}
279282

280-
@SuppressWarnings("unchecked")
281283
@Override
282284
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);
285+
return stream();
289286
}
290287

291288
public class UtHashSetIterator implements Iterator<E> {

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

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -458,20 +458,17 @@ public Stream<E> stream() {
458458
preconditionCheck();
459459

460460
int size = elementData.end;
461-
Object[] data = elementData.toArray(0, size);
461+
E[] data = (E[]) new Object[size];
462+
for (int i = 0; i < size; i++) {
463+
data[i] = elementData.get(i);
464+
}
462465

463-
return new UtStream<>((E[]) data, size);
466+
return new UtStream<>(data, size);
464467
}
465468

466-
@SuppressWarnings("unchecked")
467469
@Override
468470
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);
471+
return stream();
475472
}
476473

477474
public class ReverseIteratorWrapper implements ListIterator<E> {

utbot-framework/src/main/java/org/utbot/engine/overrides/stream/UtStream.java

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -266,20 +266,23 @@ public Stream<E> sorted() {
266266
return new UtStream<>();
267267
}
268268

269-
Object[] sortedElements = UtArrayMock.copyOf(elementData.toArray(0, size), size);
269+
E[] sortedElements = (E[]) new Object[size];
270+
for (int i = 0; i < size; i++) {
271+
sortedElements[i] = elementData.get(i);
272+
}
270273

271274
// bubble sort
272275
for (int i = 0; i < size - 1; i++) {
273276
for (int j = 0; j < size - i - 1; j++) {
274-
if (((Comparable<E>) sortedElements[j]).compareTo((E) sortedElements[j + 1]) > 0) {
275-
Object tmp = sortedElements[j];
277+
if (((Comparable<E>) sortedElements[j]).compareTo(sortedElements[j + 1]) > 0) {
278+
E tmp = sortedElements[j];
276279
sortedElements[j] = sortedElements[j + 1];
277280
sortedElements[j + 1] = tmp;
278281
}
279282
}
280283
}
281284

282-
return new UtStream<>((E[]) sortedElements, size);
285+
return new UtStream<>(sortedElements, size);
283286
}
284287

285288
// TODO choose the best sorting https://github.com/UnitTestBot/UTBotJava/issues/188
@@ -294,20 +297,23 @@ public Stream<E> sorted(Comparator<? super E> comparator) {
294297
return new UtStream<>();
295298
}
296299

297-
Object[] sortedElements = UtArrayMock.copyOf(elementData.toArray(0, size), size);
300+
E[] sortedElements = (E[]) new Object[size];
301+
for (int i = 0; i < size; i++) {
302+
sortedElements[i] = elementData.get(i);
303+
}
298304

299305
// bubble sort
300306
for (int i = 0; i < size - 1; i++) {
301307
for (int j = 0; j < size - i - 1; j++) {
302-
if (comparator.compare((E) sortedElements[j], (E) sortedElements[j + 1]) > 0) {
303-
Object tmp = sortedElements[j];
308+
if (comparator.compare(sortedElements[j], sortedElements[j + 1]) > 0) {
309+
E tmp = sortedElements[j];
304310
sortedElements[j] = sortedElements[j + 1];
305311
sortedElements[j + 1] = tmp;
306312
}
307313
}
308314
}
309315

310-
return new UtStream<>((E[]) sortedElements, size);
316+
return new UtStream<>(sortedElements, size);
311317
}
312318

313319
@Override
@@ -347,7 +353,12 @@ public Stream<E> limit(long maxSize) {
347353
newSize = curSize;
348354
}
349355

350-
return new UtStream<>((E[]) elementData.toArray(0, newSize), newSize);
356+
E[] elements = (E[]) new Object[newSize];
357+
for (int i = 0; i < newSize; i++) {
358+
elements[i] = elementData.get(i);
359+
}
360+
361+
return new UtStream<>(elements, newSize);
351362
}
352363

353364
@SuppressWarnings("unchecked")
@@ -367,7 +378,16 @@ public Stream<E> skip(long n) {
367378
// n is 1...Integer.MAX_VALUE here
368379
int newSize = (int) (curSize - n);
369380

370-
return new UtStream<>((E[]) elementData.toArray((int) n, newSize), newSize);
381+
if (newSize == 0) {
382+
return new UtStream<>();
383+
}
384+
385+
E[] elements = (E[]) new Object[newSize];
386+
for (int i = (int) n; i < newSize; i++) {
387+
elements[i] = elementData.get(i);
388+
}
389+
390+
return new UtStream<>(elements, newSize);
371391
}
372392

373393
@Override

0 commit comments

Comments
 (0)