summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/analysis/SourceIndexVisitor.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/analysis/SourceIndexVisitor.java')
-rw-r--r--src/cuchaz/enigma/analysis/SourceIndexVisitor.java600
1 files changed, 0 insertions, 600 deletions
diff --git a/src/cuchaz/enigma/analysis/SourceIndexVisitor.java b/src/cuchaz/enigma/analysis/SourceIndexVisitor.java
deleted file mode 100644
index 841d176..0000000
--- a/src/cuchaz/enigma/analysis/SourceIndexVisitor.java
+++ /dev/null
@@ -1,600 +0,0 @@
1/*******************************************************************************
2 * Copyright (c) 2014 Jeff Martin.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the GNU Public License v3.0
5 * which accompanies this distribution, and is available at
6 * http://www.gnu.org/licenses/gpl.html
7 *
8 * Contributors:
9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/
11package cuchaz.enigma.analysis;
12
13import com.strobel.assembler.metadata.FieldDefinition;
14import com.strobel.assembler.metadata.MemberReference;
15import com.strobel.assembler.metadata.MethodDefinition;
16import com.strobel.assembler.metadata.ParameterDefinition;
17import com.strobel.assembler.metadata.TypeDefinition;
18import com.strobel.assembler.metadata.TypeReference;
19import com.strobel.decompiler.languages.TextLocation;
20import com.strobel.decompiler.languages.java.ast.Annotation;
21import com.strobel.decompiler.languages.java.ast.AnonymousObjectCreationExpression;
22import com.strobel.decompiler.languages.java.ast.ArrayCreationExpression;
23import com.strobel.decompiler.languages.java.ast.ArrayInitializerExpression;
24import com.strobel.decompiler.languages.java.ast.ArraySpecifier;
25import com.strobel.decompiler.languages.java.ast.AssertStatement;
26import com.strobel.decompiler.languages.java.ast.AssignmentExpression;
27import com.strobel.decompiler.languages.java.ast.AstNode;
28import com.strobel.decompiler.languages.java.ast.BinaryOperatorExpression;
29import com.strobel.decompiler.languages.java.ast.BlockStatement;
30import com.strobel.decompiler.languages.java.ast.BreakStatement;
31import com.strobel.decompiler.languages.java.ast.CaseLabel;
32import com.strobel.decompiler.languages.java.ast.CastExpression;
33import com.strobel.decompiler.languages.java.ast.CatchClause;
34import com.strobel.decompiler.languages.java.ast.ClassOfExpression;
35import com.strobel.decompiler.languages.java.ast.Comment;
36import com.strobel.decompiler.languages.java.ast.CompilationUnit;
37import com.strobel.decompiler.languages.java.ast.ComposedType;
38import com.strobel.decompiler.languages.java.ast.ConditionalExpression;
39import com.strobel.decompiler.languages.java.ast.ConstructorDeclaration;
40import com.strobel.decompiler.languages.java.ast.ContinueStatement;
41import com.strobel.decompiler.languages.java.ast.DoWhileStatement;
42import com.strobel.decompiler.languages.java.ast.EmptyStatement;
43import com.strobel.decompiler.languages.java.ast.EnumValueDeclaration;
44import com.strobel.decompiler.languages.java.ast.ExpressionStatement;
45import com.strobel.decompiler.languages.java.ast.FieldDeclaration;
46import com.strobel.decompiler.languages.java.ast.ForEachStatement;
47import com.strobel.decompiler.languages.java.ast.ForStatement;
48import com.strobel.decompiler.languages.java.ast.GotoStatement;
49import com.strobel.decompiler.languages.java.ast.IAstVisitor;
50import com.strobel.decompiler.languages.java.ast.Identifier;
51import com.strobel.decompiler.languages.java.ast.IdentifierExpression;
52import com.strobel.decompiler.languages.java.ast.IfElseStatement;
53import com.strobel.decompiler.languages.java.ast.ImportDeclaration;
54import com.strobel.decompiler.languages.java.ast.IndexerExpression;
55import com.strobel.decompiler.languages.java.ast.InstanceInitializer;
56import com.strobel.decompiler.languages.java.ast.InstanceOfExpression;
57import com.strobel.decompiler.languages.java.ast.InvocationExpression;
58import com.strobel.decompiler.languages.java.ast.JavaTokenNode;
59import com.strobel.decompiler.languages.java.ast.Keys;
60import com.strobel.decompiler.languages.java.ast.LabelStatement;
61import com.strobel.decompiler.languages.java.ast.LabeledStatement;
62import com.strobel.decompiler.languages.java.ast.LambdaExpression;
63import com.strobel.decompiler.languages.java.ast.LocalTypeDeclarationStatement;
64import com.strobel.decompiler.languages.java.ast.MemberReferenceExpression;
65import com.strobel.decompiler.languages.java.ast.MethodDeclaration;
66import com.strobel.decompiler.languages.java.ast.MethodGroupExpression;
67import com.strobel.decompiler.languages.java.ast.NewLineNode;
68import com.strobel.decompiler.languages.java.ast.NullReferenceExpression;
69import com.strobel.decompiler.languages.java.ast.ObjectCreationExpression;
70import com.strobel.decompiler.languages.java.ast.PackageDeclaration;
71import com.strobel.decompiler.languages.java.ast.ParameterDeclaration;
72import com.strobel.decompiler.languages.java.ast.ParenthesizedExpression;
73import com.strobel.decompiler.languages.java.ast.PrimitiveExpression;
74import com.strobel.decompiler.languages.java.ast.ReturnStatement;
75import com.strobel.decompiler.languages.java.ast.SimpleType;
76import com.strobel.decompiler.languages.java.ast.SuperReferenceExpression;
77import com.strobel.decompiler.languages.java.ast.SwitchSection;
78import com.strobel.decompiler.languages.java.ast.SwitchStatement;
79import com.strobel.decompiler.languages.java.ast.SynchronizedStatement;
80import com.strobel.decompiler.languages.java.ast.TextNode;
81import com.strobel.decompiler.languages.java.ast.ThisReferenceExpression;
82import com.strobel.decompiler.languages.java.ast.ThrowStatement;
83import com.strobel.decompiler.languages.java.ast.TryCatchStatement;
84import com.strobel.decompiler.languages.java.ast.TypeDeclaration;
85import com.strobel.decompiler.languages.java.ast.TypeParameterDeclaration;
86import com.strobel.decompiler.languages.java.ast.TypeReferenceExpression;
87import com.strobel.decompiler.languages.java.ast.UnaryOperatorExpression;
88import com.strobel.decompiler.languages.java.ast.VariableDeclarationStatement;
89import com.strobel.decompiler.languages.java.ast.VariableInitializer;
90import com.strobel.decompiler.languages.java.ast.WhileStatement;
91import com.strobel.decompiler.languages.java.ast.WildcardType;
92import com.strobel.decompiler.patterns.Pattern;
93
94import cuchaz.enigma.mapping.ArgumentEntry;
95import cuchaz.enigma.mapping.ClassEntry;
96import cuchaz.enigma.mapping.ConstructorEntry;
97import cuchaz.enigma.mapping.FieldEntry;
98import cuchaz.enigma.mapping.MethodEntry;
99
100public class SourceIndexVisitor implements IAstVisitor<SourceIndex, Void>
101{
102 @Override
103 public Void visitInvocationExpression( InvocationExpression node, SourceIndex index )
104 {
105 MemberReference ref = node.getUserData( Keys.MEMBER_REFERENCE );
106 ClassEntry classEntry = new ClassEntry( ref.getDeclaringType().getInternalName() );
107 MethodEntry methodEntry = new MethodEntry( classEntry, ref.getName(), ref.getSignature() );
108 if( node.getTarget() instanceof MemberReferenceExpression )
109 {
110 index.add( ((MemberReferenceExpression)node.getTarget()).getMemberNameToken(), methodEntry );
111 }
112
113 return recurse( node, index );
114 }
115
116 @Override
117 public Void visitMemberReferenceExpression( MemberReferenceExpression node, SourceIndex index )
118 {
119 MemberReference ref = node.getUserData( Keys.MEMBER_REFERENCE );
120 if( ref != null )
121 {
122 ClassEntry classEntry = new ClassEntry( ref.getDeclaringType().getInternalName() );
123 FieldEntry fieldEntry = new FieldEntry( classEntry, ref.getName() );
124 index.add( node.getMemberNameToken(), fieldEntry );
125 }
126
127 return recurse( node, index );
128 }
129
130 @Override
131 public Void visitSimpleType( SimpleType node, SourceIndex index )
132 {
133 TypeReference ref = node.getUserData( Keys.TYPE_REFERENCE );
134 if( node.getIdentifierToken().getStartLocation() != TextLocation.EMPTY )
135 {
136 index.add( node.getIdentifierToken(), new ClassEntry( ref.getInternalName() ) );
137 }
138
139 return recurse( node, index );
140 }
141
142 @Override
143 public Void visitMethodDeclaration( MethodDeclaration node, SourceIndex index )
144 {
145 MethodDefinition def = node.getUserData( Keys.METHOD_DEFINITION );
146
147 // static initializers don't have identifier tokens
148 if( !def.getName().equals( "<clinit>" ) )
149 {
150 ClassEntry classEntry = new ClassEntry( def.getDeclaringType().getInternalName() );
151 MethodEntry methodEntry = new MethodEntry( classEntry, def.getName(), def.getSignature() );
152 index.addDeclaration( node.getNameToken(), methodEntry );
153 }
154
155 return recurse( node, index );
156 }
157
158 @Override
159 public Void visitConstructorDeclaration( ConstructorDeclaration node, SourceIndex index )
160 {
161 MethodDefinition def = node.getUserData( Keys.METHOD_DEFINITION );
162 ClassEntry classEntry = new ClassEntry( def.getDeclaringType().getInternalName() );
163 ConstructorEntry constructorEntry = new ConstructorEntry( classEntry, def.getSignature() );
164 index.addDeclaration( node.getNameToken(), constructorEntry );
165
166 return recurse( node, index );
167 }
168
169 @Override
170 public Void visitParameterDeclaration( ParameterDeclaration node, SourceIndex index )
171 {
172 ParameterDefinition def = node.getUserData( Keys.PARAMETER_DEFINITION );
173 ClassEntry classEntry = new ClassEntry( def.getDeclaringType().getInternalName() );
174 MethodDefinition methodDef = (MethodDefinition)def.getMethod();
175 MethodEntry methodEntry = new MethodEntry( classEntry, methodDef.getName(), methodDef.getSignature() );
176 ArgumentEntry argumentEntry = new ArgumentEntry( methodEntry, def.getPosition(), def.getName() );
177 index.addDeclaration( node.getNameToken(), argumentEntry );
178
179 return recurse( node, index );
180 }
181
182 @Override
183 public Void visitFieldDeclaration( FieldDeclaration node, SourceIndex index )
184 {
185 FieldDefinition def = node.getUserData( Keys.FIELD_DEFINITION );
186 ClassEntry classEntry = new ClassEntry( def.getDeclaringType().getInternalName() );
187 FieldEntry fieldEntry = new FieldEntry( classEntry, def.getName() );
188 assert( node.getVariables().size() == 1 );
189 VariableInitializer variable = node.getVariables().firstOrNullObject();
190 index.addDeclaration( variable.getNameToken(), fieldEntry );
191
192 return recurse( node, index );
193 }
194
195 @Override
196 public Void visitTypeDeclaration( TypeDeclaration node, SourceIndex index )
197 {
198 TypeDefinition def = node.getUserData( Keys.TYPE_DEFINITION );
199 index.addDeclaration( node.getNameToken(), new ClassEntry( def.getInternalName() ) );
200
201 return recurse( node, index );
202 }
203
204 @Override
205 public Void visitEnumValueDeclaration( EnumValueDeclaration node, SourceIndex index )
206 {
207 // treat enum declarations as field declarations
208 FieldDefinition def = node.getUserData( Keys.FIELD_DEFINITION );
209 ClassEntry classEntry = new ClassEntry( def.getDeclaringType().getInternalName() );
210 FieldEntry fieldEntry = new FieldEntry( classEntry, def.getName() );
211 index.addDeclaration( node.getNameToken(), fieldEntry );
212
213 return recurse( node, index );
214 }
215
216 @Override
217 public Void visitIdentifierExpression( IdentifierExpression node, SourceIndex index )
218 {
219 MemberReference ref = node.getUserData( Keys.MEMBER_REFERENCE );
220 if( ref != null )
221 {
222 ClassEntry classEntry = new ClassEntry( ref.getDeclaringType().getInternalName() );
223 FieldEntry fieldEntry = new FieldEntry( classEntry, ref.getName() );
224 index.add( node.getIdentifierToken(), fieldEntry );
225 }
226
227 return recurse( node, index );
228 }
229
230 private Void recurse( AstNode node, SourceIndex index )
231 {
232 for( final AstNode child : node.getChildren() )
233 {
234 child.acceptVisitor( this, index );
235 }
236 return null;
237 }
238
239 // OVERRIDES WE DON'T CARE ABOUT
240
241 @Override
242 public Void visitComment( Comment node, SourceIndex index )
243 {
244 return recurse( node, index );
245 }
246
247 @Override
248 public Void visitPatternPlaceholder( AstNode node, Pattern pattern, SourceIndex index )
249 {
250 return recurse( node, index );
251 }
252
253 @Override
254 public Void visitTypeReference( TypeReferenceExpression node, SourceIndex index )
255 {
256 return recurse( node, index );
257 }
258
259 @Override
260 public Void visitJavaTokenNode( JavaTokenNode node, SourceIndex index )
261 {
262 return recurse( node, index );
263 }
264
265 @Override
266 public Void visitIdentifier( Identifier node, SourceIndex index )
267 {
268 return recurse( node, index );
269 }
270
271 @Override
272 public Void visitNullReferenceExpression( NullReferenceExpression node, SourceIndex index )
273 {
274 return recurse( node, index );
275 }
276
277 @Override
278 public Void visitThisReferenceExpression( ThisReferenceExpression node, SourceIndex index )
279 {
280 return recurse( node, index );
281 }
282
283 @Override
284 public Void visitSuperReferenceExpression( SuperReferenceExpression node, SourceIndex index )
285 {
286 return recurse( node, index );
287 }
288
289 @Override
290 public Void visitClassOfExpression( ClassOfExpression node, SourceIndex index )
291 {
292 return recurse( node, index );
293 }
294
295 @Override
296 public Void visitBlockStatement( BlockStatement node, SourceIndex index )
297 {
298 return recurse( node, index );
299 }
300
301 @Override
302 public Void visitExpressionStatement( ExpressionStatement node, SourceIndex index )
303 {
304 return recurse( node, index );
305 }
306
307 @Override
308 public Void visitBreakStatement( BreakStatement node, SourceIndex index )
309 {
310 return recurse( node, index );
311 }
312
313 @Override
314 public Void visitContinueStatement( ContinueStatement node, SourceIndex index )
315 {
316 return recurse( node, index );
317 }
318
319 @Override
320 public Void visitDoWhileStatement( DoWhileStatement node, SourceIndex index )
321 {
322 return recurse( node, index );
323 }
324
325 @Override
326 public Void visitEmptyStatement( EmptyStatement node, SourceIndex index )
327 {
328 return recurse( node, index );
329 }
330
331 @Override
332 public Void visitIfElseStatement( IfElseStatement node, SourceIndex index )
333 {
334 return recurse( node, index );
335 }
336
337 @Override
338 public Void visitLabelStatement( LabelStatement node, SourceIndex index )
339 {
340 return recurse( node, index );
341 }
342
343 @Override
344 public Void visitLabeledStatement( LabeledStatement node, SourceIndex index )
345 {
346 return recurse( node, index );
347 }
348
349 @Override
350 public Void visitReturnStatement( ReturnStatement node, SourceIndex index )
351 {
352 return recurse( node, index );
353 }
354
355 @Override
356 public Void visitSwitchStatement( SwitchStatement node, SourceIndex index )
357 {
358 return recurse( node, index );
359 }
360
361 @Override
362 public Void visitSwitchSection( SwitchSection node, SourceIndex index )
363 {
364 return recurse( node, index );
365 }
366
367 @Override
368 public Void visitCaseLabel( CaseLabel node, SourceIndex index )
369 {
370 return recurse( node, index );
371 }
372
373 @Override
374 public Void visitThrowStatement( ThrowStatement node, SourceIndex index )
375 {
376 return recurse( node, index );
377 }
378
379 @Override
380 public Void visitCatchClause( CatchClause node, SourceIndex index )
381 {
382 return recurse( node, index );
383 }
384
385 @Override
386 public Void visitAnnotation( Annotation node, SourceIndex index )
387 {
388 return recurse( node, index );
389 }
390
391 @Override
392 public Void visitNewLine( NewLineNode node, SourceIndex index )
393 {
394 return recurse( node, index );
395 }
396
397 @Override
398 public Void visitVariableDeclaration( VariableDeclarationStatement node, SourceIndex index )
399 {
400 return recurse( node, index );
401 }
402
403 @Override
404 public Void visitVariableInitializer( VariableInitializer node, SourceIndex index )
405 {
406 return recurse( node, index );
407 }
408
409 @Override
410 public Void visitText( TextNode node, SourceIndex index )
411 {
412 return recurse( node, index );
413 }
414
415 @Override
416 public Void visitImportDeclaration( ImportDeclaration node, SourceIndex index )
417 {
418 return recurse( node, index );
419 }
420
421 @Override
422 public Void visitInitializerBlock( InstanceInitializer node, SourceIndex index )
423 {
424 return recurse( node, index );
425 }
426
427 @Override
428 public Void visitTypeParameterDeclaration( TypeParameterDeclaration node, SourceIndex index )
429 {
430 return recurse( node, index );
431 }
432
433 @Override
434 public Void visitCompilationUnit( CompilationUnit node, SourceIndex index )
435 {
436 return recurse( node, index );
437 }
438
439 @Override
440 public Void visitPackageDeclaration( PackageDeclaration node, SourceIndex index )
441 {
442 return recurse( node, index );
443 }
444
445 @Override
446 public Void visitArraySpecifier( ArraySpecifier node, SourceIndex index )
447 {
448 return recurse( node, index );
449 }
450
451 @Override
452 public Void visitComposedType( ComposedType node, SourceIndex index )
453 {
454 return recurse( node, index );
455 }
456
457 @Override
458 public Void visitWhileStatement( WhileStatement node, SourceIndex index )
459 {
460 return recurse( node, index );
461 }
462
463 @Override
464 public Void visitPrimitiveExpression( PrimitiveExpression node, SourceIndex index )
465 {
466 return recurse( node, index );
467 }
468
469 @Override
470 public Void visitCastExpression( CastExpression node, SourceIndex index )
471 {
472 return recurse( node, index );
473 }
474
475 @Override
476 public Void visitBinaryOperatorExpression( BinaryOperatorExpression node, SourceIndex index )
477 {
478 return recurse( node, index );
479 }
480
481 @Override
482 public Void visitInstanceOfExpression( InstanceOfExpression node, SourceIndex index )
483 {
484 return recurse( node, index );
485 }
486
487 @Override
488 public Void visitIndexerExpression( IndexerExpression node, SourceIndex index )
489 {
490 return recurse( node, index );
491 }
492
493 @Override
494 public Void visitUnaryOperatorExpression( UnaryOperatorExpression node, SourceIndex index )
495 {
496 return recurse( node, index );
497 }
498
499 @Override
500 public Void visitConditionalExpression( ConditionalExpression node, SourceIndex index )
501 {
502 return recurse( node, index );
503 }
504
505 @Override
506 public Void visitArrayInitializerExpression( ArrayInitializerExpression node, SourceIndex index )
507 {
508 return recurse( node, index );
509 }
510
511 @Override
512 public Void visitObjectCreationExpression( ObjectCreationExpression node, SourceIndex index )
513 {
514 return recurse( node, index );
515 }
516
517 @Override
518 public Void visitArrayCreationExpression( ArrayCreationExpression node, SourceIndex index )
519 {
520 return recurse( node, index );
521 }
522
523 @Override
524 public Void visitAssignmentExpression( AssignmentExpression node, SourceIndex index )
525 {
526 return recurse( node, index );
527 }
528
529 @Override
530 public Void visitForStatement( ForStatement node, SourceIndex index )
531 {
532 return recurse( node, index );
533 }
534
535 @Override
536 public Void visitForEachStatement( ForEachStatement node, SourceIndex index )
537 {
538 return recurse( node, index );
539 }
540
541 @Override
542 public Void visitTryCatchStatement( TryCatchStatement node, SourceIndex index )
543 {
544 return recurse( node, index );
545 }
546
547 @Override
548 public Void visitGotoStatement( GotoStatement node, SourceIndex index )
549 {
550 return recurse( node, index );
551 }
552
553 @Override
554 public Void visitParenthesizedExpression( ParenthesizedExpression node, SourceIndex index )
555 {
556 return recurse( node, index );
557 }
558
559 @Override
560 public Void visitSynchronizedStatement( SynchronizedStatement node, SourceIndex index )
561 {
562 return recurse( node, index );
563 }
564
565 @Override
566 public Void visitAnonymousObjectCreationExpression( AnonymousObjectCreationExpression node, SourceIndex index )
567 {
568 return recurse( node, index );
569 }
570
571 @Override
572 public Void visitWildcardType( WildcardType node, SourceIndex index )
573 {
574 return recurse( node, index );
575 }
576
577 @Override
578 public Void visitMethodGroupExpression( MethodGroupExpression node, SourceIndex index )
579 {
580 return recurse( node, index );
581 }
582
583 @Override
584 public Void visitAssertStatement( AssertStatement node, SourceIndex index )
585 {
586 return recurse( node, index );
587 }
588
589 @Override
590 public Void visitLambdaExpression( LambdaExpression node, SourceIndex index )
591 {
592 return recurse( node, index );
593 }
594
595 @Override
596 public Void visitLocalTypeDeclarationStatement( LocalTypeDeclarationStatement node, SourceIndex index )
597 {
598 return recurse( node, index );
599 }
600}