ProblemDetector.java
6.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
package dagger.internal;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public final class ProblemDetector
{
/* Error */
private static void detectCircularDependencies(Collection<Binding<?>> paramCollection, List<Binding<?>> paramList)
{
// Byte code:
// 0: aload_0
// 1: invokeinterface 20 1 0
// 6: astore 4
// 8: aload 4
// 10: invokeinterface 26 1 0
// 15: ifeq +233 -> 248
// 18: aload 4
// 20: invokeinterface 30 1 0
// 25: checkcast 32 dagger/internal/Binding
// 28: astore_0
// 29: aload_0
// 30: invokevirtual 35 dagger/internal/Binding:isCycleFree ()Z
// 33: ifne -25 -> 8
// 36: aload_0
// 37: invokevirtual 38 dagger/internal/Binding:isVisiting ()Z
// 40: ifeq +119 -> 159
// 43: aload_1
// 44: aload_0
// 45: invokeinterface 44 2 0
// 50: istore_3
// 51: new 46 java/lang/StringBuilder
// 54: dup
// 55: ldc 48
// 57: invokespecial 51 java/lang/StringBuilder:<init> (Ljava/lang/String;)V
// 60: astore 4
// 62: iload_3
// 63: istore_2
// 64: iload_2
// 65: aload_1
// 66: invokeinterface 55 1 0
// 71: if_icmpge +60 -> 131
// 74: aload 4
// 76: ldc 57
// 78: invokevirtual 61 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 81: iload_2
// 82: iload_3
// 83: isub
// 84: invokevirtual 64 java/lang/StringBuilder:append (I)Ljava/lang/StringBuilder;
// 87: ldc 66
// 89: invokevirtual 61 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 92: aload_1
// 93: iload_2
// 94: invokeinterface 70 2 0
// 99: checkcast 32 dagger/internal/Binding
// 102: getfield 74 dagger/internal/Binding:provideKey Ljava/lang/String;
// 105: invokevirtual 61 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 108: ldc 76
// 110: invokevirtual 61 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 113: aload_1
// 114: iload_2
// 115: invokeinterface 70 2 0
// 120: invokevirtual 79 java/lang/StringBuilder:append (Ljava/lang/Object;)Ljava/lang/StringBuilder;
// 123: pop
// 124: iload_2
// 125: iconst_1
// 126: iadd
// 127: istore_2
// 128: goto -64 -> 64
// 131: aload 4
// 133: ldc 81
// 135: invokevirtual 61 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 138: aload_0
// 139: getfield 74 dagger/internal/Binding:provideKey Ljava/lang/String;
// 142: invokevirtual 61 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 145: pop
// 146: new 83 java/lang/IllegalStateException
// 149: dup
// 150: aload 4
// 152: invokevirtual 87 java/lang/StringBuilder:toString ()Ljava/lang/String;
// 155: invokespecial 88 java/lang/IllegalStateException:<init> (Ljava/lang/String;)V
// 158: athrow
// 159: aload_0
// 160: iconst_1
// 161: invokevirtual 92 dagger/internal/Binding:setVisiting (Z)V
// 164: aload_1
// 165: aload_0
// 166: invokeinterface 96 2 0
// 171: pop
// 172: new 6 dagger/internal/ProblemDetector$ArraySet
// 175: dup
// 176: invokespecial 97 dagger/internal/ProblemDetector$ArraySet:<init> ()V
// 179: astore 5
// 181: aload_0
// 182: aload 5
// 184: aload 5
// 186: invokevirtual 101 dagger/internal/Binding:getDependencies (Ljava/util/Set;Ljava/util/Set;)V
// 189: aload 5
// 191: aload_1
// 192: invokestatic 103 dagger/internal/ProblemDetector:detectCircularDependencies (Ljava/util/Collection;Ljava/util/List;)V
// 195: aload_0
// 196: iconst_1
// 197: invokevirtual 106 dagger/internal/Binding:setCycleFree (Z)V
// 200: aload_1
// 201: aload_1
// 202: invokeinterface 55 1 0
// 207: iconst_1
// 208: isub
// 209: invokeinterface 109 2 0
// 214: pop
// 215: aload_0
// 216: iconst_0
// 217: invokevirtual 92 dagger/internal/Binding:setVisiting (Z)V
// 220: goto -212 -> 8
// 223: astore 4
// 225: aload_1
// 226: aload_1
// 227: invokeinterface 55 1 0
// 232: iconst_1
// 233: isub
// 234: invokeinterface 109 2 0
// 239: pop
// 240: aload_0
// 241: iconst_0
// 242: invokevirtual 92 dagger/internal/Binding:setVisiting (Z)V
// 245: aload 4
// 247: athrow
// 248: return
// Local variable table:
// start length slot name signature
// 0 249 0 paramCollection Collection<Binding<?>>
// 0 249 1 paramList List<Binding<?>>
// 63 65 2 i int
// 50 34 3 j int
// 6 145 4 localObject1 Object
// 223 23 4 localObject2 Object
// 179 11 5 localArraySet ArraySet
// Exception table:
// from to target type
// 172 200 223 finally
}
public final void detectCircularDependencies(Collection<Binding<?>> paramCollection)
{
detectCircularDependencies(paramCollection, new ArrayList());
}
public final void detectProblems(Collection<Binding<?>> paramCollection)
{
detectCircularDependencies(paramCollection);
detectUnusedBinding(paramCollection);
}
public final void detectUnusedBinding(Collection<Binding<?>> paramCollection)
{
ArrayList localArrayList = new ArrayList();
paramCollection = paramCollection.iterator();
while (paramCollection.hasNext())
{
Binding localBinding = (Binding)paramCollection.next();
if ((!localBinding.library()) && (!localBinding.dependedOn())) {
localArrayList.add(localBinding);
}
}
if (!localArrayList.isEmpty())
{
paramCollection = new StringBuilder();
paramCollection.append("You have these unused @Provider methods:");
int i = 0;
while (i < localArrayList.size())
{
paramCollection.append("\n ").append(i + 1).append(". ").append(((Binding)localArrayList.get(i)).requiredBy);
i += 1;
}
paramCollection.append("\n Set library=true in your module to disable this check.");
throw new IllegalStateException(paramCollection.toString());
}
}
static class ArraySet<T>
extends AbstractSet<T>
{
private final ArrayList<T> list = new ArrayList();
public boolean add(T paramT)
{
this.list.add(paramT);
return true;
}
public Iterator<T> iterator()
{
return this.list.iterator();
}
public int size()
{
throw new UnsupportedOperationException();
}
}
}
/* Location: /home/merong/decompile/hackery-dex2jar.jar!/dagger/internal/ProblemDetector.class
* Java compiler version: 6 (50.0)
* JD-Core Version: 0.7.1
*/