@Override public void run(final AstNode compilationUnit) { compilationUnit.acceptVisitor( new ContextTrackingVisitor<Void>(context) { @Override public Void visitMethodDeclaration(final MethodDeclaration node, final Void p) { final MemberReference methodReference = node.getUserData(Keys.MEMBER_REFERENCE); if (methodReference instanceof MethodReference) { _methodDeclarations.put(makeMethodKey((MethodReference) methodReference), node); } return super.visitMethodDeclaration(node, p); } }, null ); super.run(compilationUnit); }
@Override public Void visitAnonymousObjectCreationExpression(final AnonymousObjectCreationExpression node, final Void data) { final MethodDefinition oldInitializer = _currentInitializerMethod; final MethodDefinition oldConstructor = _currentConstructor; _currentInitializerMethod = null; _currentConstructor = null; try { return super.visitAnonymousObjectCreationExpression(node, data); } finally { _currentInitializerMethod = oldInitializer; _currentConstructor = oldConstructor; } }
@Override public Void visitAssignmentExpression(final AssignmentExpression node, final Void data) { super.visitAssignmentExpression(node, data); removeAssertionsDisabledAssignment(node); return null; }
private static void rewriteThisReferences( final DecompilerContext context, final TypeDeclaration declaration, final Map<String, Expression> initializers) { final TypeDefinition innerClass = declaration.getUserData(Keys.TYPE_DEFINITION); if (innerClass != null) { final ContextTrackingVisitor<Void> thisRewriter = new ThisReferenceReplacingVisitor(context, innerClass); for (final Expression e : initializers.values()) { thisRewriter.run(e); } } }
@Override public Void visitConstructorDeclaration(final ConstructorDeclaration node, final Void _) { final boolean wasInConstructor = _inConstructor; _inConstructor = true; try { return super.visitConstructorDeclaration(node, _); } finally { _inConstructor = wasInConstructor; } }
@Override public Void visitBinaryOperatorExpression(final BinaryOperatorExpression node, final Void data) { super.visitBinaryOperatorExpression(node, data);
@Override public Void visitCastExpression(final CastExpression node, final Void data) { super.visitCastExpression(node, data); final List<CastExpression> redundantCasts = RedundantCastUtility.getRedundantCastsInside( _resolver, skipParenthesesUp(node.getParent()) ); if (redundantCasts.contains(node)) { RedundantCastUtility.removeCast(node); } return null; }
@Override public Void visitConditionalExpression(final ConditionalExpression node, final Void data) { super.visitConditionalExpression(node, data); final Expression condition = node.getCondition(); final ResolveResult conditionResult = _resolver.apply(condition); if (conditionResult != null && TypeUtilities.isArithmetic(conditionResult.getType())) { convertNumericToBoolean(condition, conditionResult.getType()); } return null; }
@Override public AstNode visitExpressionStatement(final ExpressionStatement node, final Void data) { final AstNode n = super.visitExpressionStatement(node, data); if (!context.getSettings().getDisableForEachTransforms() && n instanceof ExpressionStatement) { final AstNode result = transformForEach((ExpressionStatement) n); if (result != null) { return result.acceptVisitor(this, data); } } return n; }
@Override protected Void visitChildren(final AstNode node, final Void _) { final MethodDefinition currentMethod = context.getCurrentMethod(); if (currentMethod != null && !(currentMethod.isConstructor()/* && currentMethod.isSynthetic()*/)) { return null; } return super.visitChildren(node, _); }
new ContextTrackingVisitor<Void>(context) { @Override public Void visitIdentifier(final Identifier node, final Void _) {
private static void rewriteThisReferences( final DecompilerContext context, final TypeDeclaration declaration, final Map<String, Expression> initializers) { final TypeDefinition innerClass = declaration.getUserData(Keys.TYPE_DEFINITION); if (innerClass != null) { final ContextTrackingVisitor<Void> thisRewriter = new ThisReferenceReplacingVisitor(context, innerClass); for (final Expression e : initializers.values()) { thisRewriter.run(e); } } }
@Override public Void visitConstructorDeclaration(final ConstructorDeclaration node, final Void p) { final boolean wasInConstructor = _inConstructor; _inConstructor = true; try { return super.visitConstructorDeclaration(node, p); } finally { _inConstructor = wasInConstructor; } }
@Override public Void visitBinaryOperatorExpression(final BinaryOperatorExpression node, final Void data) { super.visitBinaryOperatorExpression(node, data);
@Override public Void visitCastExpression(final CastExpression node, final Void data) { super.visitCastExpression(node, data); final List<CastExpression> redundantCasts = RedundantCastUtility.getRedundantCastsInside( _resolver, skipParenthesesUp(node.getParent()) ); if (redundantCasts.contains(node)) { RedundantCastUtility.removeCast(node); } return null; }
@Override public Void visitConditionalExpression(final ConditionalExpression node, final Void data) { super.visitConditionalExpression(node, data); final Expression condition = node.getCondition(); final ResolveResult conditionResult = _resolver.apply(condition); if (conditionResult != null && TypeUtilities.isArithmetic(conditionResult.getType())) { convertNumericToBoolean(condition, conditionResult.getType()); } return null; }
@Override public AstNode visitExpressionStatement(final ExpressionStatement node, final Void data) { final AstNode n = super.visitExpressionStatement(node, data); if (!context.getSettings().getDisableForEachTransforms() && n instanceof ExpressionStatement) { final AstNode result = transformForEach((ExpressionStatement) n); if (result != null) { return result.acceptVisitor(this, data); } } return n; }
@Override protected Void visitChildren(final AstNode node, final Void p) { final MethodDefinition currentMethod = context.getCurrentMethod(); if (currentMethod != null && !(currentMethod.isConstructor()/* && currentMethod.isSynthetic()*/)) { return null; } return super.visitChildren(node, p); }
new ContextTrackingVisitor<Void>(context) { @Override public Void visitIdentifier(final Identifier node, final Void p) {
@Override public void run(final AstNode compilationUnit) { compilationUnit.acceptVisitor( new ContextTrackingVisitor<Void>(context) { @Override public Void visitMethodDeclaration(final MethodDeclaration node, final Void _) { final MemberReference methodReference = node.getUserData(Keys.MEMBER_REFERENCE); if (methodReference instanceof MethodReference) { _methodDeclarations.put(makeMethodKey((MethodReference) methodReference), node); } return super.visitMethodDeclaration(node, _); } }, null ); super.run(compilationUnit); }