Dependency chains that overflow the available stack - ComputationException due to StackOverflowError during injection is hard to track down
- Dominant language
- Java
- Stars
- 12.7k
- Forks
- 1.7k
- Avg merge
- 11m
- Merged PRs (30d)
- 2
Description
In the issue [guice/#681](https://github.com/google/guice/issues/681) it was suggested that in some rare case in a complex context Guice's ComputationException would be very hard to debug.
This scenario seems to being dismissed as a constructed example which is too far from reality. However, we experience now exactly this modeled situation in a real life project:
- complex project context with many dependencies
- ComputationException is not possible to track down
- provided `ProvisionListener` example in the linked issue does not produce desired output, maybe I am missing something
- [Guice Grapher](https://stackoverflow.com/questions/9301007/is-there-any-way-to-get-guice-grapher-to-work) integration does not work from scratch neither, however I am not sure how exactly this would help to analyze the problem.
How to proceed to tackle the problem? Does Guice have a debug log level?
```
Exception in thread "main" com.google.inject.internal.util.$ComputationException: java.lang.ArrayIndexOutOfBoundsExcepti
at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:553)
at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:419)
at com.google.inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2041)
at com.google.inject.internal.util.$StackTraceElements.forMember(StackTraceElements.java:53)
at com.google.inject.internal.Errors.formatSource(Errors.java:690)
at com.google.inject.internal.Errors.formatInjectionPoint(Errors.java:720)
at com.google.inject.internal.Errors.formatSource(Errors.java:684)
at com.google.inject.internal.Errors.format(Errors.java:555)
at com.google.inject.ProvisionException.getMessage(ProvisionException.java:59)
at my.custom.spark.app.main.Main.main(Main.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 43168
at com.google.inject.internal.asm.$ClassReader.(Unknown Source)
at com.google.inject.internal.asm.$ClassReader.(Unknown Source)
at com.google.inject.internal.asm.$ClassReader.(Unknown Source)
at com.google.inject.internal.util.$LineNumbers.(LineNumbers.java:62)
at com.google.inject.internal.util.$StackTraceElements$1.apply(StackTraceElements.java:36)
at com.google.inject.internal.util.$StackTraceElements$1.apply(StackTraceElements.java:33)
**at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:549)**
... 18 more
```
Contributor guide
Assessment
This issue has not been assessed yet.