reason is:
private int writeDebugItem(@Nonnull DexDataWriter writer,
@Nullable Iterable<? extends StringKey> parameterNames,
@Nullable Iterable<? extends DebugItem> debugItems) throws IOException {
int parameterCount = 0;
int lastNamedParameterIndex = -1;
if (parameterNames != null) {
parameterCount = IteratorUtils.size(parameterNames);
int index = 0;
for (StringKey parameterName: parameterNames) {
if (parameterName != null) {
lastNamedParameterIndex = index;
}
index++;
}
}
if (lastNamedParameterIndex == -1 && (debugItems == null
|| !debugItems.iterator().hasNext())) {
return NO_OFFSET;
}
int debugItemOffset = writer.getPosition();
int startingLineNumber = 0;
if (debugItems != null) {
for (DebugItem debugItem: debugItems) {
if (debugItem instanceof LineNumber) {
startingLineNumber = ((LineNumber)debugItem).getLineNumber();
break;
}
}
}
ByteArrayOutputStream tempByteOutput = new ByteArrayOutputStream();
DexDataWriter tempDataWriter = new DexDataWriter(tempByteOutput, 0, 64);
DebugWriter tempDebugWriter = new DebugWriter(stringSection, typeSection, tempDataWriter);
tempDataWriter.writeUleb128(startingLineNumber);
The parameterNames type is is TransformedIterator.
public class TransformedIterator<F extends Object, T extends Object>
implements Iterator<T>, Iterable<T> {
final Iterator<? extends F> backingIterator;
final Function<F, T> transformFunction;
public TransformedIterator(Iterable<? extends F> backingIterable,
Function<F, T> transformFunction) {
this.backingIterator = backingIterable.iterator();
this.transformFunction = transformFunction;
}
public TransformedIterator(Iterator<? extends F> backingIterator,
Function<F, T> transformFunction) {
this.backingIterator = backingIterator;
this.transformFunction = transformFunction;
}
@Override
public final boolean hasNext() {
return backingIterator.hasNext();
}
@Override
public final T next() {
return transformFunction.apply(backingIterator.next());
}
@Override
public final void remove() {
backingIterator.remove();
}
@Override
public final Iterator<T> iterator() {
return this;
}
}
It can be used only once.
reason is:
The parameterNames type is is TransformedIterator.
It can be used only once.