diff --git a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalRegrouperForC.java b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalRegrouperForC.java index 719a173..323becd 100644 --- a/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalRegrouperForC.java +++ b/src/main/java/edu/lu/uni/serval/fixminer/akka/ediff/HierarchicalRegrouperForC.java @@ -84,7 +84,67 @@ public class HierarchicalRegrouperForC { // } } } - return reActionSets; + List reActionSets1 = new ArrayList<>(); + for(HierarchicalActionSet a:reActionSets){ + HierarchicalActionSet hierarchicalActionSet = removeBlocks(a); + hierarchicalActionSet = removeIFthenBlocks(hierarchicalActionSet); + reActionSets1.add(hierarchicalActionSet); + + } + return reActionSets1; +// return reActionSets; + } + + private HierarchicalActionSet removeBlocks(HierarchicalActionSet actionSet){ + List subActions = actionSet.getSubActions(); + if (subActions.size() == 1){ + HierarchicalActionSet subaction = subActions.get(0); + //else,then,block + if(subaction.getAstNodeType().equals("block")){//|| subaction.getAstNodeType().equals("then") || subaction.getAstNodeType().equals("else")){ + List subSubActions = subaction.getSubActions(); + if(subSubActions.size() == 1){ + + HierarchicalActionSet subsubsubAction = subSubActions.get(0); + List keysByValue = NodeMap_new.getKeysByValue(NodeMap_new.StatementMap, subsubsubAction.getAstNodeType()); + if(keysByValue != null && keysByValue.size() ==1){ + subsubsubAction.setParent(null); + return removeBlocks(subsubsubAction); + + } + } + } + } + return actionSet; + + } + private HierarchicalActionSet removeIFthenBlocks(HierarchicalActionSet actionSet){ + List subActions = actionSet.getSubActions(); + if (subActions.size() == 1){ + HierarchicalActionSet subaction = subActions.get(0); + //else,then,block + if(subaction.getAstNodeType().equals("then")|| subaction.getAstNodeType().equals("else")){//|| subaction.getAstNodeType().equals("then") || subaction.getAstNodeType().equals("else")){ + List subSubActions = subaction.getSubActions(); + if(subSubActions.size() == 1){ + + HierarchicalActionSet subsubsubAction = subSubActions.get(0); + if(subsubsubAction.getAstNodeType().equals("block")){ + List subActions1 = subsubsubAction.getSubActions(); + if (subActions1.size() ==1){ + HierarchicalActionSet hierarchicalActionSet = subActions1.get(0); + List keysByValue = NodeMap_new.getKeysByValue(NodeMap_new.StatementMap, hierarchicalActionSet.getAstNodeType()); + if(keysByValue != null && keysByValue.size() ==1){ + hierarchicalActionSet.setParent(null); + return removeBlocks(hierarchicalActionSet); + + } + } + } + + } + } + } + return actionSet; + } private HierarchicalActionSet createActionSet(Action act, Action parentAct, HierarchicalActionSet parent) {