17
17
package com .akaita .java .rxjava2debug ;
18
18
19
19
import io .reactivex .annotations .NonNull ;
20
- import io .reactivex .annotations .Nullable ;
21
20
22
21
import java .util .LinkedList ;
23
22
import java .util .List ;
@@ -27,7 +26,7 @@ class ExceptionUtils {
27
26
static Throwable setRootCause (@ NonNull Throwable throwable , @ NonNull Throwable rootCause ) {
28
27
List <Throwable > causes = listCauses (throwable );
29
28
causes .add (rootCause );
30
- return collapseCauses (causes );
29
+ return reverseAndCollapseCauses (causes );
31
30
}
32
31
33
32
@ NonNull
@@ -42,14 +41,22 @@ private static List<Throwable> listCauses(@NonNull Throwable throwable) {
42
41
}
43
42
44
43
@ NonNull
45
- private static Throwable collapseCauses (@ NonNull List <Throwable > causes ) {
44
+ private static Throwable reverseAndCollapseCauses (@ NonNull List <Throwable > causes ) {
46
45
if (causes .size () == 0 ) {
47
46
return new RuntimeException ("Empty list of causes" );
48
47
}
49
48
49
+ String originalEnhancedMessage = causes .get (causes .size () - 1 ).getLocalizedMessage ();
50
+ String topMessage = "caused by " + originalEnhancedMessage ;
51
+
50
52
Throwable topThrowable = null ;
51
53
for (int i = causes .size () - 1 ; i >= 0 ; i --) {
52
- topThrowable = new Throwable (causes .get (i ).getMessage (), topThrowable );
54
+ if (i > 0 ) {
55
+ topThrowable = new Throwable (causes .get (i ).getMessage (), topThrowable );
56
+ } else {
57
+ topThrowable = new Throwable (topMessage , topThrowable );
58
+ }
59
+
53
60
if (causes .get (i ).getStackTrace () != null ) {
54
61
// This array should never be null, if everybody follows the Java spec
55
62
// Sometimes this part of the spec is not followed, so we better protect ourselves
0 commit comments