19
19
import com .google .classyshark .gui .panel .chart .RingChartPanel ;
20
20
import com .google .classyshark .gui .panel .displayarea .DisplayArea ;
21
21
import com .google .classyshark .gui .panel .io .CurrentFolderConfig ;
22
- import com .google .classyshark .silverghost .exporter .Exporter ;
23
22
import com .google .classyshark .gui .panel .io .FileChooserUtils ;
24
23
import com .google .classyshark .gui .panel .io .RecentArchivesConfig ;
25
24
import com .google .classyshark .gui .panel .methodscount .MethodsCountPanel ;
26
- import com .google .classyshark .gui .panel .reducer .Reducer ;
27
25
import com .google .classyshark .gui .panel .toolbar .KeyUtils ;
28
26
import com .google .classyshark .gui .panel .toolbar .Toolbar ;
29
27
import com .google .classyshark .gui .panel .toolbar .ToolbarController ;
30
28
import com .google .classyshark .gui .panel .tree .FilesTree ;
31
- import com .google .classyshark .silverghost .contentreader .ContentReader ;
29
+ import com .google .classyshark .silverghost .SilverGhost ;
30
+ import com .google .classyshark .silverghost .exporter .Exporter ;
32
31
import com .google .classyshark .silverghost .methodscounter .ClassNode ;
32
+ import com .google .classyshark .silverghost .tokensmapper .ProguardMapper ;
33
33
import com .google .classyshark .silverghost .translator .Translator ;
34
- import com .google .classyshark .silverghost .translator .TranslatorFactory ;
35
-
34
+ import java .awt .BorderLayout ;
35
+ import java .awt .Color ;
36
+ import java .awt .Dimension ;
37
+ import java .awt .Font ;
38
+ import java .awt .Insets ;
39
+ import java .awt .event .KeyEvent ;
40
+ import java .awt .event .KeyListener ;
41
+ import java .io .File ;
42
+ import java .util .ArrayList ;
43
+ import java .util .List ;
36
44
import javax .swing .JFileChooser ;
37
45
import javax .swing .JFrame ;
38
46
import javax .swing .JPanel ;
44
52
import javax .swing .event .ChangeEvent ;
45
53
import javax .swing .event .ChangeListener ;
46
54
import javax .swing .filechooser .FileFilter ;
47
- import java .awt .BorderLayout ;
48
- import java .awt .Color ;
49
- import java .awt .Dimension ;
50
- import java .awt .Font ;
51
- import java .awt .Insets ;
52
- import java .awt .event .KeyEvent ;
53
- import java .awt .event .KeyListener ;
54
- import java .io .File ;
55
- import java .util .ArrayList ;
56
- import java .util .List ;
57
55
58
56
/**
59
57
* App controller, general app structure MVM ==> Model - View - Mediator (this class)
@@ -71,22 +69,21 @@ public class ClassySharkPanel extends JPanel
71
69
private int dividerLocation = 0 ;
72
70
private DisplayArea displayArea ;
73
71
private FilesTree filesTree ;
74
-
75
- private Reducer reducer ;
76
- private Translator translator ;
77
- private boolean isDataLoaded = false ;
78
- private File binaryArchive ;
79
- private List <String > allClassNamesInArchive ;
80
72
private RingChartPanel ringChartPanel ;
73
+ private boolean isDataLoaded = false ;
74
+
75
+ private SilverGhost silverGhost = new SilverGhost ();
81
76
82
77
public ClassySharkPanel (JFrame frame , File archive , String fullClassName ) {
83
78
this (frame );
84
- updateUiAfterArchiveReadAndLoadClass (archive , fullClassName );
79
+ silverGhost .setBinaryArchive (archive );
80
+ updateUiAfterArchiveReadAndLoadClass (fullClassName );
85
81
}
86
82
87
83
public ClassySharkPanel (JFrame frame , File archive ) {
88
84
this (frame );
89
- displayArchive (archive );
85
+ silverGhost .setBinaryArchive (archive );
86
+ displayArchive (silverGhost .getBinaryArchive ());
90
87
}
91
88
92
89
public ClassySharkPanel (JFrame frame ) {
@@ -98,14 +95,14 @@ public ClassySharkPanel(JFrame frame) {
98
95
99
96
@ Override
100
97
public void onSelectedTypeClassFromMouseClick (String selectedClass ) {
101
- for (String clazz : translator . getDependencies ()) {
98
+ for (String clazz : silverGhost . getImportsForCurrentClass ()) {
102
99
if (clazz .contains (selectedClass )) {
103
100
onSelectedImportFromMouseClick (clazz );
104
101
return ;
105
102
}
106
103
}
107
104
108
- for (String clazz : reducer .getAllClassNames ()) {
105
+ for (String clazz : silverGhost .getAllClassNames ()) {
109
106
if (clazz .contains (selectedClass )) {
110
107
onSelectedImportFromMouseClick (clazz );
111
108
return ;
@@ -115,7 +112,7 @@ public void onSelectedTypeClassFromMouseClick(String selectedClass) {
115
112
116
113
@ Override
117
114
public void onSelectedImportFromMouseClick (String className ) {
118
- if (reducer .getAllClassNames ().contains (className )) {
115
+ if (silverGhost .getAllClassNames ().contains (className )) {
119
116
onSelectedClassName (className );
120
117
}
121
118
}
@@ -155,9 +152,9 @@ public String getDescription() {
155
152
156
153
@ Override
157
154
public void onGoBackPressed () {
158
- displayArea .displayAllClassesNames (allClassNamesInArchive );
155
+ displayArea .displayAllClassesNames (silverGhost . getAllClassNames () );
159
156
toolbar .setText ("" );
160
- reducer . reduce ( "" );
157
+ silverGhost . initClassNameFiltering ( );
161
158
}
162
159
163
160
@ Override
@@ -172,13 +169,40 @@ public void onChangedTextFromTypingArea(String selectedLine) {
172
169
fillDisplayArea (selectedLine , !VIEW_TOP_CLASS , !IS_CLASSNAME_FROM_MOUSE_CLICK );
173
170
}
174
171
172
+ @ Override
173
+ public void onMappingsButtonPressed () {
174
+ final JFileChooser fc = new JFileChooser ();
175
+ fc .setFileFilter (new FileFilter () {
176
+ @ Override
177
+ public boolean accept (File f ) {
178
+ return true ;
179
+ }
180
+
181
+ @ Override
182
+ public String getDescription () {
183
+ return "" ;
184
+ }
185
+ });
186
+
187
+ fc .setCurrentDirectory (CurrentFolderConfig .INSTANCE .getCurrentDirectory ());
188
+
189
+ int returnVal = fc .showOpenDialog (this );
190
+ toolbar .setText ("" );
191
+ if (returnVal == JFileChooser .APPROVE_OPTION ) {
192
+ File resultFile = fc .getSelectedFile ();
193
+ readMappingFile (resultFile );
194
+ }
195
+ }
196
+
175
197
@ Override
176
198
public void onExportButtonPressed () {
177
199
SwingWorker <Void , Void > worker = new SwingWorker <Void , Void >() {
178
200
@ Override
179
201
protected Void doInBackground () throws Exception {
180
- Exporter .writeCurrentClass (translator );
181
- Exporter .writeArchive (binaryArchive , reducer .getAllClassNames ());
202
+ Exporter .writeCurrentClass (silverGhost .getCurrentClassName (),
203
+ silverGhost .getCurrentClassContent ());
204
+ Exporter .writeArchive (silverGhost .getBinaryArchive (),
205
+ silverGhost .getAllClassNames ());
182
206
return null ;
183
207
}
184
208
@@ -202,15 +226,16 @@ public void onChangeLeftPaneVisibility(boolean visible) {
202
226
203
227
@ Override
204
228
public void displayArchive (File binaryArchive ) {
229
+ silverGhost .setBinaryArchive (binaryArchive );
230
+
205
231
if (parentFrame != null ) {
206
- parentFrame .setTitle (binaryArchive .getName ());
232
+ parentFrame .setTitle (silverGhost . getBinaryArchive () .getName ());
207
233
}
208
234
209
- loadAndFillDisplayArea (binaryArchive , null );
210
- isDataLoaded = true ;
235
+ readArchiveAndFillDisplayArea (null );
211
236
toolbar .activateNavigationButtons ();
212
237
filesTree .setVisibleRoot ();
213
- methodsCountPanel .loadFile (binaryArchive );
238
+ methodsCountPanel .loadFile (silverGhost . getBinaryArchive () );
214
239
}
215
240
216
241
@ Override
@@ -289,7 +314,7 @@ private void buildUI() {
289
314
@ Override
290
315
public void stateChanged (ChangeEvent e ) {
291
316
int dividerLocation1 = jSplitPane .getDividerLocation ();
292
- JTabbedPane jTabbedPane1 = (JTabbedPane )e .getSource ();
317
+ JTabbedPane jTabbedPane1 = (JTabbedPane ) e .getSource ();
293
318
if (jTabbedPane1 .getSelectedIndex () == 0 ) {
294
319
jSplitPane .setRightComponent (rightScrollPane );
295
320
} else {
@@ -311,60 +336,45 @@ public void stateChanged(ChangeEvent e) {
311
336
add (jSplitPane , BorderLayout .CENTER );
312
337
}
313
338
314
- private void updateUiAfterArchiveReadAndLoadClass (File binaryArchive , String className ) {
339
+ private void updateUiAfterArchiveReadAndLoadClass (String className ) {
315
340
if (parentFrame != null ) {
316
- parentFrame .setTitle (binaryArchive .getName ());
341
+ parentFrame .setTitle (silverGhost . getBinaryArchive () .getName ());
317
342
}
318
343
319
- loadAndFillDisplayArea (binaryArchive , className );
320
- isDataLoaded = true ;
344
+ readArchiveAndFillDisplayArea (className );
321
345
toolbar .activateNavigationButtons ();
322
346
filesTree .setVisibleRoot ();
323
- methodsCountPanel .loadFile (binaryArchive );
347
+ methodsCountPanel .loadFile (silverGhost . getBinaryArchive () );
324
348
}
325
349
326
- private void loadAndFillDisplayArea (final File binaryArchive ,
327
- final String className ) {
328
- this .binaryArchive = binaryArchive ;
329
- final ContentReader loader = new ContentReader (this .binaryArchive );
350
+ private void readArchiveAndFillDisplayArea (final String className ) {
330
351
331
352
SwingWorker <Void , Void > worker = new SwingWorker <Void , Void >() {
332
353
@ Override
333
354
protected Void doInBackground () throws Exception {
334
- long start = System .currentTimeMillis ();
335
- loader .load ();
336
- allClassNamesInArchive = loader .getAllClassNames ();
337
- reducer = new Reducer (allClassNamesInArchive );
338
- System .out .println ("Archive Reading "
339
- + (System .currentTimeMillis () - start ) + " ms " );
355
+ silverGhost .readContents ();
340
356
return null ;
341
357
}
342
358
343
359
@ Override
344
360
protected void done () {
345
- if (isArchiveError ()) {
346
- filesTree .fillArchive (new File ("ERROR" ), new ArrayList <String >(), loader .getAllComponents ());
361
+ if (silverGhost .isArchiveError ()) {
362
+ filesTree .fillArchive (new File ("ERROR" ), new ArrayList <String >(),
363
+ silverGhost .getComponents ());
347
364
displayArea .displayError ();
348
365
return ;
349
366
}
350
367
351
- filesTree .fillArchive (ClassySharkPanel . this . binaryArchive ,
352
- allClassNamesInArchive ,
353
- loader . getAllComponents ());
368
+ filesTree .fillArchive (silverGhost . getBinaryArchive () ,
369
+ silverGhost . getAllClassNames () ,
370
+ silverGhost . getComponents ());
354
371
355
372
if (className != null ) {
356
373
onSelectedClassName (className );
357
374
} else {
358
375
displayArea .displaySharkey ();
359
376
}
360
- }
361
-
362
- private boolean isArchiveError () {
363
- boolean noJavaClasses = allClassNamesInArchive .isEmpty ();
364
- boolean noAndroidClasses = allClassNamesInArchive .size () == 1
365
- && allClassNamesInArchive .contains ("AndroidManifest.xml" );
366
-
367
- return noJavaClasses || noAndroidClasses ;
377
+ isDataLoaded = true ;
368
378
}
369
379
};
370
380
@@ -378,22 +388,24 @@ private void fillDisplayArea(final String textFromTypingArea,
378
388
379
389
SwingWorker <Void , Void > worker = new SwingWorker <Void , Void >() {
380
390
private List <Translator .ELEMENT > displayedClassTokens ;
381
- private List <String > reducedClassNames ;
391
+ private List <String > filteredClassNames ;
382
392
private String className = "" ;
383
393
384
394
@ Override
385
395
protected Void doInBackground () throws Exception {
386
396
if (viewMouseClickedClass ) {
387
397
className = textFromTypingArea ;
388
- displayedClassTokens = translateClass (className );
398
+ silverGhost .translateArchiveElement (className );
399
+ displayedClassTokens = silverGhost .getArchiveElementTokens ();
389
400
} else if (viewTopClass ) {
390
- className = reducer .getAutocompleteClassName ();
391
- displayedClassTokens = translateClass (className );
401
+ className = silverGhost .getAutoCompleteClassName ();
402
+ silverGhost .translateArchiveElement (className );
403
+ displayedClassTokens = silverGhost .getArchiveElementTokens ();
392
404
} else {
393
- reducedClassNames = reducer . reduce (textFromTypingArea );
394
- if (reducedClassNames .size () == 1 ) {
395
- displayedClassTokens =
396
- translateClass ( reducedClassNames . get ( 0 ) );
405
+ filteredClassNames = silverGhost . filter (textFromTypingArea );
406
+ if (filteredClassNames .size () == 1 ) {
407
+ silverGhost . translateArchiveElement ( filteredClassNames . get ( 0 ));
408
+ displayedClassTokens = silverGhost . getArchiveElementTokens ( );
397
409
}
398
410
}
399
411
return null ;
@@ -405,23 +417,33 @@ protected void done() {
405
417
toolbar .setText (className );
406
418
displayArea .displayClass (displayedClassTokens );
407
419
} else {
408
- if (reducedClassNames .size () == 1 ) {
420
+ if (filteredClassNames .size () == 1 ) {
409
421
displayArea .displayClass (displayedClassTokens );
410
- } else if (reducedClassNames .size () == 0 ) {
422
+ } else if (filteredClassNames .size () == 0 ) {
411
423
displayArea .displayError ();
412
424
} else {
413
- displayArea .displayReducedClassNames (reducedClassNames ,
425
+ displayArea .displayReducedClassNames (filteredClassNames ,
414
426
textFromTypingArea );
415
427
}
416
428
}
417
429
}
430
+ };
431
+
432
+ worker .execute ();
433
+ }
434
+
435
+ private void readMappingFile (final File resultFile ) {
436
+ SwingWorker <Void , Void > worker = new SwingWorker <Void , Void >() {
437
+ private ProguardMapper reverseMappings ;
438
+
439
+ @ Override
440
+ protected Void doInBackground () throws Exception {
441
+ reverseMappings = SilverGhost .readMappingFile (resultFile );
442
+ return null ;
443
+ }
418
444
419
- private List <Translator .ELEMENT > translateClass (String name ) {
420
- translator =
421
- TranslatorFactory .createTranslator (
422
- name , binaryArchive , reducer .getAllClassNames ());
423
- translator .apply ();
424
- return translator .getElementsList ();
445
+ protected void done () {
446
+ silverGhost .addMappings (reverseMappings );
425
447
}
426
448
};
427
449
0 commit comments