All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.refactoringminer.astDiff.matchers.statement.GeneralMatcher Maven / Gradle / Ivy

package org.refactoringminer.astDiff.matchers.statement;

import com.github.gumtreediff.tree.Tree;
import gr.uom.java.xmi.decomposition.AbstractCodeFragment;
import gr.uom.java.xmi.decomposition.AbstractExpression;
import gr.uom.java.xmi.decomposition.CompositeStatementObject;
import org.refactoringminer.astDiff.models.ExtendedMultiMappingStore;
import org.refactoringminer.astDiff.matchers.TreeMatcher;
import org.refactoringminer.astDiff.utils.TreeUtilFunctions;

/** Use this matcher when two code fragments must be matched. 
* If you know that both fragments are composite, use {@link CompositeMatcher} instead.
* @author Pourya Alikhani Fard [email protected] */ public class GeneralMatcher extends BasicTreeMatcher implements TreeMatcher { AbstractCodeFragment st1; AbstractCodeFragment st2; public GeneralMatcher(AbstractCodeFragment st1, AbstractCodeFragment st2) { this.st1 = st1; this.st2 = st2; } @Override public void match(Tree src, Tree dst, ExtendedMultiMappingStore mappingStore) { if ((st1 instanceof CompositeStatementObject) && (st2 instanceof CompositeStatementObject)) { new CompositeMatcher((CompositeStatementObject) st1, (CompositeStatementObject) st2) .match(src, dst, mappingStore); return; } //Corner cases; if (!(st1 instanceof CompositeStatementObject) && (st2 instanceof CompositeStatementObject)) { CompositeStatementObject fragment2 = (CompositeStatementObject) st2; for (AbstractExpression expression : fragment2.getExpressions()) { Tree dstExpTree = TreeUtilFunctions.findByLocationInfo(dst, expression.getLocationInfo()); new LeafMatcher().match(src,dstExpTree,mappingStore); } } else if ((st1 instanceof CompositeStatementObject) && !(st2 instanceof CompositeStatementObject)) { CompositeStatementObject fragment1 = (CompositeStatementObject) st1; for (AbstractExpression expression : fragment1.getExpressions()) { Tree srcExpTree = TreeUtilFunctions.findByLocationInfo(src, expression.getLocationInfo()); new LeafMatcher().match(srcExpTree,dst,mappingStore); } } else { new LeafMatcher().match(src,dst,mappingStore); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy