private void rewrite() { if (_switchMaps.isEmpty()) { return; } for (final SwitchMapInfo info : _switchMaps.values()) { rewrite(info); } // // Remove switch map type wrappers that are no longer referenced. // outer: for (final SwitchMapInfo info : _switchMaps.values()) { if (info.switchMapMethod == null || info.switchMapFieldDeclaration == null || info.switchMapMethodDeclaration == null) { continue; } final List<SwitchStatement> switches = info.switches; if (switches.isEmpty() && !context.getSettings().getShowSyntheticMembers()) { info.switchMapFieldDeclaration.remove(); info.switchMapMethodDeclaration.remove(); } } }
private void rewrite(final SwitchMapInfo info) { if (info.switches.isEmpty()) { return; } final List<SwitchStatement> switches = info.switches; final Map<Integer, Expression> mappings = info.mappings; for (int i = 0; i < switches.size(); i++) { if (rewriteSwitch(switches.get(i), mappings)) { switches.remove(i--); } } }
final MethodReference switchMapMethod = (MethodReference) switchMapMethodCall.getUserData(Keys.MEMBER_REFERENCE); if (!isSwitchMapMethod(switchMapMethod)) { return super.visitSwitchStatement(node, data); final String key = makeKey(switchMapField);
final MethodReference switchMapMethod = (MethodReference) switchMapMethodCall.getUserData(Keys.MEMBER_REFERENCE); if (!isSwitchMapMethod(switchMapMethod)) { return super.visitSwitchStatement(node, data); final String key = makeKey(switchMapField);
final MethodReference switchMapMethod = (MethodReference) switchMapMethodCall.getUserData(Keys.MEMBER_REFERENCE); if (!isSwitchMapMethod(switchMapMethod)) { return super.visitSwitchStatement(node, data); final String key = makeKey(switchMapField);
@Override public Void visitMethodDeclaration(final MethodDeclaration node, final Void _) { final MethodDefinition methodDefinition = node.getUserData(Keys.METHOD_DEFINITION); if (isSwitchMapMethod(methodDefinition)) { final Match m = SWITCH_TABLE_METHOD_BODY.match(node.getBody()); if (m.success()) { final MemberReferenceExpression fieldAccess = first(m.<MemberReferenceExpression>get("fieldAccess")); final FieldReference field = (FieldReference) fieldAccess.getUserData(Keys.MEMBER_REFERENCE); final List<MemberReferenceExpression> enumValues = toList(m.<MemberReferenceExpression>get("enumValue")); final List<PrimitiveExpression> tableValues = toList(m.<PrimitiveExpression>get("tableValue")); assert field != null && tableValues.size() == enumValues.size(); final String key = makeKey(field); SwitchMapInfo info = _switchMaps.get(key); if (info == null) { _switchMaps.put(key, info = new SwitchMapInfo(field)); } info.switchMapMethodDeclaration = node; for (int i = 0; i < enumValues.size(); i++) { final MemberReferenceExpression memberReference = enumValues.get(i); final IdentifierExpression identifier = new IdentifierExpression( Expression.MYSTERY_OFFSET, memberReference.getMemberName()); identifier.putUserData(Keys.MEMBER_REFERENCE, memberReference.getUserData(Keys.MEMBER_REFERENCE)); info.mappings.put((Integer) tableValues.get(i).getValue(), identifier); } } } return super.visitMethodDeclaration(node, _); }
@Override public Void visitMethodDeclaration(final MethodDeclaration node, final Void _) { final MethodDefinition methodDefinition = node.getUserData(Keys.METHOD_DEFINITION); if (isSwitchMapMethod(methodDefinition)) { final Match m = SWITCH_TABLE_METHOD_BODY.match(node.getBody()); if (m.success()) { final MemberReferenceExpression fieldAccess = first(m.<MemberReferenceExpression>get("fieldAccess")); final FieldReference field = (FieldReference) fieldAccess.getUserData(Keys.MEMBER_REFERENCE); final List<MemberReferenceExpression> enumValues = toList(m.<MemberReferenceExpression>get("enumValue")); final List<PrimitiveExpression> tableValues = toList(m.<PrimitiveExpression>get("tableValue")); assert field != null && tableValues.size() == enumValues.size(); final String key = makeKey(field); SwitchMapInfo info = _switchMaps.get(key); if (info == null) { _switchMaps.put(key, info = new SwitchMapInfo(field)); } info.switchMapMethodDeclaration = node; for (int i = 0; i < enumValues.size(); i++) { final MemberReferenceExpression memberReference = enumValues.get(i); final IdentifierExpression identifier = new IdentifierExpression( Expression.MYSTERY_OFFSET, memberReference.getMemberName()); identifier.putUserData(Keys.MEMBER_REFERENCE, memberReference.getUserData(Keys.MEMBER_REFERENCE)); info.mappings.put((Integer) tableValues.get(i).getValue(), identifier); } } } return super.visitMethodDeclaration(node, _); }
@Override public Void visitMethodDeclaration(final MethodDeclaration node, final Void p) { final MethodDefinition methodDefinition = node.getUserData(Keys.METHOD_DEFINITION); if (isSwitchMapMethod(methodDefinition)) { final Match m = SWITCH_TABLE_METHOD_BODY.match(node.getBody()); if (m.success()) { final MemberReferenceExpression fieldAccess = first(m.<MemberReferenceExpression>get("fieldAccess")); final FieldReference field = (FieldReference) fieldAccess.getUserData(Keys.MEMBER_REFERENCE); final List<MemberReferenceExpression> enumValues = toList(m.<MemberReferenceExpression>get("enumValue")); final List<PrimitiveExpression> tableValues = toList(m.<PrimitiveExpression>get("tableValue")); assert field != null && tableValues.size() == enumValues.size(); final String key = makeKey(field); SwitchMapInfo info = _switchMaps.get(key); if (info == null) { _switchMaps.put(key, info = new SwitchMapInfo(field)); } info.switchMapMethodDeclaration = node; for (int i = 0; i < enumValues.size(); i++) { final MemberReferenceExpression memberReference = enumValues.get(i); final IdentifierExpression identifier = new IdentifierExpression( Expression.MYSTERY_OFFSET, memberReference.getMemberName()); identifier.putUserData(Keys.MEMBER_REFERENCE, memberReference.getUserData(Keys.MEMBER_REFERENCE)); info.mappings.put((Integer) tableValues.get(i).getValue(), identifier); } } } return super.visitMethodDeclaration(node, p); }
private void rewrite() { if (_switchMaps.isEmpty()) { return; } for (final SwitchMapInfo info : _switchMaps.values()) { rewrite(info); } // // Remove switch map type wrappers that are no longer referenced. // for (final SwitchMapInfo info : _switchMaps.values()) { if (info.switchMapMethod == null || info.switchMapFieldDeclaration == null || info.switchMapMethodDeclaration == null) { continue; } final List<SwitchStatement> switches = info.switches; if (switches.isEmpty() && !context.getSettings().getShowSyntheticMembers()) { info.switchMapFieldDeclaration.remove(); info.switchMapMethodDeclaration.remove(); } } }
private void rewrite() { if (_switchMaps.isEmpty()) { return; } for (final SwitchMapInfo info : _switchMaps.values()) { rewrite(info); } // // Remove switch map type wrappers that are no longer referenced. // outer: for (final SwitchMapInfo info : _switchMaps.values()) { if (info.switchMapMethod == null || info.switchMapFieldDeclaration == null || info.switchMapMethodDeclaration == null) { continue; } final List<SwitchStatement> switches = info.switches; if (switches.isEmpty() && !context.getSettings().getShowSyntheticMembers()) { info.switchMapFieldDeclaration.remove(); info.switchMapMethodDeclaration.remove(); } } }
@Override public Void visitFieldDeclaration(final FieldDeclaration node, final Void data) { final FieldReference field = (FieldReference) node.getUserData(Keys.MEMBER_REFERENCE); if (isSwitchMapField(field)) { final String key = makeKey(field); SwitchMapInfo info = _switchMaps.get(key); if (info == null) { _switchMaps.put(key, info = new SwitchMapInfo(field)); } info.switchMapFieldDeclaration = node; } return super.visitFieldDeclaration(node, data); }
@Override public Void visitFieldDeclaration(final FieldDeclaration node, final Void data) { final FieldReference field = (FieldReference) node.getUserData(Keys.MEMBER_REFERENCE); if (isSwitchMapField(field)) { final String key = makeKey(field); SwitchMapInfo info = _switchMaps.get(key); if (info == null) { _switchMaps.put(key, info = new SwitchMapInfo(field)); } info.switchMapFieldDeclaration = node; } return super.visitFieldDeclaration(node, data); }
@Override public Void visitFieldDeclaration(final FieldDeclaration node, final Void data) { final FieldReference field = (FieldReference) node.getUserData(Keys.MEMBER_REFERENCE); if (isSwitchMapField(field)) { final String key = makeKey(field); SwitchMapInfo info = _switchMaps.get(key); if (info == null) { _switchMaps.put(key, info = new SwitchMapInfo(field)); } info.switchMapFieldDeclaration = node; } return super.visitFieldDeclaration(node, data); }
@Override public void run(final AstNode compilationUnit) { final Visitor visitor = new Visitor(_context); compilationUnit.acceptVisitor(visitor, null); visitor.rewrite(); }
@Override public void run(final AstNode compilationUnit) { final Visitor visitor = new Visitor(_context); compilationUnit.acceptVisitor(visitor, null); visitor.rewrite(); }
private void rewrite(final SwitchMapInfo info) { if (info.switches.isEmpty()) { return; } final List<SwitchStatement> switches = info.switches; final Map<Integer, Expression> mappings = info.mappings; for (int i = 0; i < switches.size(); i++) { if (rewriteSwitch(switches.get(i), mappings)) { switches.remove(i--); } } }
@Override public void run(final AstNode compilationUnit) { final Visitor visitor = new Visitor(_context); compilationUnit.acceptVisitor(visitor, null); visitor.rewrite(); }
private void rewrite(final SwitchMapInfo info) { if (info.switches.isEmpty()) { return; } final List<SwitchStatement> switches = info.switches; final Map<Integer, Expression> mappings = info.mappings; for (int i = 0; i < switches.size(); i++) { if (rewriteSwitch(switches.get(i), mappings)) { switches.remove(i--); } } }