Closed jay2013 closed 6 years ago
Looks like they answered this in https://github.com/stefan-zobel/streamsupport/issues/1
Sorry for disturbing you. Our tool can only detect static bug and sometimes the reports are false positive.
No worries. Good luck with the development of your tool :)
we notice that in your app codes, you use external library "net.sourceforge.streamsupport:streamsupport:1.5.6". In this library, method "long estimateSize()" in class "java8.util.DelegatingSpliterator" use "java.util.Spliterator" not "java8.util.Spliterator". However, "java.util.Spliterator" is added since level 24. So when your app run on level under 24 machine, it maybe crash.
there are several reachable path from your application to that method call. we list them below, please help to check.
all reachable paths: reachable path 1: --><ca.rmen.android.networkmonitor.app.service.NetMonService: void onDestroy()> --><java8.util.stream.ReferencePipeline$Head: void forEach(java8.util.function.Consumer)> --><java8.util.stream.ReferencePipeline: void forEach(java8.util.function.Consumer)> --><java8.util.stream.AbstractPipeline: java.lang.Object evaluate(java8.util.stream.TerminalOp)> --><java8.util.stream.ForEachOps$ForEachOp$OfRef: java.lang.Object evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)> --><java8.util.stream.ForEachOps$ForEachOp: java.lang.Void evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)> --><java8.util.stream.ForEachOps$ForEachOrderedTask: void(java8.util.stream.PipelineHelper,java8.util.Spliterator,java8.util.stream.Sink)>
--><java8.util.DelegatingSpliterator: long estimateSize()>
--> <java.util.Spliterator: long estimateSize()>
reachable path 2:
--><ca.rmen.android.networkmonitor.provider.NetMonProvider: android.content.ContentProviderResult[] applyBatch(java.util.ArrayList)>
--><java8.util.stream.ReferencePipeline: java.lang.Object collect(java8.util.stream.Collector)>
--><java8.util.stream.ReferencePipeline$Head: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.ReferencePipeline: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.AbstractPipeline: java.lang.Object evaluate(java8.util.stream.TerminalOp)>
--><java8.util.stream.ForEachOps$ForEachOp$OfRef: java.lang.Object evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.stream.ForEachOps$ForEachOp: java.lang.Void evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.stream.ForEachOps$ForEachOrderedTask: void (java8.util.stream.PipelineHelper,java8.util.Spliterator,java8.util.stream.Sink)>
--><java8.util.DelegatingSpliterator: long estimateSize()>
--> <java.util.Spliterator: long estimateSize()>
reachable path 3:
--><ca.rmen.android.networkmonitor.provider.NetMonProvider: android.content.ContentProviderResult[] applyBatch(java.util.ArrayList)>
--><java8.util.stream.ReferencePipeline: java.lang.Object collect(java8.util.stream.Collector)>
--><java8.util.stream.ReferencePipeline: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.AbstractPipeline: java.lang.Object evaluate(java8.util.stream.TerminalOp)>
--><java8.util.stream.ForEachOps$ForEachOp$OfRef: java.lang.Object evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.stream.ForEachOps$ForEachOp: java.lang.Void evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.stream.ForEachOps$ForEachOrderedTask: void (java8.util.stream.PipelineHelper,java8.util.Spliterator,java8.util.stream.Sink)>
--><java8.util.DelegatingSpliterator: long estimateSize()>
--> <java.util.Spliterator: long estimateSize()>
reachable path 4:
--><ca.rmen.android.networkmonitor.provider.NetMonProvider: android.content.ContentProviderResult[] applyBatch(java.util.ArrayList)>
--><java8.util.stream.ReferencePipeline: java.lang.Object collect(java8.util.stream.Collector)>
--><java8.util.stream.AbstractPipeline: java.lang.Object evaluate(java8.util.stream.TerminalOp)>
--><java8.util.stream.ForEachOps$ForEachOp$OfRef: java.lang.Object evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.stream.ForEachOps$ForEachOp: java.lang.Void evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.stream.ForEachOps$ForEachOrderedTask: void (java8.util.stream.PipelineHelper,java8.util.Spliterator,java8.util.stream.Sink)>
--><java8.util.DelegatingSpliterator: long estimateSize()>
--><java.util.Spliterator: long estimateSize()>
reachable path 5:
--><ca.rmen.android.networkmonitor.app.service.NetMonService: void onDestroy()>
--><java8.util.stream.ReferencePipeline$Head: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.ReferencePipeline: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.AbstractPipeline: java.lang.Object evaluate(java8.util.stream.TerminalOp)>
--><java8.util.stream.ForEachOps$ForEachOp$OfRef: java.lang.Object evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.stream.ForEachOps$ForEachOp: java.lang.Void evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.concurrent.ForkJoinTask: java.lang.Object invoke()>
--><java8.util.concurrent.ForkJoinTask: int doExec()>
--><java8.util.concurrent.CountedCompleter: boolean exec()>
--><java8.util.stream.ForEachOps$ForEachTask: void compute()>
--><java8.util.DelegatingSpliterator: long estimateSize()>
--><java.util.Spliterator: long estimateSize()>
reachable path 6:
--><ca.rmen.android.networkmonitor.provider.NetMonProvider: android.content.ContentProviderResult[] applyBatch(java.util.ArrayList)>
--><java8.util.stream.ReferencePipeline: java.lang.Object collect(java8.util.stream.Collector)>
--><java8.util.stream.ReferencePipeline$Head: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.ReferencePipeline: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.AbstractPipeline: java.lang.Object evaluate(java8.util.stream.TerminalOp)>
--><java8.util.stream.ForEachOps$ForEachOp$OfRef: java.lang.Object evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.stream.ForEachOps$ForEachOp: java.lang.Void evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.concurrent.ForkJoinTask: java.lang.Object invoke()>
--><java8.util.concurrent.ForkJoinTask: int doExec()>
--><java8.util.concurrent.CountedCompleter: boolean exec()>
--><java8.util.stream.ForEachOps$ForEachTask: void compute()>
--><java8.util.DelegatingSpliterator: long estimateSize()>
--><java.util.Spliterator: long estimateSize()>
reachable path 7:
--><ca.rmen.android.networkmonitor.provider.NetMonProvider: android.content.ContentProviderResult[] applyBatch(java.util.ArrayList)>
--><java8.util.stream.ReferencePipeline: java.lang.Object collect(java8.util.stream.Collector)>
--><java8.util.stream.ReferencePipeline: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.AbstractPipeline: java.lang.Object evaluate(java8.util.stream.TerminalOp)>
--><java8.util.stream.ForEachOps$ForEachOp$OfRef: java.lang.Object evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.stream.ForEachOps$ForEachOp: java.lang.Void evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.concurrent.ForkJoinTask: java.lang.Object invoke()>
--><java8.util.concurrent.ForkJoinTask: int doExec()>
--><java8.util.concurrent.CountedCompleter: boolean exec()>
--><java8.util.stream.ForEachOps$ForEachTask: void compute()>
--><java8.util.DelegatingSpliterator: long estimateSize()>
--><java.util.Spliterator: long estimateSize()>
reachable path 8:
--><ca.rmen.android.networkmonitor.provider.NetMonProvider: android.content.ContentProviderResult[] applyBatch(java.util.ArrayList)>
--><java8.util.stream.ReferencePipeline: java.lang.Object collect(java8.util.stream.Collector)>
--><java8.util.stream.AbstractPipeline: java.lang.Object evaluate(java8.util.stream.TerminalOp)>
--><java8.util.stream.ForEachOps$ForEachOp$OfRef: java.lang.Object evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.stream.ForEachOps$ForEachOp: java.lang.Void evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.concurrent.ForkJoinTask: java.lang.Object invoke()>
--><java8.util.concurrent.ForkJoinTask: int doExec()>
--><java8.util.concurrent.CountedCompleter: boolean exec()>
--><java8.util.stream.ForEachOps$ForEachTask: void compute()>
--><java8.util.DelegatingSpliterator: long estimateSize()>
--><java.util.Spliterator: long estimateSize()>
reachable path 9:
--><ca.rmen.android.networkmonitor.app.service.NetMonService: void onDestroy()>
--><java8.util.stream.ReferencePipeline$Head: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.ReferencePipeline: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.AbstractPipeline: java.lang.Object evaluate(java8.util.stream.TerminalOp)>
--><java8.util.stream.ReduceOps$ReduceOp: java.lang.Object evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.concurrent.ForkJoinTask: java.lang.Object invoke()>
--><java8.util.concurrent.ForkJoinTask: int doExec()>
--><java8.util.concurrent.CountedCompleter: boolean exec()>
--><java8.util.stream.ForEachOps$ForEachTask: void compute()>
--><java8.util.DelegatingSpliterator: long estimateSize()>
--><java.util.Spliterator: long estimateSize()>
reachable path 10:
--><ca.rmen.android.networkmonitor.provider.NetMonProvider: android.content.ContentProviderResult[] applyBatch(java.util.ArrayList)>
--><java8.util.stream.ReferencePipeline: java.lang.Object collect(java8.util.stream.Collector)>
--><java8.util.stream.ReferencePipeline$Head: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.ReferencePipeline: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.AbstractPipeline: java.lang.Object evaluate(java8.util.stream.TerminalOp)>
--><java8.util.stream.ReduceOps$ReduceOp: java.lang.Object evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.concurrent.ForkJoinTask: java.lang.Object invoke()>
--><java8.util.concurrent.ForkJoinTask: int doExec()>
--><java8.util.concurrent.CountedCompleter: boolean exec()>
--><java8.util.stream.ForEachOps$ForEachTask: void compute()>
--><java8.util.DelegatingSpliterator: long estimateSize()>
--><java.util.Spliterator: long estimateSize()>
reachable path 11:
--><ca.rmen.android.networkmonitor.provider.NetMonProvider: android.content.ContentProviderResult[] applyBatch(java.util.ArrayList)>
--><java8.util.stream.ReferencePipeline: java.lang.Object collect(java8.util.stream.Collector)>
--><java8.util.stream.ReferencePipeline: void forEach(java8.util.function.Consumer)>
--><java8.util.stream.AbstractPipeline: java.lang.Object evaluate(java8.util.stream.TerminalOp)>
--><java8.util.stream.ReduceOps$ReduceOp: java.lang.Object evaluateParallel(java8.util.stream.PipelineHelper,java8.util.Spliterator)>
--><java8.util.concurrent.ForkJoinTask: java.lang.Object invoke()>
--><java8.util.concurrent.ForkJoinTask: int doExec()>
--><java8.util.concurrent.CountedCompleter: boolean exec()>
--><java8.util.stream.ForEachOps$ForEachTask: void compute()>
--><java8.util.DelegatingSpliterator: long estimateSize()>
--> <java.util.Spliterator: long estimateSize()>