From e8367bbd4e6efef2eb4d496c52079c94f0c5133d Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Fri, 30 Aug 2024 15:23:51 +0200
Subject: [PATCH 01/35] Use Map instead of LinkedHashMap
---
.../src/org/splevo/diffing/util/NormalizationUtil.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/commit-based-cipm/bundles/fi/org.splevo.diffing/src/org/splevo/diffing/util/NormalizationUtil.java b/commit-based-cipm/bundles/fi/org.splevo.diffing/src/org/splevo/diffing/util/NormalizationUtil.java
index 9d76db89b2..97e2cf598b 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.diffing/src/org/splevo/diffing/util/NormalizationUtil.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.diffing/src/org/splevo/diffing/util/NormalizationUtil.java
@@ -64,7 +64,7 @@ public static String normalize(String original, Map normalizati
* The list of normalizations to apply.
* @return The normalized name space string.
*/
- public static String normalizeNamespace(String namespace, LinkedHashMap normalizations) {
+ public static String normalizeNamespace(String namespace, Map normalizations) {
namespace = Strings.nullToEmpty(namespace);
for (Pattern pattern : normalizations.keySet()) {
From c0976343f849810d016860d712b67598210d4a0a Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Fri, 30 Aug 2024 15:38:07 +0200
Subject: [PATCH 02/35] Extract structure
from SimilarityChecker and related classes
---
.../base/AbstractSimilarityChecker.java | 71 +++++++++++++++
.../base/AbstractSimilarityComparer.java | 57 ++++++++++++
.../AbstractSimilarityToolboxBuilder.java | 82 ++++++++++++++++++
.../similarity/base/ISimilarityChecker.java | 45 ++++++++++
.../similarity/base/ISimilarityComparer.java | 33 +++++++
.../similarity/base/ISimilarityRequest.java | 23 +++++
.../base/ISimilarityRequestHandler.java | 44 ++++++++++
.../similarity/base/ISimilarityToolbox.java | 75 ++++++++++++++++
.../base/ISimilarityToolboxBuilder.java | 86 +++++++++++++++++++
.../base/ISimilarityToolboxFactory.java | 22 +++++
.../similarity/base/MapSimilarityToolbox.java | 70 +++++++++++++++
.../base/MapSimilarityToolboxFactory.java | 13 +++
.../diffing/similarity/base/package-info.java | 73 ++++++++++++++++
13 files changed, 694 insertions(+)
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/AbstractSimilarityChecker.java
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/AbstractSimilarityComparer.java
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/AbstractSimilarityToolboxBuilder.java
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/ISimilarityChecker.java
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/ISimilarityComparer.java
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/ISimilarityRequest.java
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/ISimilarityRequestHandler.java
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/ISimilarityToolbox.java
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/ISimilarityToolboxBuilder.java
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/ISimilarityToolboxFactory.java
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/MapSimilarityToolbox.java
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/MapSimilarityToolboxFactory.java
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/package-info.java
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/AbstractSimilarityChecker.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/AbstractSimilarityChecker.java
new file mode 100644
index 0000000000..b1c45afe4b
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/AbstractSimilarityChecker.java
@@ -0,0 +1,71 @@
+package org.splevo.jamopp.diffing.similarity.base;
+
+/**
+ * An abstract class for similarity checkers to extend. Complements
+ * {@link ISimilarityChecker} with the integration of
+ * {@link ISimilarityComparer}.
+ *
+ * Does not implement {@link ISimilarityRequestHandler}, because its concrete
+ * implementors are thought to serve as facades to the outside. They are thus
+ * not intended to be used during the similarity checking process, other than a
+ * call to similarity checking methods, such as
+ * {@link #isSimilar(Object, Object)}, at the start.
+ *
+ * @author atora
+ */
+public abstract class AbstractSimilarityChecker implements ISimilarityChecker {
+ /**
+ * The {@link ISimilarityComparer}, to which incoming {@link ISimilarityRequest}
+ * instances are to be delegated.
+ */
+ private ISimilarityComparer sc;
+
+ /**
+ * Constructs an {@link AbstractSimilarityChecker} instance with an
+ * {@link ISimilarityComparer}, which delegates all incoming
+ * {@link ISimilarityRequest} to the given parameter.
+ *
+ * @param st {@link ISimilarityToolbox} to which all incoming
+ * {@link ISimilarityRequest} instances will be delegated to.
+ */
+ public AbstractSimilarityChecker(ISimilarityToolbox st) {
+ this.sc = this.createSimilarityComparer(st);
+ }
+
+ /**
+ * Declared as protected only to allow access to the underlying
+ * {@link ISimilarityComparer} from concrete implementors.
+ *
+ * @return {@link ISimilarityToolbox} to which all incoming
+ * {@link ISimilarityRequest} instances will be delegated to.
+ */
+ protected ISimilarityComparer getSimilarityComparer() {
+ return this.sc;
+ }
+
+ /**
+ * Delegates the incoming {@link ISimilarityRequest} to the underlying
+ * {@link ISimilarityComparer}.
+ *
+ * Declared as protected only to let concrete implementors delegate incoming
+ * {@link ISimilarityRequest} instances to their {@link ISimilarityComparer}.
+ *
+ *
+ * This is necessary, because creating further internal constructs that contain
+ * similarity checking logic, such as similarity switches, may involve using
+ * {@link ISimilarityRequestHandler} instances and that in return requires
+ * delegating {@link ISimilarityRequest} instances.
+ */
+ protected Object handleSimilarityRequest(ISimilarityRequest req) {
+ return this.getSimilarityComparer().handleSimilarityRequest(req);
+ }
+
+ /**
+ * Creates an {@link ISimilarityComparer} with the given
+ * {@link ISimilarityToolbox}.
+ *
+ * @param st The {@link ISimilarityToolbox} that the constructed
+ * {@link ISimilarityComparer} will use.
+ */
+ protected abstract ISimilarityComparer createSimilarityComparer(ISimilarityToolbox st);
+}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/AbstractSimilarityComparer.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/AbstractSimilarityComparer.java
new file mode 100644
index 0000000000..992135469a
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/AbstractSimilarityComparer.java
@@ -0,0 +1,57 @@
+package org.splevo.jamopp.diffing.similarity.base;
+
+/**
+ * An abstract class for similarity comparers to extend. Complements
+ * {@link ISimilarityComparer} with the integration of
+ * {@link ISimilarityToolbox}.
+ *
+ * Delegates incoming {@link ISimilarityRequest} instances to its
+ * {@link ISimilarityToolbox}.
+ *
+ * @author atora
+ */
+public abstract class AbstractSimilarityComparer implements ISimilarityComparer {
+ /**
+ * The {@link ISimilarityToolbox}, to which all incoming
+ * {@link ISimilarityRequest} instances should be delegated to.
+ */
+ private ISimilarityToolbox st;
+
+ /**
+ * Constructs an instance with a given {@link ISimilarityToolbox}
+ *
+ * @param st The {@link ISimilarityToolbox}, to which all incoming
+ * {@link ISimilarityRequest} instances should be delegated to.
+ */
+ public AbstractSimilarityComparer(ISimilarityToolbox st) {
+ this.st = st;
+ }
+
+ /**
+ * @return The {@link ISimilarityToolbox}, to which all incoming
+ * {@link ISimilarityRequest} instances should be delegated to.
+ */
+ protected ISimilarityToolbox getSimilarityToolbox() {
+ return this.st;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Here, this method is delegated to {@link #getSimilarityToolbox()}.
+ */
+ @Override
+ public Object handleSimilarityRequest(ISimilarityRequest req) {
+ return this.getSimilarityToolbox().handleSimilarityRequest(req);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Here, this method is delegated to {@link #getSimilarityToolbox()}.
+ */
+ @Override
+ public boolean canHandleSimilarityRequest(Class extends ISimilarityRequest> reqClass) {
+ return this.getSimilarityToolbox().canHandleSimilarityRequest(reqClass);
+ }
+}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/AbstractSimilarityToolboxBuilder.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/AbstractSimilarityToolboxBuilder.java
new file mode 100644
index 0000000000..8bfb4aadff
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/AbstractSimilarityToolboxBuilder.java
@@ -0,0 +1,82 @@
+package org.splevo.jamopp.diffing.similarity.base;
+
+/**
+ * An abstract class for concrete similarity {@link ISimilarityToolbox} builders
+ * to extend. Complements {@link ISimilarityToolboxBuilder} with the integration
+ * of {@link ISimilarityToolboxFactory}.
+ *
+ * @author atora
+ */
+public abstract class AbstractSimilarityToolboxBuilder implements ISimilarityToolboxBuilder {
+ /**
+ * The {@link ISimilarityToolboxFactory}, which determines the data structure
+ * used to store request-handler pairs within the {@link ISimilarityToolbox}
+ * instances built using this builder.
+ */
+ private ISimilarityToolboxFactory stf;
+
+ /**
+ * The current version of the {@link ISimilarityToolbox} instance being built.
+ */
+ private ISimilarityToolbox st;
+
+ /**
+ * Constructs an instance.
+ */
+ public AbstractSimilarityToolboxBuilder() {
+ super();
+ }
+
+ @Override
+ public void setSimilarityToolboxFactory(ISimilarityToolboxFactory stf) {
+ this.stf = stf;
+ }
+
+ /**
+ * @return The {@link ISimilarityToolboxFactory}, which determines the data
+ * structure used to store request-handler pairs within the
+ * {@link ISimilarityToolbox} instances built using this builder.
+ */
+ @Override
+ public ISimilarityToolboxFactory getToolboxFactory() {
+ return this.stf;
+ }
+
+ /**
+ * Meant to allow concrete implementors the access to the current version of the
+ * {@link ISimilarityToolbox} under construction.
+ *
+ * @return The current version of the {@link ISimilarityToolbox} instance being
+ * built.
+ */
+ protected ISimilarityToolbox getCurrentToolbox() {
+ return this.st;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Resets the {@link ISimilarityToolbox} instance currently being built to
+ * null.
+ */
+ @Override
+ public ISimilarityToolbox build() {
+ var result = this.getCurrentToolbox();
+ this.st = null;
+ return result;
+ }
+
+ @Override
+ public ISimilarityToolboxBuilder instantiate() {
+ this.st = this.getToolboxFactory().createSimilarityToolbox();
+ return this;
+ }
+
+ @Override
+ public ISimilarityToolboxBuilder buildRequestHandlerPair(Class extends ISimilarityRequest> req,
+ ISimilarityRequestHandler srh) {
+ this.getCurrentToolbox().addRequestHandlerPair(req, srh);
+ return this;
+ }
+
+}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/ISimilarityChecker.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/ISimilarityChecker.java
new file mode 100644
index 0000000000..7ffa15af18
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/base/ISimilarityChecker.java
@@ -0,0 +1,45 @@
+package org.splevo.jamopp.diffing.similarity.base;
+
+import java.util.Collection;
+
+/**
+ * An interface for classes that contain the means to compare elements and
+ * compute their similarity. The classes implementing this interface, the
+ * similarity checkers, are meant to serve as facades to outside.
+ *
+ * {@link AbstractSimilarityChecker} contains further useful methods for
+ * similarity checkers. It is therefore recommended to extend
+ * {@link AbstractSimilarityChecker} for similarity checker classes rather than
+ * implementing this interface alone. {@link AbstractSimilarityChecker} also
+ * makes use of {@link ISimilarityComparer}, which can be used to free the
+ * implementors of {@link ISimilarityChecker} of internal details.
+ *
+ * If the structure defined in {@link AbstractSimilarityChecker} is not to be
+ * used, this interface can be directly implemented.
+ *
+ * @see {@link AbstractSimilarityChecker}, {@link ISimilarityComparer}
+ * @author atora
+ */
+public interface ISimilarityChecker {
+ /**
+ * Check the similarity of two elements.
+ *
+ * @param element1 The first element.
+ * @param element2 The second element.
+ * @return TRUE, if they are similar; FALSE if not, NULL if it can't be decided.
+ */
+ public Boolean isSimilar(Object element1, Object element2);
+
+ /**
+ * Check two lists of elements for similarity.
+ *
+ * The elements are compared pairwise and it is the responsibility of the
+ * provided list implementations to return them in an appropriate order by
+ * calling get(i) with a increasing index i.
+ *
+ * @return TRUE, if they are all similar; FALSE if a different number of
+ * elements is submitted or at least one pair of elements is not similar
+ * to each other.
+ */
+ public Boolean areSimilar(Collection
*/
-private class OperatorsSimilaritySwitch extends OperatorsSwitch {
+public class OperatorsSimilaritySwitch extends OperatorsSwitch {
@Override
public Boolean defaultCase(EObject object) {
return Boolean.TRUE;
}
-}
+}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ParametersSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ParametersSimilaritySwitch.java
index 1683b3a9a6..9e4f412b4f 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ParametersSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ParametersSimilaritySwitch.java
@@ -2,6 +2,8 @@
import org.emftext.language.java.parameters.Parameter;
import org.emftext.language.java.parameters.util.ParametersSwitch;
+import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
import com.google.common.base.Strings;
@@ -12,12 +14,28 @@
* more identifying attributes or references exist.
*
*/
-private class ParametersSimilaritySwitch extends ParametersSwitch {
- @Override
+public class ParametersSimilaritySwitch extends ParametersSwitch implements IJavaSimilarityInnerSwitch {
+ private IJavaSimilaritySwitch similaritySwitch;
+
+ @Override
+ public ISimilarityRequestHandler getSimilarityRequestHandler() {
+ return this.similaritySwitch;
+ }
+
+ @Override
+ public IJavaSimilaritySwitch getContainingSwitch() {
+ return this.similaritySwitch;
+ }
+
+ public ParametersSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch) {
+ this.similaritySwitch = similaritySwitch;
+ }
+
+ @Override
public Boolean caseParameter(Parameter param1) {
- Parameter param2 = (Parameter) compareElement;
+ Parameter param2 = (Parameter) this.getCompareElement();
String name1 = Strings.nullToEmpty(param1.getName());
String name2 = Strings.nullToEmpty(param2.getName());
return (name1.equals(name2));
}
-}
+}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ReferencesSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ReferencesSimilaritySwitch.java
index 2feaf933ba..1991124f0f 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ReferencesSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ReferencesSimilaritySwitch.java
@@ -10,17 +10,41 @@
import org.emftext.language.java.references.ReferenceableElement;
import org.emftext.language.java.references.StringReference;
import org.emftext.language.java.references.util.ReferencesSwitch;
+import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
import org.splevo.jamopp.util.JaMoPPElementUtil;
/**
* Similarity decisions for reference elements.
*/
-private class ReferencesSimilaritySwitch extends ReferencesSwitch {
-
- @Override
+public class ReferencesSimilaritySwitch extends ReferencesSwitch implements IJavaSimilarityPositionInnerSwitch {
+ private IJavaSimilaritySwitch similaritySwitch;
+ private boolean checkStatementPosition;
+
+ @Override
+ public ISimilarityRequestHandler getSimilarityRequestHandler() {
+ return this.similaritySwitch;
+ }
+
+ @Override
+ public boolean shouldCheckStatementPosition() {
+ return this.checkStatementPosition;
+ }
+
+ @Override
+ public IJavaSimilaritySwitch getContainingSwitch() {
+ return this.similaritySwitch;
+ }
+
+ public ReferencesSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boolean checkStatementPosition) {
+ this.similaritySwitch = similaritySwitch;
+ this.checkStatementPosition = checkStatementPosition;
+ }
+
+ @Override
public Boolean caseStringReference(StringReference ref1) {
- StringReference ref2 = (StringReference) compareElement;
+ StringReference ref2 = (StringReference) this.getCompareElement();
if (ref1.getValue() == null) {
return (ref2.getValue() == null);
}
@@ -31,12 +55,12 @@ public Boolean caseStringReference(StringReference ref1) {
@Override
public Boolean caseIdentifierReference(IdentifierReference ref1) {
- IdentifierReference ref2 = (IdentifierReference) compareElement;
+ IdentifierReference ref2 = (IdentifierReference) this.getCompareElement();
ReferenceableElement target1 = ref1.getTarget();
ReferenceableElement target2 = ref2.getTarget();
// target identity similarity
- Boolean similarity = similarityChecker.isSimilar(target1, target2);
+ Boolean similarity = this.isSimilar(target1, target2);
if (similarity == Boolean.FALSE) {
return Boolean.FALSE;
}
@@ -56,7 +80,7 @@ public Boolean caseIdentifierReference(IdentifierReference ref1) {
EObject target2Container = target2.eContainer();
if (target1Container != ref1Container && target2Container != ref2Container
&& target1Container != ref1 && target2Container != ref2) {
- Boolean containerSimilarity = similarityChecker.isSimilar(target1Container, target2Container);
+ Boolean containerSimilarity = this.isSimilar(target1Container, target2Container);
if (containerSimilarity == Boolean.FALSE) {
return Boolean.FALSE;
}
@@ -69,7 +93,7 @@ public Boolean caseIdentifierReference(IdentifierReference ref1) {
for (int i = 0; i < ref1.getArraySelectors().size(); i++) {
ArraySelector selector1 = ref1.getArraySelectors().get(i);
ArraySelector selector2 = ref2.getArraySelectors().get(i);
- Boolean positionSimilarity = similarityChecker.isSimilar(selector1.getPosition(),
+ Boolean positionSimilarity = this.isSimilar(selector1.getPosition(),
selector2.getPosition());
if (positionSimilarity == Boolean.FALSE) {
return Boolean.FALSE;
@@ -78,7 +102,7 @@ public Boolean caseIdentifierReference(IdentifierReference ref1) {
Reference next1 = ref1.getNext();
Reference next2 = ref2.getNext();
- Boolean nextSimilarity = similarityChecker.isSimilar(next1, next2);
+ Boolean nextSimilarity = this.isSimilar(next1, next2);
if (nextSimilarity == Boolean.FALSE) {
return Boolean.FALSE;
}
@@ -98,9 +122,9 @@ public Boolean caseIdentifierReference(IdentifierReference ref1) {
*/
@Override
public Boolean caseElementReference(ElementReference ref1) {
- ElementReference ref2 = (ElementReference) compareElement;
+ ElementReference ref2 = (ElementReference) this.getCompareElement();
- Boolean targetSimilarity = similarityChecker.isSimilar(ref1.getTarget(), ref2.getTarget());
+ Boolean targetSimilarity = this.isSimilar(ref1.getTarget(), ref2.getTarget());
if (targetSimilarity == Boolean.FALSE) {
return Boolean.FALSE;
}
@@ -119,9 +143,9 @@ public Boolean caseElementReference(ElementReference ref1) {
*/
@Override
public Boolean caseMethodCall(MethodCall call1) {
- MethodCall call2 = (MethodCall) compareElement;
+ MethodCall call2 = (MethodCall) this.getCompareElement();
- Boolean targetSimilarity = similarityChecker.isSimilar(call1.getTarget(), call2.getTarget());
+ Boolean targetSimilarity = this.isSimilar(call1.getTarget(), call2.getTarget());
if (targetSimilarity == Boolean.FALSE) {
return Boolean.FALSE;
}
@@ -133,13 +157,13 @@ public Boolean caseMethodCall(MethodCall call1) {
for (int i = 0; i < call1.getArguments().size(); i++) {
Expression exp1 = call1.getArguments().get(i);
Expression exp2 = call2.getArguments().get(i);
- Boolean argSimilarity = similarityChecker.isSimilar(exp1, exp2);
+ Boolean argSimilarity = this.isSimilar(exp1, exp2);
if (argSimilarity == Boolean.FALSE) {
return Boolean.FALSE;
}
}
- Boolean nextSimilarity = similarityChecker.isSimilar(call1.getNext(), call2.getNext());
+ Boolean nextSimilarity = this.isSimilar(call1.getNext(), call2.getNext());
if (nextSimilarity == Boolean.FALSE) {
return Boolean.FALSE;
}
@@ -151,4 +175,4 @@ public Boolean caseMethodCall(MethodCall call1) {
public Boolean defaultCase(EObject object) {
return Boolean.TRUE;
}
-}
+}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/StatementsSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/StatementsSimilaritySwitch.java
index 0c9dd5d5ea..d00b64891e 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/StatementsSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/StatementsSimilaritySwitch.java
@@ -17,6 +17,8 @@
import org.emftext.language.java.statements.Throw;
import org.emftext.language.java.statements.util.StatementsSwitch;
import org.emftext.language.java.variables.Variable;
+import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
import org.splevo.jamopp.util.JaMoPPElementUtil;
import com.google.common.base.Strings;
@@ -24,23 +26,29 @@
/**
* Similarity decisions for the statement elements.
*/
-private class StatementsSimilaritySwitch extends StatementsSwitch {
-
- /**
- * Flag if the position of a statement should be considered for similarity or not.
- */
- private boolean checkStatementPosition = true;
-
- /**
- * Constructor to set required configurations.
- *
- * @param checkStatementPosition
- * Flag if the position of a statement should be considered for similarity or
- * not.
- */
- public StatementsSimilaritySwitch(boolean checkStatementPosition) {
- this.checkStatementPosition = checkStatementPosition;
- }
+public class StatementsSimilaritySwitch extends StatementsSwitch implements IJavaSimilarityPositionInnerSwitch {
+ private IJavaSimilaritySwitch similaritySwitch;
+ private boolean checkStatementPosition;
+
+ @Override
+ public ISimilarityRequestHandler getSimilarityRequestHandler() {
+ return this.similaritySwitch;
+ }
+
+ @Override
+ public boolean shouldCheckStatementPosition() {
+ return this.checkStatementPosition;
+ }
+
+ @Override
+ public IJavaSimilaritySwitch getContainingSwitch() {
+ return this.similaritySwitch;
+ }
+
+ public StatementsSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boolean checkStatementPosition) {
+ this.similaritySwitch = similaritySwitch;
+ this.checkStatementPosition = checkStatementPosition;
+ }
/**
* Check expression statement similarity.
@@ -56,18 +64,18 @@ public StatementsSimilaritySwitch(boolean checkStatementPosition) {
@Override
public Boolean caseExpressionStatement(ExpressionStatement statement1) {
- ExpressionStatement statement2 = (ExpressionStatement) compareElement;
+ ExpressionStatement statement2 = (ExpressionStatement) this.getCompareElement();
Expression exp1 = statement1.getExpression();
Expression exp2 = statement2.getExpression();
- Boolean expSimilarity = similarityChecker.isSimilar(exp1, exp2);
+ Boolean expSimilarity = this.isSimilar(exp1, exp2);
if (expSimilarity == Boolean.FALSE) {
return Boolean.FALSE;
}
// check predecessor similarity
- if (checkStatementPosition) {
+ if (this.shouldCheckStatementPosition()) {
if (differentPredecessor(statement1, statement2) && differentSuccessor(statement1, statement2)) {
return Boolean.FALSE;
}
@@ -88,17 +96,17 @@ public Boolean caseExpressionStatement(ExpressionStatement statement1) {
*/
@Override
public Boolean caseLocalVariableStatement(LocalVariableStatement varStmt1) {
- LocalVariableStatement varStmt2 = (LocalVariableStatement) compareElement;
+ LocalVariableStatement varStmt2 = (LocalVariableStatement) this.getCompareElement();
Variable var1 = varStmt1.getVariable();
Variable var2 = varStmt2.getVariable();
- Boolean varSimilarity = similarityChecker.isSimilar(var1, var2);
+ Boolean varSimilarity = this.isSimilar(var1, var2);
if (varSimilarity == Boolean.FALSE) {
return Boolean.FALSE;
}
- if (checkStatementPosition) {
- varSimilarity = similarityChecker.isSimilar(varStmt1.eContainer(), varStmt2.eContainer(), false);
+ if (this.shouldCheckStatementPosition()) {
+ varSimilarity = this.isSimilar(varStmt1.eContainer(), varStmt2.eContainer(), false);
if (!varSimilarity) {
return Boolean.FALSE;
}
@@ -124,12 +132,12 @@ public Boolean caseLocalVariableStatement(LocalVariableStatement varStmt1) {
@Override
public Boolean caseReturn(Return returnStatement1) {
- Return returnStatement2 = (Return) compareElement;
+ Return returnStatement2 = (Return) this.getCompareElement();
Expression exp1 = returnStatement1.getReturnValue();
Expression exp2 = returnStatement2.getReturnValue();
- return similarityChecker.isSimilar(exp1, exp2);
+ return this.isSimilar(exp1, exp2);
}
/**
@@ -146,16 +154,16 @@ public Boolean caseReturn(Return returnStatement1) {
@Override
public Boolean caseSynchronizedBlock(SynchronizedBlock statement1) {
- SynchronizedBlock statement2 = (SynchronizedBlock) compareElement;
+ SynchronizedBlock statement2 = (SynchronizedBlock) this.getCompareElement();
Expression exp1 = statement1.getLockProvider();
Expression exp2 = statement2.getLockProvider();
- Boolean similarity = similarityChecker.isSimilar(exp1, exp2);
+ Boolean similarity = this.isSimilar(exp1, exp2);
if (similarity == Boolean.FALSE) {
return Boolean.FALSE;
}
- if (checkStatementPosition) {
+ if (this.shouldCheckStatementPosition()) {
if (differentPredecessor(statement1, statement2) && differentSuccessor(statement1, statement2)) {
return Boolean.FALSE;
}
@@ -181,12 +189,12 @@ public Boolean caseThrow(Throw throwStatement1) {
@Override
public Boolean caseCatchBlock(CatchBlock catchBlock1) {
- CatchBlock catchBlock2 = (CatchBlock) compareElement;
+ CatchBlock catchBlock2 = (CatchBlock) this.getCompareElement();
OrdinaryParameter catchedException1 = catchBlock1.getParameter();
OrdinaryParameter catchedException2 = catchBlock2.getParameter();
- Boolean exceptionSimilarity = similarityChecker.isSimilar(catchedException1, catchedException2);
+ Boolean exceptionSimilarity = this.isSimilar(catchedException1, catchedException2);
if (exceptionSimilarity == Boolean.FALSE) {
return exceptionSimilarity;
}
@@ -214,11 +222,11 @@ public Boolean caseCatchBlock(CatchBlock catchBlock1) {
@Override
public Boolean caseConditional(Conditional conditional1) {
- Conditional conditional2 = (Conditional) compareElement;
+ Conditional conditional2 = (Conditional) this.getCompareElement();
Expression expression1 = conditional1.getCondition();
Expression expression2 = conditional2.getCondition();
- Boolean expressionSimilarity = similarityChecker.isSimilar(expression1, expression2);
+ Boolean expressionSimilarity = this.isSimilar(expression1, expression2);
if (expressionSimilarity == Boolean.FALSE) {
return expressionSimilarity;
}
@@ -228,9 +236,9 @@ public Boolean caseConditional(Conditional conditional1) {
@Override
public Boolean caseJump(Jump jump1) {
- Jump jump2 = (Jump) compareElement;
+ Jump jump2 = (Jump) this.getCompareElement();
- Boolean similarity = similarityChecker.isSimilar(jump1.getTarget(), jump2.getTarget());
+ Boolean similarity = this.isSimilar(jump1.getTarget(), jump2.getTarget());
if (similarity == Boolean.FALSE) {
return Boolean.FALSE;
}
@@ -241,7 +249,7 @@ public Boolean caseJump(Jump jump1) {
@Override
public Boolean caseJumpLabel(JumpLabel label1) {
- JumpLabel label2 = (JumpLabel) compareElement;
+ JumpLabel label2 = (JumpLabel) this.getCompareElement();
String name1 = Strings.nullToEmpty(label1.getName());
String name2 = Strings.nullToEmpty(label2.getName());
@@ -251,9 +259,9 @@ public Boolean caseJumpLabel(JumpLabel label1) {
@Override
public Boolean caseSwitch(Switch switch1) {
- Switch switch2 = (Switch) compareElement;
+ Switch switch2 = (Switch) this.getCompareElement();
- return similarityChecker.isSimilar(switch1.getVariable(), switch2.getVariable());
+ return this.isSimilar(switch1.getVariable(), switch2.getVariable());
}
@Override
@@ -273,7 +281,7 @@ public Boolean defaultCase(EObject object) {
private boolean differentPredecessor(Statement statement1, Statement statement2) {
Statement pred1 = getPredecessor(statement1);
Statement pred2 = getPredecessor(statement2);
- Boolean similarity = similarityChecker.isSimilar(pred1, pred2, false);
+ Boolean similarity = this.isSimilar(pred1, pred2, false);
return similarity == Boolean.FALSE;
}
@@ -289,7 +297,7 @@ private boolean differentPredecessor(Statement statement1, Statement statement2)
private boolean differentSuccessor(Statement statement1, Statement statement2) {
Statement pred1 = getSuccessor(statement1);
Statement pred2 = getSuccessor(statement2);
- Boolean similarity = similarityChecker.isSimilar(pred1, pred2, false);
+ Boolean similarity = this.isSimilar(pred1, pred2, false);
return similarity == Boolean.FALSE;
}
@@ -334,4 +342,4 @@ private Statement getSuccessor(Statement statement) {
return null;
}
-}
+}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/TypesSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/TypesSimilaritySwitch.java
index 76287588e8..711795e256 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/TypesSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/TypesSimilaritySwitch.java
@@ -7,16 +7,40 @@
import org.emftext.language.java.types.PrimitiveType;
import org.emftext.language.java.types.TypeReference;
import org.emftext.language.java.types.util.TypesSwitch;
-import org.splevo.jamopp.diffing.similarity.SimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
+import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.JavaSimilarityChecker;
import com.google.common.base.Strings;
/**
* Similarity decisions for elements of the types package.
*/
-private class TypesSimilaritySwitch extends TypesSwitch {
-
- /**
+public class TypesSimilaritySwitch extends TypesSwitch implements IJavaSimilarityPositionInnerSwitch {
+ private IJavaSimilaritySwitch similaritySwitch;
+ private boolean checkStatementPosition;
+
+ @Override
+ public ISimilarityRequestHandler getSimilarityRequestHandler() {
+ return this.similaritySwitch;
+ }
+
+ @Override
+ public boolean shouldCheckStatementPosition() {
+ return this.checkStatementPosition;
+ }
+
+ @Override
+ public IJavaSimilaritySwitch getContainingSwitch() {
+ return this.similaritySwitch;
+ }
+
+ public TypesSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boolean checkStatementPosition) {
+ this.similaritySwitch = similaritySwitch;
+ this.checkStatementPosition = checkStatementPosition;
+ }
+
+ /**
* Check element reference similarity.
*
* Is checked by the target (the method called). Everything else are containment references
@@ -28,9 +52,9 @@ private class TypesSimilaritySwitch extends TypesSwitch {
*/
@Override
public Boolean caseClassifierReference(ClassifierReference ref1) {
- ClassifierReference ref2 = (ClassifierReference) compareElement;
+ ClassifierReference ref2 = (ClassifierReference) this.getCompareElement();
- Boolean targetSimilarity = similarityChecker.isSimilar(ref1.getTarget(), ref2.getTarget());
+ Boolean targetSimilarity = this.isSimilar(ref1.getTarget(), ref2.getTarget());
if (targetSimilarity == Boolean.FALSE) {
return Boolean.FALSE;
}
@@ -41,9 +65,9 @@ public Boolean caseClassifierReference(ClassifierReference ref1) {
@Override
public Boolean caseTypeReference(TypeReference ref1) {
- TypeReference ref2 = (TypeReference) compareElement;
+ TypeReference ref2 = (TypeReference) this.getCompareElement();
- Boolean targetSimilarity = similarityChecker.isSimilar(ref1.getTarget(), ref2.getTarget());
+ Boolean targetSimilarity = this.isSimilar(ref1.getTarget(), ref2.getTarget());
if (targetSimilarity == Boolean.FALSE) {
return Boolean.FALSE;
}
@@ -54,7 +78,7 @@ public Boolean caseTypeReference(TypeReference ref1) {
@Override
public Boolean caseNamespaceClassifierReference(NamespaceClassifierReference ref1) {
- NamespaceClassifierReference ref2 = (NamespaceClassifierReference) compareElement;
+ NamespaceClassifierReference ref2 = (NamespaceClassifierReference) this.getCompareElement();
String namespace1 = Strings.nullToEmpty(ref1.getNamespacesAsString());
String namespace2 = Strings.nullToEmpty(ref2.getNamespacesAsString());
@@ -65,12 +89,12 @@ public Boolean caseNamespaceClassifierReference(NamespaceClassifierReference ref
ClassifierReference pureRef1 = ref1.getPureClassifierReference();
ClassifierReference pureRef2 = ref2.getPureClassifierReference();
- return similarityChecker.isSimilar(pureRef1, pureRef2);
+ return this.isSimilar(pureRef1, pureRef2);
}
/**
* Primitive types are always similar as their class similarity is assumed before by the
- * outer {@link SimilarityChecker}.
+ * outer {@link JavaSimilarityChecker}.
*
* Note: The fall back to the default case is not sufficient here, as the common
* TypeReference case would be used before, leading to a loop.
@@ -97,11 +121,11 @@ public Boolean caseInferableType(InferableType type) {
/**
* Primitive type elements are strongly typed and the exact type is already checked by the
- * outer {@link SimilarityChecker}.
+ * outer {@link JavaSimilarityChecker}.
* {@inheritDoc}
*/
@Override
public Boolean defaultCase(EObject object) {
return Boolean.TRUE;
}
-}
+}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/VariablesSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/VariablesSimilaritySwitch.java
index a9946b1986..15e672cb69 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/VariablesSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/VariablesSimilaritySwitch.java
@@ -3,15 +3,32 @@
import org.emftext.language.java.variables.AdditionalLocalVariable;
import org.emftext.language.java.variables.Variable;
import org.emftext.language.java.variables.util.VariablesSwitch;
+import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
import com.google.common.base.Strings;
/**
* Similarity decisions for the variable elements.
*/
-private class VariablesSimilaritySwitch extends VariablesSwitch {
+public class VariablesSimilaritySwitch extends VariablesSwitch implements IJavaSimilarityInnerSwitch {
+ private IJavaSimilaritySwitch similaritySwitch;
- /**
+ @Override
+ public ISimilarityRequestHandler getSimilarityRequestHandler() {
+ return this.similaritySwitch;
+ }
+
+ @Override
+ public IJavaSimilaritySwitch getContainingSwitch() {
+ return this.similaritySwitch;
+ }
+
+ public VariablesSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch) {
+ this.similaritySwitch = similaritySwitch;
+ }
+
+ /**
* Check variable declaration similarity.
* Similarity is checked by
*
@@ -26,7 +43,7 @@ private class VariablesSimilaritySwitch extends VariablesSwitch {
@Override
public Boolean caseVariable(Variable var1) {
- Variable var2 = (Variable) compareElement;
+ Variable var2 = (Variable) this.getCompareElement();
// check the variables name equality
if (!var1.getName().equals(var2.getName())) {
@@ -38,7 +55,7 @@ public Boolean caseVariable(Variable var1) {
@Override
public Boolean caseAdditionalLocalVariable(AdditionalLocalVariable var1) {
- AdditionalLocalVariable var2 = (AdditionalLocalVariable) compareElement;
+ AdditionalLocalVariable var2 = (AdditionalLocalVariable) this.getCompareElement();
// check the variables name equality
String name1 = Strings.nullToEmpty(var1.getName());
@@ -49,4 +66,4 @@ public Boolean caseAdditionalLocalVariable(AdditionalLocalVariable var1) {
return Boolean.TRUE;
}
-}
+}
\ No newline at end of file
From a5d337fe194caa23d08f560ea9b66cb2475b51a2 Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Thu, 25 Apr 2024 23:09:56 +0200
Subject: [PATCH 22/35] (WIP) Add logging to Java-related inner switches
Non-functional commit
---
.../switches/AnnotationsSimilaritySwitch.java | 14 +++++---
.../switches/ArraysSimilaritySwitch.java | 5 ++-
.../switches/ClassifiersSimilaritySwitch.java | 8 +++--
.../switches/CommonsSimilaritySwitch.java | 5 ++-
.../switches/ContainersSimilaritySwitch.java | 13 +++++---
.../switches/ExpressionsSimilaritySwitch.java | 16 ++++++++-
.../switches/GenericsSimilaritySwitch.java | 13 +++++++-
.../switches/ImportsSimilaritySwitch.java | 5 ++-
.../InstantiationsSimilaritySwitch.java | 8 ++++-
.../switches/LayoutSimilaritySwitch.java | 5 ++-
.../switches/LiteralsSimilaritySwitch.java | 33 ++++++++++++++++++-
.../switches/MembersSimilaritySwitch.java | 8 ++++-
.../switches/ModifiersSimilaritySwitch.java | 5 ++-
.../switches/ModulesSimilaritySwitch.java | 13 +++++++-
.../switches/OperatorsSimilaritySwitch.java | 5 ++-
.../switches/ParametersSimilaritySwitch.java | 5 ++-
.../switches/ReferencesSimilaritySwitch.java | 11 ++++++-
.../switches/StatementsSimilaritySwitch.java | 19 ++++++++++-
.../switches/TypesSimilaritySwitch.java | 13 +++++++-
.../switches/VariablesSimilaritySwitch.java | 6 +++-
20 files changed, 183 insertions(+), 27 deletions(-)
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/AnnotationsSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/AnnotationsSimilaritySwitch.java
index 46bb1a6ca0..ceffa1f9e0 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/AnnotationsSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/AnnotationsSimilaritySwitch.java
@@ -38,10 +38,12 @@ public AnnotationsSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boole
@Override
public Boolean caseAnnotationInstance(AnnotationInstance instance1) {
+ this.logMessage("caseAnnotationInstance");
+
AnnotationInstance instance2 = (AnnotationInstance) this.getCompareElement();
this.logComparison(
- instance1.getAnnotation().getName(),
- instance2.getAnnotation().getName(),
+ instance1.getAnnotation(),
+ instance2.getAnnotation(),
AnnotationInstance.class.getSimpleName());
Classifier class1 = instance1.getAnnotation();
@@ -66,8 +68,10 @@ public Boolean caseAnnotationInstance(AnnotationInstance instance1) {
@Override
public Boolean caseAnnotationAttributeSetting(AnnotationAttributeSetting setting1) {
+ this.logMessage("caseAnnotationAttributeSetting");
+
AnnotationAttributeSetting setting2 = (AnnotationAttributeSetting) this.getCompareElement();
- this.logComparison(setting1.getAttribute().getName(), setting2.getAttribute().getName(), AnnotationAttributeSetting.class.getSimpleName());
+ this.logComparison(setting1.getAttribute(), setting2.getAttribute(), AnnotationAttributeSetting.class.getSimpleName());
Boolean similarity = this.isSimilar(setting1.getAttribute(), setting2.getAttribute());
this.logResult(similarity, AnnotationAttributeSetting.class.getSimpleName());
if (similarity == Boolean.FALSE) {
@@ -78,7 +82,9 @@ public Boolean caseAnnotationAttributeSetting(AnnotationAttributeSetting setting
@Override
public Boolean defaultCase(EObject object) {
- this.logMessage("Default annotation comparing case (" + object.eClass().getName() +"), similarity: true");
+ this.logMessage("defaultCase for Annotation");
+
+ this.logMessage("Default annotation comparing case for "+AnnotationsSimilaritySwitch.class.getSimpleName()+", similarity: true");
return Boolean.TRUE;
}
}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ArraysSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ArraysSimilaritySwitch.java
index 4f09f34fa4..5dc5aee00f 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ArraysSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ArraysSimilaritySwitch.java
@@ -2,6 +2,7 @@
import org.eclipse.emf.ecore.EObject;
import org.emftext.language.java.arrays.util.ArraysSwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
/**
* Similarity decision for array elements.
@@ -10,9 +11,11 @@
* and runtime type are assumed to be checked before this switch is called. So nothing to check
* here.
*/
-public class ArraysSimilaritySwitch extends ArraysSwitch {
+public class ArraysSimilaritySwitch extends ArraysSwitch implements ILoggableJavaSwitch {
@Override
public Boolean defaultCase(EObject object) {
+ this.logMessage("defaultCase for Array");
+
return Boolean.TRUE;
}
}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ClassifiersSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ClassifiersSimilaritySwitch.java
index 82eeac624b..24c3a3c038 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ClassifiersSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ClassifiersSimilaritySwitch.java
@@ -4,6 +4,7 @@
import org.emftext.language.java.classifiers.ConcreteClassifier;
import org.emftext.language.java.classifiers.util.ClassifiersSwitch;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
import com.google.common.base.Strings;
@@ -11,7 +12,7 @@
/**
* Similarity decisions for classifier elements.
*/
-public class ClassifiersSimilaritySwitch extends ClassifiersSwitch implements IJavaSimilarityPositionInnerSwitch {
+public class ClassifiersSimilaritySwitch extends ClassifiersSwitch implements ILoggableJavaSwitch, IJavaSimilarityPositionInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
private boolean checkStatementPosition;
@@ -45,7 +46,8 @@ public ClassifiersSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boole
*/
@Override
public Boolean caseConcreteClassifier(ConcreteClassifier classifier1) {
-
+ this.logMessage("caseConcreteClassifier");
+
ConcreteClassifier classifier2 = (ConcreteClassifier) this.getCompareElement();
String name1 = this.normalizeClassifier(classifier1.getQualifiedName());
@@ -62,6 +64,8 @@ public Boolean caseConcreteClassifier(ConcreteClassifier classifier1) {
*/
@Override
public Boolean caseAnonymousClass(AnonymousClass anon) {
+ this.logMessage("caseAnonymousClass");
+
return Boolean.TRUE;
}
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/CommonsSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/CommonsSimilaritySwitch.java
index 9e9920d25f..38fb70cb04 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/CommonsSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/CommonsSimilaritySwitch.java
@@ -3,12 +3,13 @@
import org.emftext.language.java.commons.NamedElement;
import org.emftext.language.java.commons.util.CommonsSwitch;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
/**
* Similarity decisions for commons elements.
*/
-public class CommonsSimilaritySwitch extends CommonsSwitch implements IJavaSimilarityPositionInnerSwitch {
+public class CommonsSimilaritySwitch extends CommonsSwitch implements ILoggableJavaSwitch, IJavaSimilarityPositionInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
private boolean checkStatementPosition;
@@ -43,6 +44,8 @@ public CommonsSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boolean c
*/
@Override
public Boolean caseNamedElement(NamedElement element1) {
+ this.logMessage("caseNamedElement");
+
NamedElement element2 = (NamedElement) this.getCompareElement();
if (element1.getName() == null) {
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ContainersSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ContainersSimilaritySwitch.java
index 1d17d6d70c..ab98afce0c 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ContainersSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ContainersSimilaritySwitch.java
@@ -53,9 +53,10 @@ public ContainersSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boolea
*/
@Override
public Boolean caseCompilationUnit(CompilationUnit unit1) {
+ this.logMessage("caseCompilationUnit");
+
CompilationUnit unit2 = (CompilationUnit) this.getCompareElement();
this.logComparison(unit1.getName(), unit2.getName(), CompilationUnit.class.getSimpleName());
- this.logComparison(unit1.eClass().getName(), unit2.eClass().getName(), "compilation unit class");
String name1 = this.normalizeCompilationUnit(unit1.getName());
name1 = this.normalizePackage(name1);
@@ -91,14 +92,16 @@ public Boolean caseCompilationUnit(CompilationUnit unit1) {
*/
@Override
public Boolean casePackage(Package package1) {
+ this.logMessage("casePackage");
+
Package package2 = (Package) this.getCompareElement();
- this.logComparison(package1.getName(), package2.getName(), Package.class.getSimpleName());
- this.logComparison(package1.getNamespacesAsString(), package2.getNamespacesAsString(), "package namespace");
+ this.logComparison(package1, package2, Package.class.getSimpleName());
String packagePath1 = JaMoPPModelUtil.buildNamespacePath(package1);
packagePath1 = this.normalizeNamespace(packagePath1);
String packagePath2 = JaMoPPModelUtil.buildNamespacePath(package2);
+ this.logComparison(packagePath1, packagePath2, "package namespace");
this.logResult(packagePath1.equals(packagePath2), "package path");
if (!packagePath1.equals(packagePath2)) {
@@ -120,10 +123,12 @@ public Boolean casePackage(Package package1) {
*/
@Override
public Boolean caseModule(org.emftext.language.java.containers.Module module1) {
+ this.logMessage("caseModule");
+
org.emftext.language.java.containers.Module module2 =
(org.emftext.language.java.containers.Module) this.getCompareElement();
- this.logResult(module1.getName().equals(module2.getName()), Module.class.getSimpleName());
+ this.logResult(module1.getName().equals(module2.getName()), org.emftext.language.java.containers.Module.class.getSimpleName());
if (!module1.getName().equals(module2.getName())) {
return Boolean.FALSE;
}
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ExpressionsSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ExpressionsSimilaritySwitch.java
index 0a1bb74f98..d444317384 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ExpressionsSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ExpressionsSimilaritySwitch.java
@@ -28,6 +28,7 @@
import org.emftext.language.java.operators.UnaryOperator;
import org.emftext.language.java.types.TypeReference;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
/**
@@ -38,7 +39,7 @@
* called.
*
*/
-public class ExpressionsSimilaritySwitch extends ExpressionsSwitch implements IJavaSimilarityPositionInnerSwitch {
+public class ExpressionsSimilaritySwitch extends ExpressionsSwitch implements ILoggableJavaSwitch, IJavaSimilarityPositionInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
private boolean checkStatementPosition;
@@ -64,6 +65,7 @@ public ExpressionsSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boole
@Override
public Boolean caseAssignmentExpression(AssignmentExpression exp1) {
+ this.logMessage("caseAssignmentExpression");
AssignmentExpression exp2 = (AssignmentExpression) this.getCompareElement();
@@ -93,6 +95,8 @@ public Boolean caseAssignmentExpression(AssignmentExpression exp1) {
@Override
public Boolean caseEqualityExpression(EqualityExpression exp1) {
+ this.logMessage("caseEqualityExpression");
+
EqualityExpression exp2 = (EqualityExpression) this.getCompareElement();
// check operator equality
@@ -116,6 +120,7 @@ public Boolean caseEqualityExpression(EqualityExpression exp1) {
@Override
public Boolean caseRelationExpression(RelationExpression exp1) {
+ this.logMessage("caseRelationExpression");
RelationExpression exp2 = (RelationExpression) this.getCompareElement();
@@ -140,6 +145,7 @@ public Boolean caseRelationExpression(RelationExpression exp1) {
@Override
public Boolean caseAndExpression(AndExpression exp1) {
+ this.logMessage("caseAndExpression");
AndExpression exp2 = (AndExpression) this.getCompareElement();
@@ -156,6 +162,7 @@ public Boolean caseAndExpression(AndExpression exp1) {
@Override
public Boolean caseUnaryExpression(UnaryExpression exp1) {
+ this.logMessage("caseUnaryExpression");
UnaryExpression exp2 = (UnaryExpression) this.getCompareElement();
@@ -175,6 +182,7 @@ public Boolean caseUnaryExpression(UnaryExpression exp1) {
@Override
public Boolean caseAdditiveExpression(AdditiveExpression exp1) {
+ this.logMessage("caseAdditiveExpression");
AdditiveExpression exp2 = (AdditiveExpression) this.getCompareElement();
@@ -188,6 +196,7 @@ public Boolean caseAdditiveExpression(AdditiveExpression exp1) {
@Override
public Boolean caseInstanceOfExpression(InstanceOfExpression exp1) {
+ this.logMessage("caseInstanceOfExpression");
InstanceOfExpression exp2 = (InstanceOfExpression) this.getCompareElement();
@@ -207,6 +216,7 @@ public Boolean caseInstanceOfExpression(InstanceOfExpression exp1) {
@Override
public Boolean caseConditionalOrExpression(ConditionalOrExpression exp1) {
+ this.logMessage("caseConditionalOrExpression");
ConditionalOrExpression exp2 = (ConditionalOrExpression) this.getCompareElement();
@@ -218,6 +228,7 @@ public Boolean caseConditionalOrExpression(ConditionalOrExpression exp1) {
@Override
public Boolean caseConditionalAndExpression(ConditionalAndExpression exp1) {
+ this.logMessage("caseConditionalAndExpression");
ConditionalAndExpression exp2 = (ConditionalAndExpression) this.getCompareElement();
@@ -229,6 +240,7 @@ public Boolean caseConditionalAndExpression(ConditionalAndExpression exp1) {
@Override
public Boolean caseNestedExpression(NestedExpression exp1) {
+ this.logMessage("caseNestedExpression");
NestedExpression exp2 = (NestedExpression) this.getCompareElement();
@@ -240,6 +252,8 @@ public Boolean caseNestedExpression(NestedExpression exp1) {
@Override
public Boolean defaultCase(EObject object) {
+ this.logMessage("defaultCase for Expression");
+
return Boolean.TRUE;
}
}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/GenericsSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/GenericsSimilaritySwitch.java
index 7309c29b65..5b176f9c98 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/GenericsSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/GenericsSimilaritySwitch.java
@@ -7,12 +7,13 @@
import org.emftext.language.java.generics.UnknownTypeArgument;
import org.emftext.language.java.generics.util.GenericsSwitch;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
/**
* Similarity decisions for the generic elements.
*/
-public class GenericsSimilaritySwitch extends GenericsSwitch implements IJavaSimilarityPositionInnerSwitch {
+public class GenericsSimilaritySwitch extends GenericsSwitch implements ILoggableJavaSwitch, IJavaSimilarityPositionInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
private boolean checkStatementPosition;
@@ -38,29 +39,39 @@ public GenericsSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boolean
@Override
public Boolean caseQualifiedTypeArgument(QualifiedTypeArgument qta1) {
+ this.logMessage("caseQualifiedTypeArgument");
+
QualifiedTypeArgument qta2 = (QualifiedTypeArgument) this.getCompareElement();
return this.isSimilar(qta1.getTypeReference(), qta2.getTypeReference());
}
@Override
public Boolean caseSuperTypeArgument(SuperTypeArgument sta1) {
+ this.logMessage("caseSuperTypeArgument");
+
SuperTypeArgument sta2 = (SuperTypeArgument) this.getCompareElement();
return this.isSimilar(sta1.getSuperType(), sta2.getSuperType());
}
@Override
public Boolean caseExtendsTypeArgument(ExtendsTypeArgument eta1) {
+ this.logMessage("caseExtendsTypeArgument");
+
ExtendsTypeArgument eta2 = (ExtendsTypeArgument) this.getCompareElement();
return this.isSimilar(eta1.getExtendType(), eta2.getExtendType());
}
@Override
public Boolean caseUnknownTypeArgument(UnknownTypeArgument arg) {
+ this.logMessage("caseUnknownTypeArgument");
+
return Boolean.TRUE;
}
@Override
public Boolean caseTypeParameter(TypeParameter param1) {
+ this.logMessage("caseTypeParameter");
+
TypeParameter param2 = (TypeParameter) this.getCompareElement();
if (!param1.getName().equals(param2.getName())) {
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ImportsSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ImportsSimilaritySwitch.java
index 0cff9de19e..40c6335052 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ImportsSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ImportsSimilaritySwitch.java
@@ -5,6 +5,7 @@
import org.emftext.language.java.imports.util.ImportsSwitch;
import org.emftext.language.java.references.ReferenceableElement;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
import com.google.common.base.Strings;
@@ -12,7 +13,7 @@
/**
* Similarity decisions for the import elements.
*/
-public class ImportsSimilaritySwitch extends ImportsSwitch implements IJavaSimilarityPositionInnerSwitch {
+public class ImportsSimilaritySwitch extends ImportsSwitch implements ILoggableJavaSwitch, IJavaSimilarityPositionInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
private boolean checkStatementPosition;
@@ -38,6 +39,7 @@ public ImportsSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boolean c
@Override
public Boolean caseClassifierImport(ClassifierImport import1) {
+ this.logMessage("caseClassifierImport");
ClassifierImport import2 = (ClassifierImport) this.getCompareElement();
@@ -53,6 +55,7 @@ public Boolean caseClassifierImport(ClassifierImport import1) {
@Override
public Boolean caseStaticMemberImport(StaticMemberImport import1) {
+ this.logMessage("caseStaticMemberImport");
StaticMemberImport import2 = (StaticMemberImport) this.getCompareElement();
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/InstantiationsSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/InstantiationsSimilaritySwitch.java
index 26723a7182..4e78a5b812 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/InstantiationsSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/InstantiationsSimilaritySwitch.java
@@ -8,12 +8,13 @@
import org.emftext.language.java.instantiations.util.InstantiationsSwitch;
import org.emftext.language.java.types.Type;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
/**
* Similarity decisions for object instantiation elements.
*/
-public class InstantiationsSimilaritySwitch extends InstantiationsSwitch implements IJavaSimilarityPositionInnerSwitch {
+public class InstantiationsSimilaritySwitch extends InstantiationsSwitch implements ILoggableJavaSwitch, IJavaSimilarityPositionInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
private boolean checkStatementPosition;
@@ -52,6 +53,7 @@ public InstantiationsSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, bo
*/
@Override
public Boolean caseExplicitConstructorCall(ExplicitConstructorCall call1) {
+ this.logMessage("caseExplicitConstructorCall");
ExplicitConstructorCall call2 = (ExplicitConstructorCall) this.getCompareElement();
@@ -81,6 +83,8 @@ public Boolean caseExplicitConstructorCall(ExplicitConstructorCall call1) {
@Override
public Boolean caseNewConstructorCall(NewConstructorCall call1) {
+ this.logMessage("caseNewConstructorCall");
+
NewConstructorCall call2 = (NewConstructorCall) this.getCompareElement();
Type type1 = call1.getTypeReference().getTarget();
@@ -109,6 +113,8 @@ public Boolean caseNewConstructorCall(NewConstructorCall call1) {
@Override
public Boolean defaultCase(EObject object) {
+ this.logMessage("defaultCase for Instantiation");
+
return Boolean.TRUE;
}
}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/LayoutSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/LayoutSimilaritySwitch.java
index b7f5fc2223..c4fd77ee36 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/LayoutSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/LayoutSimilaritySwitch.java
@@ -2,14 +2,17 @@
import org.eclipse.emf.ecore.EObject;
import org.emftext.commons.layout.util.LayoutSwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
/**
* Similarity Decisions for layout information is always true as they are not considered for
* now.
*/
-public class LayoutSimilaritySwitch extends LayoutSwitch {
+public class LayoutSimilaritySwitch extends LayoutSwitch implements ILoggableJavaSwitch {
@Override
public Boolean defaultCase(EObject object) {
+ this.logMessage("defaultCase for Layout");
+
return Boolean.TRUE;
}
}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/LiteralsSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/LiteralsSimilaritySwitch.java
index 6354eb61ef..679a88e23a 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/LiteralsSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/LiteralsSimilaritySwitch.java
@@ -17,12 +17,13 @@
import org.emftext.language.java.literals.OctalLongLiteral;
import org.emftext.language.java.literals.util.LiteralsSwitch;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
/**
* Similarity decisions for literal elements.
*/
-public class LiteralsSimilaritySwitch extends LiteralsSwitch implements IJavaSimilarityInnerSwitch {
+public class LiteralsSimilaritySwitch extends LiteralsSwitch implements ILoggableJavaSwitch, IJavaSimilarityInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
@Override
@@ -41,36 +42,48 @@ public LiteralsSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch) {
@Override
public Boolean caseBooleanLiteral(BooleanLiteral boolean1) {
+ this.logMessage("caseBooleanLiteral");
+
BooleanLiteral boolean2 = (BooleanLiteral) this.getCompareElement();
return (boolean1.isValue() == boolean2.isValue());
}
@Override
public Boolean caseCharacterLiteral(CharacterLiteral char1) {
+ this.logMessage("caseCharacterLiteral");
+
CharacterLiteral char2 = (CharacterLiteral) this.getCompareElement();
return char1.getValue().equals(char2.getValue());
}
@Override
public Boolean caseDecimalFloatLiteral(DecimalFloatLiteral float1) {
+ this.logMessage("caseDecimalFloatLiteral");
+
DecimalFloatLiteral float2 = (DecimalFloatLiteral) this.getCompareElement();
return compareDouble(float1.getDecimalValue(), float2.getDecimalValue());
}
@Override
public Boolean caseHexFloatLiteral(HexFloatLiteral float1) {
+ this.logMessage("caseHexFloatLiteral");
+
HexFloatLiteral float2 = (HexFloatLiteral) this.getCompareElement();
return compareDouble(float1.getHexValue(), float2.getHexValue());
}
@Override
public Boolean caseDecimalDoubleLiteral(DecimalDoubleLiteral double1) {
+ this.logMessage("caseDecimalDoubleLiteral");
+
DecimalDoubleLiteral double2 = (DecimalDoubleLiteral) this.getCompareElement();
return compareDouble(double1.getDecimalValue(), double2.getDecimalValue());
}
@Override
public Boolean caseHexDoubleLiteral(HexDoubleLiteral double1) {
+ this.logMessage("caseHexDoubleLiteral");
+
HexDoubleLiteral double2 = (HexDoubleLiteral) this.getCompareElement();
return compareDouble(double1.getHexValue(), double2.getHexValue());
}
@@ -81,48 +94,64 @@ private boolean compareDouble(double d1, double d2) {
@Override
public Boolean caseDecimalIntegerLiteral(DecimalIntegerLiteral int1) {
+ this.logMessage("caseDecimalIntegerLiteral");
+
DecimalIntegerLiteral int2 = (DecimalIntegerLiteral) this.getCompareElement();
return (int1.getDecimalValue().equals(int2.getDecimalValue()));
}
@Override
public Boolean caseHexIntegerLiteral(HexIntegerLiteral int1) {
+ this.logMessage("caseHexIntegerLiteral");
+
HexIntegerLiteral int2 = (HexIntegerLiteral) this.getCompareElement();
return (int1.getHexValue().equals(int2.getHexValue()));
}
@Override
public Boolean caseOctalIntegerLiteral(OctalIntegerLiteral int1) {
+ this.logMessage("caseOctalIntegerLiteral");
+
OctalIntegerLiteral int2 = (OctalIntegerLiteral) this.getCompareElement();
return (int1.getOctalValue().equals(int2.getOctalValue()));
}
@Override
public Boolean caseDecimalLongLiteral(DecimalLongLiteral long1) {
+ this.logMessage("caseDecimalLongLiteral");
+
DecimalLongLiteral long2 = (DecimalLongLiteral) this.getCompareElement();
return (long1.getDecimalValue().equals(long2.getDecimalValue()));
}
@Override
public Boolean caseHexLongLiteral(HexLongLiteral long1) {
+ this.logMessage("caseHexLongLiteral");
+
HexLongLiteral long2 = (HexLongLiteral) this.getCompareElement();
return (long1.getHexValue().equals(long2.getHexValue()));
}
@Override
public Boolean caseOctalLongLiteral(OctalLongLiteral long1) {
+ this.logMessage("caseOctalLongLiteral");
+
OctalLongLiteral long2 = (OctalLongLiteral) this.getCompareElement();
return (long1.getOctalValue().equals(long2.getOctalValue()));
}
@Override
public Boolean caseBinaryLongLiteral(BinaryLongLiteral long1) {
+ this.logMessage("caseBinaryLongLiteral");
+
BinaryLongLiteral long2 = (BinaryLongLiteral) this.getCompareElement();
return long1.getBinaryValue().equals(long2.getBinaryValue());
}
@Override
public Boolean caseBinaryIntegerLiteral(BinaryIntegerLiteral int1) {
+ this.logMessage("caseBinaryIntegerLiteral");
+
BinaryIntegerLiteral int2 = (BinaryIntegerLiteral) this.getCompareElement();
return int1.getBinaryValue().equals(int2.getBinaryValue());
}
@@ -138,6 +167,8 @@ public Boolean caseBinaryIntegerLiteral(BinaryIntegerLiteral int1) {
*/
@Override
public Boolean defaultCase(EObject object) {
+ this.logMessage("defaultCase for Literals");
+
return Boolean.TRUE;
}
}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/MembersSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/MembersSimilaritySwitch.java
index 0051f1a391..ecee0fb31c 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/MembersSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/MembersSimilaritySwitch.java
@@ -69,6 +69,7 @@ public MembersSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boolean c
*/
@Override
public Boolean caseMethod(Method method1) {
+ this.logMessage("caseMethod");
Method method2 = (Method) this.getCompareElement();
@@ -146,6 +147,7 @@ public Boolean caseMethod(Method method1) {
*/
@Override
public Boolean caseConstructor(Constructor constructor1) {
+ this.logMessage("caseConstructor");
Constructor constructor2 = (Constructor) this.getCompareElement();
@@ -183,12 +185,14 @@ public Boolean caseConstructor(Constructor constructor1) {
}
this.logMessage("ConstructorDeclaration in unknown container: " + constructor1.getName() + " : "
- + constructor1.eContainer().getClass().getSimpleName(), Level.WARN);
+ + constructor1.eContainer(), Level.WARN);
return super.caseConstructor(constructor1);
}
@Override
public Boolean caseEnumConstant(EnumConstant const1) {
+ this.logMessage("caseEnumConstant");
+
EnumConstant const2 = (EnumConstant) this.getCompareElement();
String name1 = Strings.nullToEmpty(const1.getName());
String name2 = Strings.nullToEmpty(const2.getName());
@@ -197,6 +201,8 @@ public Boolean caseEnumConstant(EnumConstant const1) {
@Override
public Boolean caseMember(Member member1) {
+ this.logMessage("caseMember");
+
Member member2 = (Member) this.getCompareElement();
String name1 = Strings.nullToEmpty(member1.getName());
String name2 = Strings.nullToEmpty(member2.getName());
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ModifiersSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ModifiersSimilaritySwitch.java
index 2b54127bdb..c5409839ed 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ModifiersSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ModifiersSimilaritySwitch.java
@@ -2,6 +2,7 @@
import org.eclipse.emf.ecore.EObject;
import org.emftext.language.java.modifiers.util.ModifiersSwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
/**
* Similarity decisions for modifier elements.
@@ -11,9 +12,11 @@
* called.
*
*/
-public class ModifiersSimilaritySwitch extends ModifiersSwitch {
+public class ModifiersSimilaritySwitch extends ModifiersSwitch implements ILoggableJavaSwitch {
@Override
public Boolean defaultCase(EObject object) {
+ this.logMessage("defaultCase for Modifier");
+
return Boolean.TRUE;
}
}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ModulesSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ModulesSimilaritySwitch.java
index 194d93eceb..a53bd40823 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ModulesSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ModulesSimilaritySwitch.java
@@ -7,12 +7,13 @@
import org.emftext.language.java.modules.UsesModuleDirective;
import org.emftext.language.java.modules.util.ModulesSwitch;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
/**
* Similarity Decisions for module elements.
*/
-public class ModulesSimilaritySwitch extends ModulesSwitch implements IJavaSimilarityPositionInnerSwitch {
+public class ModulesSimilaritySwitch extends ModulesSwitch implements ILoggableJavaSwitch, IJavaSimilarityPositionInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
private boolean checkStatementPosition;
@@ -48,6 +49,8 @@ public ModulesSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boolean c
*/
@Override
public Boolean caseModuleReference(ModuleReference modRef1) {
+ this.logMessage("caseModuleReference");
+
ModuleReference modRef2 = (ModuleReference) this.getCompareElement();
if (this.compareNamespacesByPart(modRef1, modRef2)) {
return Boolean.TRUE;
@@ -67,6 +70,8 @@ public Boolean caseModuleReference(ModuleReference modRef1) {
*/
@Override
public Boolean caseAccessProvidingModuleDirective(AccessProvidingModuleDirective dir1) {
+ this.logMessage("caseAccessProvidingModuleDirective");
+
AccessProvidingModuleDirective dir2 = (AccessProvidingModuleDirective) this.getCompareElement();
if (!this.compareNamespacesByPart(dir1, dir2)) {
return Boolean.FALSE;
@@ -86,6 +91,8 @@ public Boolean caseAccessProvidingModuleDirective(AccessProvidingModuleDirective
*/
@Override
public Boolean caseRequiresModuleDirective(RequiresModuleDirective dir1) {
+ this.logMessage("caseRequiresModuleDirective");
+
RequiresModuleDirective dir2 = (RequiresModuleDirective) this.getCompareElement();
return this.isSimilar(dir1.getRequiredModule(), dir2.getRequiredModule());
}
@@ -102,6 +109,8 @@ public Boolean caseRequiresModuleDirective(RequiresModuleDirective dir1) {
*/
@Override
public Boolean caseProvidesModuleDirective(ProvidesModuleDirective dir1) {
+ this.logMessage("caseProvidesModuleDirective");
+
ProvidesModuleDirective dir2 = (ProvidesModuleDirective) this.getCompareElement();
return this.isSimilar(dir1.getTypeReference(), dir2.getTypeReference());
}
@@ -118,6 +127,8 @@ public Boolean caseProvidesModuleDirective(ProvidesModuleDirective dir1) {
*/
@Override
public Boolean caseUsesModuleDirective(UsesModuleDirective dir1) {
+ this.logMessage("caseUsesModuleDirective");
+
UsesModuleDirective dir2 = (UsesModuleDirective) this.getCompareElement();
return this.isSimilar(dir1.getTypeReference(), dir2.getTypeReference());
}
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/OperatorsSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/OperatorsSimilaritySwitch.java
index d9895f5962..8af7d34720 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/OperatorsSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/OperatorsSimilaritySwitch.java
@@ -2,6 +2,7 @@
import org.eclipse.emf.ecore.EObject;
import org.emftext.language.java.operators.util.OperatorsSwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
/**
* Similarity decisions for operator elements.
@@ -11,9 +12,11 @@
* called.
*
*/
-public class OperatorsSimilaritySwitch extends OperatorsSwitch {
+public class OperatorsSimilaritySwitch extends OperatorsSwitch implements ILoggableJavaSwitch {
@Override
public Boolean defaultCase(EObject object) {
+ this.logMessage("defaultCase for Operator");
+
return Boolean.TRUE;
}
}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ParametersSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ParametersSimilaritySwitch.java
index 9e4f412b4f..704ccfc799 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ParametersSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ParametersSimilaritySwitch.java
@@ -3,6 +3,7 @@
import org.emftext.language.java.parameters.Parameter;
import org.emftext.language.java.parameters.util.ParametersSwitch;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
import com.google.common.base.Strings;
@@ -14,7 +15,7 @@
* more identifying attributes or references exist.
*
*/
-public class ParametersSimilaritySwitch extends ParametersSwitch implements IJavaSimilarityInnerSwitch {
+public class ParametersSimilaritySwitch extends ParametersSwitch implements ILoggableJavaSwitch, IJavaSimilarityInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
@Override
@@ -33,6 +34,8 @@ public ParametersSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch) {
@Override
public Boolean caseParameter(Parameter param1) {
+ this.logMessage("caseParameter");
+
Parameter param2 = (Parameter) this.getCompareElement();
String name1 = Strings.nullToEmpty(param1.getName());
String name2 = Strings.nullToEmpty(param2.getName());
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ReferencesSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ReferencesSimilaritySwitch.java
index 1991124f0f..7b5a9c2175 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ReferencesSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/ReferencesSimilaritySwitch.java
@@ -11,13 +11,14 @@
import org.emftext.language.java.references.StringReference;
import org.emftext.language.java.references.util.ReferencesSwitch;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
import org.splevo.jamopp.util.JaMoPPElementUtil;
/**
* Similarity decisions for reference elements.
*/
-public class ReferencesSimilaritySwitch extends ReferencesSwitch implements IJavaSimilarityPositionInnerSwitch {
+public class ReferencesSimilaritySwitch extends ReferencesSwitch implements ILoggableJavaSwitch, IJavaSimilarityPositionInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
private boolean checkStatementPosition;
@@ -43,6 +44,7 @@ public ReferencesSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boolea
@Override
public Boolean caseStringReference(StringReference ref1) {
+ this.logMessage("caseStringReference");
StringReference ref2 = (StringReference) this.getCompareElement();
if (ref1.getValue() == null) {
@@ -54,6 +56,7 @@ public Boolean caseStringReference(StringReference ref1) {
@Override
public Boolean caseIdentifierReference(IdentifierReference ref1) {
+ this.logMessage("caseIdentifierReference");
IdentifierReference ref2 = (IdentifierReference) this.getCompareElement();
ReferenceableElement target1 = ref1.getTarget();
@@ -122,6 +125,8 @@ public Boolean caseIdentifierReference(IdentifierReference ref1) {
*/
@Override
public Boolean caseElementReference(ElementReference ref1) {
+ this.logMessage("caseElementReference");
+
ElementReference ref2 = (ElementReference) this.getCompareElement();
Boolean targetSimilarity = this.isSimilar(ref1.getTarget(), ref2.getTarget());
@@ -143,6 +148,8 @@ public Boolean caseElementReference(ElementReference ref1) {
*/
@Override
public Boolean caseMethodCall(MethodCall call1) {
+ this.logMessage("caseMethodCall");
+
MethodCall call2 = (MethodCall) this.getCompareElement();
Boolean targetSimilarity = this.isSimilar(call1.getTarget(), call2.getTarget());
@@ -173,6 +180,8 @@ public Boolean caseMethodCall(MethodCall call1) {
@Override
public Boolean defaultCase(EObject object) {
+ this.logMessage("defaultCase for Reference");
+
return Boolean.TRUE;
}
}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/StatementsSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/StatementsSimilaritySwitch.java
index d00b64891e..5803c83123 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/StatementsSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/StatementsSimilaritySwitch.java
@@ -18,6 +18,7 @@
import org.emftext.language.java.statements.util.StatementsSwitch;
import org.emftext.language.java.variables.Variable;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
import org.splevo.jamopp.util.JaMoPPElementUtil;
@@ -26,7 +27,7 @@
/**
* Similarity decisions for the statement elements.
*/
-public class StatementsSimilaritySwitch extends StatementsSwitch implements IJavaSimilarityPositionInnerSwitch {
+public class StatementsSimilaritySwitch extends StatementsSwitch implements ILoggableJavaSwitch, IJavaSimilarityPositionInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
private boolean checkStatementPosition;
@@ -63,6 +64,7 @@ public StatementsSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boolea
*/
@Override
public Boolean caseExpressionStatement(ExpressionStatement statement1) {
+ this.logMessage("caseExpressionStatement");
ExpressionStatement statement2 = (ExpressionStatement) this.getCompareElement();
@@ -96,6 +98,8 @@ public Boolean caseExpressionStatement(ExpressionStatement statement1) {
*/
@Override
public Boolean caseLocalVariableStatement(LocalVariableStatement varStmt1) {
+ this.logMessage("caseLocalVariableStatement");
+
LocalVariableStatement varStmt2 = (LocalVariableStatement) this.getCompareElement();
Variable var1 = varStmt1.getVariable();
@@ -131,6 +135,7 @@ public Boolean caseLocalVariableStatement(LocalVariableStatement varStmt1) {
*/
@Override
public Boolean caseReturn(Return returnStatement1) {
+ this.logMessage("caseReturn");
Return returnStatement2 = (Return) this.getCompareElement();
@@ -153,6 +158,7 @@ public Boolean caseReturn(Return returnStatement1) {
*/
@Override
public Boolean caseSynchronizedBlock(SynchronizedBlock statement1) {
+ this.logMessage("caseSynchronizedBlock");
SynchronizedBlock statement2 = (SynchronizedBlock) this.getCompareElement();
@@ -183,11 +189,14 @@ public Boolean caseSynchronizedBlock(SynchronizedBlock statement1) {
*/
@Override
public Boolean caseThrow(Throw throwStatement1) {
+ this.logMessage("caseThrow");
+
return Boolean.TRUE;
}
@Override
public Boolean caseCatchBlock(CatchBlock catchBlock1) {
+ this.logMessage("caseCatchBlock");
CatchBlock catchBlock2 = (CatchBlock) this.getCompareElement();
@@ -221,6 +230,7 @@ public Boolean caseCatchBlock(CatchBlock catchBlock1) {
*/
@Override
public Boolean caseConditional(Conditional conditional1) {
+ this.logMessage("caseConditional");
Conditional conditional2 = (Conditional) this.getCompareElement();
@@ -236,6 +246,8 @@ public Boolean caseConditional(Conditional conditional1) {
@Override
public Boolean caseJump(Jump jump1) {
+ this.logMessage("caseJump");
+
Jump jump2 = (Jump) this.getCompareElement();
Boolean similarity = this.isSimilar(jump1.getTarget(), jump2.getTarget());
@@ -248,6 +260,7 @@ public Boolean caseJump(Jump jump1) {
@Override
public Boolean caseJumpLabel(JumpLabel label1) {
+ this.logMessage("caseJumpLabel");
JumpLabel label2 = (JumpLabel) this.getCompareElement();
@@ -259,6 +272,8 @@ public Boolean caseJumpLabel(JumpLabel label1) {
@Override
public Boolean caseSwitch(Switch switch1) {
+ this.logMessage("caseSwitch");
+
Switch switch2 = (Switch) this.getCompareElement();
return this.isSimilar(switch1.getVariable(), switch2.getVariable());
@@ -266,6 +281,8 @@ public Boolean caseSwitch(Switch switch1) {
@Override
public Boolean defaultCase(EObject object) {
+ this.logMessage("defaultCase for Statement");
+
return Boolean.TRUE;
}
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/TypesSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/TypesSimilaritySwitch.java
index 711795e256..49a69d46b5 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/TypesSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/TypesSimilaritySwitch.java
@@ -9,6 +9,7 @@
import org.emftext.language.java.types.util.TypesSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.JavaSimilarityChecker;
import com.google.common.base.Strings;
@@ -16,7 +17,7 @@
/**
* Similarity decisions for elements of the types package.
*/
-public class TypesSimilaritySwitch extends TypesSwitch implements IJavaSimilarityPositionInnerSwitch {
+public class TypesSimilaritySwitch extends TypesSwitch implements ILoggableJavaSwitch, IJavaSimilarityPositionInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
private boolean checkStatementPosition;
@@ -52,6 +53,8 @@ public TypesSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch, boolean che
*/
@Override
public Boolean caseClassifierReference(ClassifierReference ref1) {
+ this.logMessage("caseClassifierReference");
+
ClassifierReference ref2 = (ClassifierReference) this.getCompareElement();
Boolean targetSimilarity = this.isSimilar(ref1.getTarget(), ref2.getTarget());
@@ -64,6 +67,7 @@ public Boolean caseClassifierReference(ClassifierReference ref1) {
@Override
public Boolean caseTypeReference(TypeReference ref1) {
+ this.logMessage("caseTypeReference");
TypeReference ref2 = (TypeReference) this.getCompareElement();
@@ -77,6 +81,7 @@ public Boolean caseTypeReference(TypeReference ref1) {
@Override
public Boolean caseNamespaceClassifierReference(NamespaceClassifierReference ref1) {
+ this.logMessage("caseNamespaceClassifierReference");
NamespaceClassifierReference ref2 = (NamespaceClassifierReference) this.getCompareElement();
@@ -105,6 +110,8 @@ public Boolean caseNamespaceClassifierReference(NamespaceClassifierReference ref
*/
@Override
public Boolean casePrimitiveType(PrimitiveType type) {
+ this.logMessage("casePrimitiveType");
+
return Boolean.TRUE;
}
@@ -116,6 +123,8 @@ public Boolean casePrimitiveType(PrimitiveType type) {
*/
@Override
public Boolean caseInferableType(InferableType type) {
+ this.logMessage("caseInferableType");
+
return Boolean.TRUE;
}
@@ -126,6 +135,8 @@ public Boolean caseInferableType(InferableType type) {
*/
@Override
public Boolean defaultCase(EObject object) {
+ this.logMessage("defaultCase for Type");
+
return Boolean.TRUE;
}
}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/VariablesSimilaritySwitch.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/VariablesSimilaritySwitch.java
index 15e672cb69..6884027974 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/VariablesSimilaritySwitch.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/switches/VariablesSimilaritySwitch.java
@@ -4,6 +4,7 @@
import org.emftext.language.java.variables.Variable;
import org.emftext.language.java.variables.util.VariablesSwitch;
import org.splevo.jamopp.diffing.similarity.IJavaSimilaritySwitch;
+import org.splevo.jamopp.diffing.similarity.ILoggableJavaSwitch;
import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
import com.google.common.base.Strings;
@@ -11,7 +12,7 @@
/**
* Similarity decisions for the variable elements.
*/
-public class VariablesSimilaritySwitch extends VariablesSwitch implements IJavaSimilarityInnerSwitch {
+public class VariablesSimilaritySwitch extends VariablesSwitch implements ILoggableJavaSwitch, IJavaSimilarityInnerSwitch {
private IJavaSimilaritySwitch similaritySwitch;
@Override
@@ -42,6 +43,7 @@ public VariablesSimilaritySwitch(IJavaSimilaritySwitch similaritySwitch) {
*/
@Override
public Boolean caseVariable(Variable var1) {
+ this.logMessage("caseVariable");
Variable var2 = (Variable) this.getCompareElement();
@@ -55,6 +57,8 @@ public Boolean caseVariable(Variable var1) {
@Override
public Boolean caseAdditionalLocalVariable(AdditionalLocalVariable var1) {
+ this.logMessage("caseAdditionalLocalVariable");
+
AdditionalLocalVariable var2 = (AdditionalLocalVariable) this.getCompareElement();
// check the variables name equality
From 2e77e55300438e7c6e2875c3cb457dcf84b9d212 Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Fri, 30 Aug 2024 18:59:38 +0200
Subject: [PATCH 23/35] (WIP) Implement toolbox builder
For Java-related similarity checking
Non-functional commit
---
.../JavaSimilarityToolboxBuilder.java | 114 ++++++++++++++++++
1 file changed, 114 insertions(+)
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/JavaSimilarityToolboxBuilder.java
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/JavaSimilarityToolboxBuilder.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/JavaSimilarityToolboxBuilder.java
new file mode 100644
index 0000000000..cd454f1bab
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/JavaSimilarityToolboxBuilder.java
@@ -0,0 +1,114 @@
+package org.splevo.jamopp.diffing.similarity;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import org.splevo.jamopp.diffing.similarity.base.AbstractSimilarityToolboxBuilder;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequest;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
+import org.splevo.jamopp.diffing.similarity.base.ecore.MultipleSimilarityCheckHandler;
+import org.splevo.jamopp.diffing.similarity.base.ecore.MultipleSimilarityCheckRequest;
+import org.splevo.jamopp.diffing.similarity.base.ecore.SingleSimilarityCheckHandler;
+import org.splevo.jamopp.diffing.similarity.base.ecore.SingleSimilarityCheckRequest;
+import org.splevo.jamopp.diffing.similarity.handlers.ClassifierNormalizationHandler;
+import org.splevo.jamopp.diffing.similarity.handlers.CompilationUnitNormalizationHandler;
+import org.splevo.jamopp.diffing.similarity.handlers.NamespaceCheckHandler;
+import org.splevo.jamopp.diffing.similarity.handlers.NamespaceNormalizationHandler;
+import org.splevo.jamopp.diffing.similarity.handlers.NewSimilaritySwitchHandler;
+import org.splevo.jamopp.diffing.similarity.handlers.PackageNormalizationHandler;
+import org.splevo.jamopp.diffing.similarity.requests.ClassifierNormalizationRequest;
+import org.splevo.jamopp.diffing.similarity.requests.NamespaceCheckRequest;
+import org.splevo.jamopp.diffing.similarity.requests.CompilationUnitNormalizationRequest;
+import org.splevo.jamopp.diffing.similarity.requests.NamespaceNormalizationRequest;
+import org.splevo.jamopp.diffing.similarity.requests.NewSimilaritySwitchRequest;
+import org.splevo.jamopp.diffing.similarity.requests.PackageNormalizationRequest;
+
+/**
+ * Concrete implementation of {@link AbstractSimilarityToolboxBuilder} for
+ * constructing {@link ISimilarityToolbox} instances for computing similarity of
+ * Java model elements.
+ *
+ * @author atora
+ */
+public class JavaSimilarityToolboxBuilder extends AbstractSimilarityToolboxBuilder {
+ @Override
+ public JavaSimilarityToolboxBuilder instantiate() {
+ return (JavaSimilarityToolboxBuilder) super.instantiate();
+ }
+
+ @Override
+ public JavaSimilarityToolboxBuilder buildRequestHandlerPair(Class extends ISimilarityRequest> req,
+ ISimilarityRequestHandler srh) {
+ return (JavaSimilarityToolboxBuilder) super.buildRequestHandlerPair(req, srh);
+ }
+
+ /**
+ * Adds the handlers needed to handle normalisation related
+ * {@link ISimilarityRequest} instances. Passes the given parameters to their
+ * corresponding handlers.
+ *
+ * @return this
+ * @see {@link NormalizationUtil}
+ */
+ public JavaSimilarityToolboxBuilder buildNormalizationHandlers(Map classifierNormalizations,
+ Map compilationUnitNormalizations, Map packageNormalizations) {
+
+ this.buildRequestHandlerPair(ClassifierNormalizationRequest.class,
+ new ClassifierNormalizationHandler(classifierNormalizations));
+ this.buildRequestHandlerPair(CompilationUnitNormalizationRequest.class,
+ new CompilationUnitNormalizationHandler(compilationUnitNormalizations));
+ this.buildRequestHandlerPair(PackageNormalizationRequest.class,
+ new PackageNormalizationHandler(packageNormalizations));
+ this.buildRequestHandlerPair(NamespaceNormalizationRequest.class,
+ new NamespaceNormalizationHandler(packageNormalizations));
+
+ return this;
+ }
+
+ /**
+ * Adds the handlers needed to handle normalisation related
+ * {@link ISimilarityRequest} instances. Does so without any normalisation
+ * parameters.
+ *
+ * @return this
+ * @see {@link #buildNormalizationHandlers(Map, Map, Map)}
+ */
+ public JavaSimilarityToolboxBuilder buildNormalizationHandlers() {
+ var classifierNormalizations = new LinkedHashMap();
+ var compilationUnitNormalizations = new LinkedHashMap();
+ var packageNormalizations = new LinkedHashMap();
+
+ return this.buildNormalizationHandlers(classifierNormalizations, compilationUnitNormalizations,
+ packageNormalizations);
+ }
+
+ /**
+ * Adds the handlers required to handle similarity checking related
+ * {@link ISimilarityRequest} instances.
+ *
+ * @return this
+ */
+ public JavaSimilarityToolboxBuilder buildComparisonHandlers() {
+ this.buildRequestHandlerPair(SingleSimilarityCheckRequest.class, new SingleSimilarityCheckHandler());
+ this.buildRequestHandlerPair(MultipleSimilarityCheckRequest.class,
+ new MultipleSimilarityCheckHandler(this.getCurrentToolbox()));
+ this.buildRequestHandlerPair(NamespaceCheckRequest.class, new NamespaceCheckHandler());
+
+ return this;
+ }
+
+ /**
+ * Adds the handler needed to handle {@link ISimilarityRequest} instances, which
+ * request new similarity switch instances.
+ *
+ * @return this
+ * @see {@link IJavaSimilaritySwitch}
+ */
+ public JavaSimilarityToolboxBuilder buildNewSimilaritySwitchHandler() {
+ this.buildRequestHandlerPair(NewSimilaritySwitchRequest.class,
+ new NewSimilaritySwitchHandler(this.getCurrentToolbox()));
+
+ return this;
+ }
+}
From a6362b6914c0f6311bcb425eb3db32e6a7e56bb2 Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Fri, 30 Aug 2024 18:58:32 +0200
Subject: [PATCH 24/35] (WIP) Adapt SimilarityChecker
Rename SimilarityChecker to JavaSimilarityChecker
Use the extracted structure in the JavaSimilarityChecker
Delegate similarity switch creation by using a new similarity switch request
Non-functional commit
---
.../similarity/JavaSimilarityChecker.java | 54 +++++
.../diffing/similarity/SimilarityChecker.java | 205 ------------------
2 files changed, 54 insertions(+), 205 deletions(-)
create mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/JavaSimilarityChecker.java
delete mode 100644 commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/SimilarityChecker.java
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/JavaSimilarityChecker.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/JavaSimilarityChecker.java
new file mode 100644
index 0000000000..9d4b38cb95
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/JavaSimilarityChecker.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2014
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Benjamin Klatt - initial API and implementation and/or initial documentation
+ * Martin Armbruster - enable change of default behavior for statement position check.
+ *******************************************************************************/
+package org.splevo.jamopp.diffing.similarity;
+
+import org.apache.log4j.Logger;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequest;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityToolbox;
+import org.splevo.jamopp.diffing.similarity.base.ecore.AbstractComposedSwitchSimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.requests.NewSimilaritySwitchRequest;
+
+/**
+ * Checker for the similarity of two elements specific for the java application
+ * model.
+ *
+ * TODO: Check caching for this similarity checker. Would require to pass this
+ * to the similarity switch as well!
+ *
+ */
+public class JavaSimilarityChecker extends AbstractComposedSwitchSimilarityChecker {
+
+ /** The logger for this class. */
+ @SuppressWarnings("unused")
+ private Logger logger = Logger.getLogger(JavaSimilarityChecker.class);
+
+ /**
+ * Constructs an instance with the given parameter.
+ *
+ * @param st {@link ISimilarityToolbox} to which all incoming
+ * {@link ISimilarityRequest} instances will be delegated to.
+ */
+ public JavaSimilarityChecker(ISimilarityToolbox st) {
+ super(st);
+ }
+
+ @Override
+ protected JavaSimilarityComparer createSimilarityComparer(ISimilarityToolbox st) {
+ return new JavaSimilarityComparer(st);
+ }
+
+ @Override
+ protected ISimilarityRequest makeDefaultSwitchRequest() {
+ return new NewSimilaritySwitchRequest(true);
+ }
+}
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/SimilarityChecker.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/SimilarityChecker.java
deleted file mode 100644
index dfcd2d159a..0000000000
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/similarity/SimilarityChecker.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2014
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Benjamin Klatt - initial API and implementation and/or initial documentation
- * Martin Armbruster - enable change of default behavior for statement position check.
- *******************************************************************************/
-package org.splevo.jamopp.diffing.similarity;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import org.apache.log4j.Logger;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-
-import com.google.common.collect.Maps;
-
-/**
- * Checker for the similarity of two elements specific for the java application model.
- *
- * TODO: Check caching for this similarity checker. Would require to pass this to the similarity
- * switch as well!
- *
- */
-public class SimilarityChecker {
-
- /** The logger for this class. */
- @SuppressWarnings("unused")
- private Logger logger = Logger.getLogger(SimilarityChecker.class);
-
- private LinkedHashMap classifierNormalizations = null;
- private LinkedHashMap compilationUnitNormalizations = null;
- private LinkedHashMap packageNormalizations = null;
- private boolean defaultCheckStatementPositionFlag = true;
-
- /**
- * Constructor to set the required configurations.
- *
- * @param classifierNormalizations
- * A list of patterns replace any match in a classifier name with the defined
- * replacement string.
- * @param compilationUnitNormalizations
- * A list of patterns replace any match in a compilation unit name with the defined
- * replacement string.
- * @param packageNormalizations
- * The normalizations to replace expressions.
- */
- public SimilarityChecker(LinkedHashMap classifierNormalizations,
- LinkedHashMap compilationUnitNormalizations, LinkedHashMap packageNormalizations) {
- this.classifierNormalizations = classifierNormalizations;
- this.compilationUnitNormalizations = compilationUnitNormalizations;
- this.packageNormalizations = packageNormalizations;
- }
-
- /**
- * Default constructor for a similarity checker without any normalization configurations.
- */
- public SimilarityChecker() {
- this.classifierNormalizations = Maps.newLinkedHashMap();
- this.compilationUnitNormalizations = Maps.newLinkedHashMap();
- this.packageNormalizations = Maps.newLinkedHashMap();
- }
-
- /**
- * Indicates if the SimilarityChecker instance checks the position of statements in its default behavior.
- *
- * @return true if the statement positions are checked. false otherwise.
- */
- public boolean checksStatementPositionOnDefault() {
- return this.defaultCheckStatementPositionFlag;
- }
-
- /**
- * Controls if the SimilarityChecker checks the position of statements in the default behavior.
- *
- * @param check true if the statement positions are checked. false otherwise.
- */
- public void setCheckStatementPositionOnDefault(boolean check) {
- this.defaultCheckStatementPositionFlag = check;
- }
-
- /**
- * Check two object lists if they are similar.
- *
- * The elements is compared pairwise and it is the responsibility of the provided list
- * implementations to return them in an appropriate order by calling get(i) with a increasing
- * index i.
- *
- * @param elements1
- * The first list of elements to check.
- * @param elements2
- * The second list of elements to check.
- * @return TRUE, if they are all similar; FALSE if a different number of elements is submitted or at least one pair of elements is not similar to each other.
- */
- public Boolean areSimilar(final List extends EObject> elements1, final List extends EObject> elements2) {
- if (elements1.size() != elements2.size()) {
- return Boolean.FALSE;
- }
- for (int i = 0; i < elements1.size(); i++) {
- Boolean childSimilarity = isSimilar(elements1.get(i), elements2.get(i));
- if (childSimilarity == Boolean.FALSE) {
- return Boolean.FALSE;
- }
- }
-
- return Boolean.TRUE;
- }
-
- /**
- * Check two objects if they are similar.
- *
- * @param element1
- * The first element to check.
- * @param element2
- * The second element to check.
- * @return TRUE, if they are similar; FALSE if not, NULL if it can't be decided.
- */
- public Boolean isSimilar(final EObject element1, final EObject element2) {
- return isSimilar(element1, element2, this.defaultCheckStatementPositionFlag);
- }
-
- /**
- * Check two objects if they are similar.
- *
- * @param element1
- * The first element to check.
- * @param element2
- * The second element to check.
- * @param checkStatementPosition
- * Flag if the position of statement elements should be considered or not.
- * @return TRUE, if they are similar; FALSE if not, NULL if it can't be decided.
- */
- public Boolean isSimilar(EObject element1, EObject element2, boolean checkStatementPosition) {
-
- // check that either both or none of them is null
- if (element1 == element2) {
- return Boolean.TRUE;
- }
-
- if (onlyOneIsNull(element1, element2)) {
- return Boolean.FALSE;
- }
-
- // if a proxy is present try to resolve it
- // the other element is used as a context.
- // TODO Clarify why it can happen that one proxy is resolved and the other is not
- // further notes available with the issue
- // https://sdqbuild.ipd.kit.edu/jira/browse/SPLEVO-279
- if (element2.eIsProxy() && !element1.eIsProxy()) {
- element2 = EcoreUtil.resolve(element2, element1);
- } else if (element1.eIsProxy() && !element2.eIsProxy()) {
- element1 = EcoreUtil.resolve(element1, element2);
- }
-
- // check the elements to be of the same type
- if (!element1.getClass().equals(element2.getClass())) {
- return Boolean.FALSE;
- }
-
- // check type specific similarity
- return this.checkSimilarityForResolvedAndSameType(element1, element2, checkStatementPosition);
- }
-
- /**
- * Checks the similarity of two EObjects where both EObjects are resolved and have the same type.
- *
- * @param element1 the first EObject.
- * @param element2 the second EObject.
- * @param checkStatementPosition true if the position of statements should be checked. false otherwise.
- * If no statements are involved, the flag can be ignored.
- * @return true if the EObjects are similar. null if they cannot be compared. false otherwise.
- */
- protected Boolean checkSimilarityForResolvedAndSameType(EObject element1, EObject element2,
- boolean checkStatementPosition) {
- return new SimilaritySwitch(element2, checkStatementPosition, classifierNormalizations,
- compilationUnitNormalizations, packageNormalizations).doSwitch(element1);
- }
-
- /**
- * Method to check if only one of the provided elements is null.
- *
- * @param element1
- * The first element.
- * @param element2
- * The second element.
- * @return True if only one element is null and the other is not.
- */
- private Boolean onlyOneIsNull(final EObject element1, final EObject element2) {
- Boolean onlyOneIsNull = false;
- if (element1 != null && element2 == null) {
- onlyOneIsNull = Boolean.TRUE;
- } else if (element1 == null && element2 != null) {
- onlyOneIsNull = Boolean.TRUE;
- }
- return onlyOneIsNull;
- }
-
-}
From 88ca0d0f0b60d569a8cadd60c36576fd9be8debe Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Fri, 30 Aug 2024 18:41:23 +0200
Subject: [PATCH 25/35] (WIP) Integrate changes with outside
Adapt classes affected by the changes to the Java-related part of the similarity checking
Non-functional commit
---
...erarchicalMatchEngineFactoryGenerator.java | 4 ++--
.../util/JavaMatchEngineFactoryGenerator.java | 15 +++++++++++--
...lityHelperExtensionProviderDescriptor.java | 6 ++---
.../splevo/jamopp/diffing/JaMoPPDiffer.java | 22 ++++++++++++++-----
.../diffing/match/JaMoPPEqualityHelper.java | 6 ++---
.../diffing/match/JaMoPPEqualityStrategy.java | 6 ++---
6 files changed, 41 insertions(+), 18 deletions(-)
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/HierarchicalMatchEngineFactoryGenerator.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/HierarchicalMatchEngineFactoryGenerator.java
index 93ac1007d9..5310336516 100644
--- a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/HierarchicalMatchEngineFactoryGenerator.java
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/HierarchicalMatchEngineFactoryGenerator.java
@@ -12,7 +12,7 @@
import org.splevo.jamopp.diffing.match.JaMoPPEqualityStrategy;
import org.splevo.jamopp.diffing.match.JaMoPPIgnoreStrategy;
import org.splevo.jamopp.diffing.scope.PackageIgnoreChecker;
-import org.splevo.jamopp.diffing.similarity.SimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityChecker;
import com.google.common.cache.CacheBuilder;
@@ -32,7 +32,7 @@ private HierarchicalMatchEngineFactoryGenerator() {
* @param key a key to identify the compared models.
* @return the generated factory.
*/
- public static HierarchicalMatchEngineFactory generateMatchEngineFactory(SimilarityChecker simChecker, String key) {
+ public static HierarchicalMatchEngineFactory generateMatchEngineFactory(ISimilarityChecker simChecker, String key) {
EqualityHelperExtensionProvider.Descriptor.Registry descRegistryImpl =
EqualityHelperExtensionProviderDescriptorRegistryImpl.createStandaloneInstance();
descRegistryImpl.put(key, new SimilarityCheckerBasedEqualityHelperExtensionProviderDescriptor(simChecker));
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/JavaMatchEngineFactoryGenerator.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/JavaMatchEngineFactoryGenerator.java
index 97d59aae81..00014c26db 100644
--- a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/JavaMatchEngineFactoryGenerator.java
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/JavaMatchEngineFactoryGenerator.java
@@ -1,7 +1,9 @@
package cipm.consistency.commitintegration.diff.util;
import org.splevo.diffing.match.HierarchicalMatchEngineFactory;
-import org.splevo.jamopp.diffing.similarity.SimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.JavaSimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.JavaSimilarityToolboxBuilder;
+import org.splevo.jamopp.diffing.similarity.base.MapSimilarityToolboxFactory;
/**
* A generator for HierarchicalMatchEngineFactories specific to Java models.
@@ -18,6 +20,15 @@ private JavaMatchEngineFactoryGenerator() {
* @return the generated factory.
*/
public static HierarchicalMatchEngineFactory generateMatchEngineFactory() {
- return HierarchicalMatchEngineFactoryGenerator.generateMatchEngineFactory(new SimilarityChecker(), "javaxmi");
+ var builder = new JavaSimilarityToolboxBuilder();
+ builder.setSimilarityToolboxFactory(new MapSimilarityToolboxFactory());
+
+ var toolbox = builder.instantiate()
+ .buildNewSimilaritySwitchHandler()
+ .buildNormalizationHandlers()
+ .buildComparisonHandlers()
+ .build();
+
+ return HierarchicalMatchEngineFactoryGenerator.generateMatchEngineFactory(new JavaSimilarityChecker(toolbox), "javaxmi");
}
}
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/SimilarityCheckerBasedEqualityHelperExtensionProviderDescriptor.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/SimilarityCheckerBasedEqualityHelperExtensionProviderDescriptor.java
index c2eb53710e..be42434561 100644
--- a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/SimilarityCheckerBasedEqualityHelperExtensionProviderDescriptor.java
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/SimilarityCheckerBasedEqualityHelperExtensionProviderDescriptor.java
@@ -5,7 +5,7 @@
import org.eclipse.emf.compare.match.eobject.EqualityHelperExtensionProvider;
import org.eclipse.emf.compare.utils.IEqualityHelper;
import org.eclipse.emf.ecore.EObject;
-import org.splevo.jamopp.diffing.similarity.SimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityChecker;
/**
* A descriptor for the provider of a EqualityHelperExtension which is based on the SimilarityChecker.
@@ -14,9 +14,9 @@
*/
public class SimilarityCheckerBasedEqualityHelperExtensionProviderDescriptor
implements EqualityHelperExtensionProvider.Descriptor {
- private SimilarityChecker checker;
+ private ISimilarityChecker checker;
- public SimilarityCheckerBasedEqualityHelperExtensionProviderDescriptor(SimilarityChecker check) {
+ public SimilarityCheckerBasedEqualityHelperExtensionProviderDescriptor(ISimilarityChecker check) {
checker = check;
}
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/JaMoPPDiffer.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/JaMoPPDiffer.java
index 6d8ad5bd2d..35b3ddb311 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/JaMoPPDiffer.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/JaMoPPDiffer.java
@@ -63,7 +63,10 @@
import org.splevo.jamopp.diffing.postprocessor.JaMoPPPostProcessor;
import org.splevo.jamopp.diffing.scope.JavaModelMatchScope;
import org.splevo.jamopp.diffing.scope.PackageIgnoreChecker;
-import org.splevo.jamopp.diffing.similarity.SimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.JavaSimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.JavaSimilarityToolboxBuilder;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.base.MapSimilarityToolboxFactory;
import org.splevo.jamopp.extraction.JaMoPPSoftwareModelExtractor;
import com.google.common.cache.CacheBuilder;
@@ -405,7 +408,7 @@ private boolean isSingleSideRootMatch(Match rootMatch) {
private IMatchEngine.Factory.Registry initMatchEngine(PackageIgnoreChecker packageIgnoreChecker,
Map diffingOptions) {
- SimilarityChecker similarityChecker = initSimilarityChecker(diffingOptions);
+ ISimilarityChecker similarityChecker = initSimilarityChecker(diffingOptions);
IEqualityHelper equalityHelper = initEqualityHelper(similarityChecker);
EqualityStrategy equalityStrategy = new JaMoPPEqualityStrategy(similarityChecker);
IgnoreStrategy ignoreStrategy = new JaMoPPIgnoreStrategy(packageIgnoreChecker);
@@ -428,7 +431,7 @@ private IMatchEngine.Factory.Registry initMatchEngine(PackageIgnoreChecker packa
* The map of configurations.
* @return The prepared checker.
*/
- private SimilarityChecker initSimilarityChecker(Map diffingOptions) {
+ private ISimilarityChecker initSimilarityChecker(Map diffingOptions) {
String configString = diffingOptions.get(OPTION_JAVA_CLASSIFIER_NORMALIZATION);
LinkedHashMap classifierNorms = NormalizationUtil.loadRemoveNormalizations(configString, null);
LinkedHashMap compUnitNorms = NormalizationUtil
@@ -437,7 +440,16 @@ private SimilarityChecker initSimilarityChecker(Map diffingOptio
String configStringPackage = diffingOptions.get(OPTION_JAVA_PACKAGE_NORMALIZATION);
LinkedHashMap packageNorms = NormalizationUtil.loadReplaceNormalizations(configStringPackage);
- return new SimilarityChecker(classifierNorms, compUnitNorms, packageNorms);
+ var builder = new JavaSimilarityToolboxBuilder();
+ builder.setSimilarityToolboxFactory(new MapSimilarityToolboxFactory());
+
+ var toolbox = builder.instantiate()
+ .buildNewSimilaritySwitchHandler()
+ .buildNormalizationHandlers(classifierNorms, compUnitNorms, packageNorms)
+ .buildComparisonHandlers()
+ .build();
+
+ return new JavaSimilarityChecker(toolbox);
}
/**
@@ -447,7 +459,7 @@ private SimilarityChecker initSimilarityChecker(Map diffingOptio
* The similarity checker to use.
* @return The prepared equality helper.
*/
- private IEqualityHelper initEqualityHelper(SimilarityChecker similarityChecker) {
+ private IEqualityHelper initEqualityHelper(ISimilarityChecker similarityChecker) {
final LoadingCache cache = initEqualityCache();
IEqualityHelper equalityHelper = new JaMoPPEqualityHelper(cache, similarityChecker);
return equalityHelper;
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/match/JaMoPPEqualityHelper.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/match/JaMoPPEqualityHelper.java
index f684932dd0..d4e46a28f2 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/match/JaMoPPEqualityHelper.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/match/JaMoPPEqualityHelper.java
@@ -13,7 +13,7 @@
import org.eclipse.emf.compare.utils.EqualityHelper;
import org.eclipse.emf.ecore.EObject;
-import org.splevo.jamopp.diffing.similarity.SimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityChecker;
import com.google.common.cache.LoadingCache;
@@ -23,7 +23,7 @@
public class JaMoPPEqualityHelper extends EqualityHelper {
/** A similarity checker for internal similarity comparisons. */
- private SimilarityChecker similarityChecker = null;
+ private ISimilarityChecker similarityChecker = null;
/**
* Constructor to initialize the required cache.
@@ -34,7 +34,7 @@ public class JaMoPPEqualityHelper extends EqualityHelper {
* The similarity checker to be used.
*/
public JaMoPPEqualityHelper(LoadingCache uriCache,
- SimilarityChecker similarityChecker) {
+ ISimilarityChecker similarityChecker) {
super(uriCache);
this.similarityChecker = similarityChecker;
}
diff --git a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/match/JaMoPPEqualityStrategy.java b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/match/JaMoPPEqualityStrategy.java
index 468076aa68..9760aaaa37 100644
--- a/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/match/JaMoPPEqualityStrategy.java
+++ b/commit-based-cipm/bundles/fi/org.splevo.jamopp.diffing/src/org/splevo/jamopp/diffing/match/JaMoPPEqualityStrategy.java
@@ -13,7 +13,7 @@
import org.eclipse.emf.ecore.EObject;
import org.splevo.diffing.match.HierarchicalMatchEngine.EqualityStrategy;
-import org.splevo.jamopp.diffing.similarity.SimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityChecker;
/**
* JaMoPP java model specific equality strategy based on the similarity checker strategy.
@@ -21,7 +21,7 @@
public class JaMoPPEqualityStrategy implements EqualityStrategy {
/** The similarity checker to use internally for equality checks. */
- private SimilarityChecker similarityChecker = null;
+ private ISimilarityChecker similarityChecker = null;
/**
* Constructor to set the required dependencies.
@@ -29,7 +29,7 @@ public class JaMoPPEqualityStrategy implements EqualityStrategy {
* @param similarityChecker
* The similarity checker to proof equality.
*/
- public JaMoPPEqualityStrategy(SimilarityChecker similarityChecker) {
+ public JaMoPPEqualityStrategy(ISimilarityChecker similarityChecker) {
this.similarityChecker = similarityChecker;
}
From ee3d19bc50007417549b1990eb58190d852ce5a3 Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Tue, 3 Sep 2024 17:42:58 +0200
Subject: [PATCH 26/35] (WIP) Copy PCM-related inner switches
To their own files without modifying them
Non-functional commit
---
.../switches/SimilarityRepositorySwitch.java | 149 ++++++++++++++++++
.../pcm/switches/SimilaritySeffSwitch.java | 83 ++++++++++
2 files changed, 232 insertions(+)
create mode 100644 commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilarityRepositorySwitch.java
create mode 100644 commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilaritySeffSwitch.java
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilarityRepositorySwitch.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilarityRepositorySwitch.java
new file mode 100644
index 0000000000..35d6215985
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilarityRepositorySwitch.java
@@ -0,0 +1,149 @@
+package cipm.consistency.commitintegration.diff.util.pcm.switches;
+
+import org.palladiosimulator.pcm.repository.BasicComponent;
+import org.palladiosimulator.pcm.repository.CollectionDataType;
+import org.palladiosimulator.pcm.repository.CompositeComponent;
+import org.palladiosimulator.pcm.repository.CompositeDataType;
+import org.palladiosimulator.pcm.repository.InnerDeclaration;
+import org.palladiosimulator.pcm.repository.OperationInterface;
+import org.palladiosimulator.pcm.repository.OperationProvidedRole;
+import org.palladiosimulator.pcm.repository.OperationRequiredRole;
+import org.palladiosimulator.pcm.repository.OperationSignature;
+import org.palladiosimulator.pcm.repository.Parameter;
+import org.palladiosimulator.pcm.repository.PrimitiveDataType;
+import org.palladiosimulator.pcm.repository.Repository;
+import org.palladiosimulator.pcm.repository.util.RepositorySwitch;
+
+import cipm.consistency.commitintegration.diff.util.pcm.PCMRepositorySimilarityChecker;
+
+class SimilarityRepositorySwitch extends RepositorySwitch {
+ @Override
+ public Boolean caseRepository(Repository repo1) {
+ Repository repo2 = (Repository) compareElement;
+
+ if (!repo1.getEntityName().equals(repo2.getEntityName())) {
+ return Boolean.FALSE;
+ }
+
+ return Boolean.TRUE;
+ }
+
+ @Override
+ public Boolean caseOperationInterface(OperationInterface opInterface1) {
+ OperationInterface opInterface2 = (OperationInterface) compareElement;
+
+ if (!opInterface1.getEntityName().equals(opInterface2.getEntityName())) {
+ return Boolean.FALSE;
+ }
+
+ return PCMRepositorySimilarityChecker.this.areSimilar(
+ opInterface1.getParentInterfaces__Interface(),
+ opInterface2.getParentInterfaces__Interface());
+ }
+
+ @Override
+ public Boolean caseOperationSignature(OperationSignature sign1) {
+ OperationSignature sign2 = (OperationSignature) compareElement;
+
+ if (!sign1.getEntityName().equals(sign2.getEntityName())) {
+ return Boolean.FALSE;
+ }
+
+ var result = PCMRepositorySimilarityChecker.this.areSimilar(
+ sign1.getParameters__OperationSignature(),
+ sign2.getParameters__OperationSignature());
+
+ if (!result) {
+ return Boolean.FALSE;
+ }
+
+ return PCMRepositorySimilarityChecker.this.isSimilar(sign1.getReturnType__OperationSignature(),
+ sign2.getReturnType__OperationSignature());
+ }
+
+ @Override
+ public Boolean caseParameter(Parameter param1) {
+ Parameter param2 = (Parameter) compareElement;
+
+ if (!param1.getParameterName().equals(param2.getParameterName())) {
+ return Boolean.FALSE;
+ }
+
+ return PCMRepositorySimilarityChecker.this.isSimilar(param1.getDataType__Parameter(),
+ param2.getDataType__Parameter());
+ }
+
+ @Override
+ public Boolean casePrimitiveDataType(PrimitiveDataType type1) {
+ PrimitiveDataType type2 = (PrimitiveDataType) compareElement;
+ return type1.getType() == type2.getType();
+ }
+
+ @Override
+ public Boolean caseCollectionDataType(CollectionDataType type1) {
+ CollectionDataType type2 = (CollectionDataType) compareElement;
+
+ if (!type1.getEntityName().equals(type2.getEntityName())) {
+ return Boolean.FALSE;
+ }
+
+ return PCMRepositorySimilarityChecker.this.isSimilar(type1.getInnerType_CollectionDataType(),
+ type2.getInnerType_CollectionDataType());
+ }
+
+ @Override
+ public Boolean caseCompositeDataType(CompositeDataType type1) {
+ CompositeDataType type2 = (CompositeDataType) compareElement;
+
+ if (!type1.getEntityName().equals(type2.getEntityName())) {
+ return Boolean.FALSE;
+ }
+
+ return PCMRepositorySimilarityChecker.this.areSimilar(type1.getParentType_CompositeDataType(),
+ type2.getParentType_CompositeDataType());
+ }
+
+ @Override
+ public Boolean caseInnerDeclaration(InnerDeclaration decl1) {
+ InnerDeclaration decl2 = (InnerDeclaration) compareElement;
+
+ if (!decl1.getEntityName().equals(decl2.getEntityName())) {
+ return Boolean.FALSE;
+ }
+
+ return PCMRepositorySimilarityChecker.this.isSimilar(decl1.getDatatype_InnerDeclaration(),
+ decl2.getDatatype_InnerDeclaration());
+ }
+
+ @Override
+ public Boolean caseBasicComponent(BasicComponent com1) {
+ BasicComponent com2 = (BasicComponent) compareElement;
+
+ return com1.getEntityName().equals(com2.getEntityName());
+ }
+
+ @Override
+ public Boolean caseOperationProvidedRole(OperationProvidedRole opRole1) {
+ OperationProvidedRole opRole2 = (OperationProvidedRole) compareElement;
+
+ return PCMRepositorySimilarityChecker.this.isSimilar(
+ opRole1.getProvidedInterface__OperationProvidedRole(),
+ opRole2.getProvidedInterface__OperationProvidedRole());
+ }
+
+ @Override
+ public Boolean caseOperationRequiredRole(OperationRequiredRole reqRole1) {
+ OperationRequiredRole reqRole2 = (OperationRequiredRole) compareElement;
+
+ return PCMRepositorySimilarityChecker.this.isSimilar(
+ reqRole1.getRequiredInterface__OperationRequiredRole(),
+ reqRole2.getRequiredInterface__OperationRequiredRole());
+ }
+
+ @Override
+ public Boolean caseCompositeComponent(CompositeComponent com1) {
+ CompositeComponent com2 = (CompositeComponent) compareElement;
+
+ return com1.getEntityName().equals(com2.getEntityName());
+ }
+}
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilaritySeffSwitch.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilaritySeffSwitch.java
new file mode 100644
index 0000000000..5d6c5e8829
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilaritySeffSwitch.java
@@ -0,0 +1,83 @@
+package cipm.consistency.commitintegration.diff.util.pcm.switches;
+
+import org.palladiosimulator.pcm.seff.AbstractAction;
+import org.palladiosimulator.pcm.seff.AbstractBranchTransition;
+import org.palladiosimulator.pcm.seff.BranchAction;
+import org.palladiosimulator.pcm.seff.CollectionIteratorAction;
+import org.palladiosimulator.pcm.seff.ExternalCallAction;
+import org.palladiosimulator.pcm.seff.ResourceDemandingBehaviour;
+import org.palladiosimulator.pcm.seff.ResourceDemandingSEFF;
+import org.palladiosimulator.pcm.seff.util.SeffSwitch;
+
+import cipm.consistency.commitintegration.diff.util.pcm.PCMRepositorySimilarityChecker;
+
+class SimilaritySeffSwitch extends SeffSwitch {
+ private Boolean checkPositionInContainer(AbstractAction action1, AbstractAction action2) {
+ ResourceDemandingBehaviour parent1 = (ResourceDemandingBehaviour) action1.eContainer();
+ ResourceDemandingBehaviour parent2 = (ResourceDemandingBehaviour) action2.eContainer();
+
+ return parent1.getSteps_Behaviour().indexOf(action1)
+ == parent2.getSteps_Behaviour().indexOf(action2);
+ }
+
+ @Override
+ public Boolean caseAbstractAction(AbstractAction action1) {
+ AbstractAction action2 = (AbstractAction) compareElement;
+ return checkPositionInContainer(action1, action2);
+ }
+
+ @Override
+ public Boolean caseResourceDemandingBehaviour(ResourceDemandingBehaviour behav1) {
+ ResourceDemandingBehaviour behav2 = (ResourceDemandingBehaviour) compareElement;
+ return PCMRepositorySimilarityChecker.this.areSimilar(behav1.getSteps_Behaviour(), behav2.getSteps_Behaviour());
+ }
+
+ @Override
+ public Boolean caseResourceDemandingSEFF(ResourceDemandingSEFF seff1) {
+ ResourceDemandingSEFF seff2 = (ResourceDemandingSEFF) compareElement;
+
+ return PCMRepositorySimilarityChecker.this.isSimilar(seff1.getDescribedService__SEFF(),
+ seff2.getDescribedService__SEFF());
+ }
+
+ @Override
+ public Boolean caseCollectionIteratorAction(CollectionIteratorAction action1) {
+ CollectionIteratorAction action2 = (CollectionIteratorAction) compareElement;
+
+ var result = PCMRepositorySimilarityChecker.this.isSimilar(
+ action1.getParameter_CollectionIteratorAction(),
+ action2.getParameter_CollectionIteratorAction());
+
+ if (!result) {
+ return Boolean.FALSE;
+ }
+
+ return checkPositionInContainer(action1, action2);
+ }
+
+ @Override
+ public Boolean caseAbstractBranchTransition(AbstractBranchTransition transition1) {
+ AbstractBranchTransition transition2 = (AbstractBranchTransition) compareElement;
+
+ BranchAction parent1 = (BranchAction) transition1.eContainer();
+ BranchAction parent2 = (BranchAction) transition2.eContainer();
+
+ return parent1.getBranches_Branch().indexOf(transition1) == parent2.getBranches_Branch()
+ .indexOf(transition2);
+ }
+
+ @Override
+ public Boolean caseExternalCallAction(ExternalCallAction action1) {
+ ExternalCallAction action2 = (ExternalCallAction) compareElement;
+
+ var result = PCMRepositorySimilarityChecker.this.isSimilar(
+ action1.getCalledService_ExternalService(),
+ action2.getCalledService_ExternalService());
+
+ if (!result) {
+ return Boolean.FALSE;
+ }
+
+ return checkPositionInContainer(action1, action2);
+ }
+}
From d0ed14793f7278c98d329d175cec9a349e48287e Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Tue, 3 Sep 2024 17:50:08 +0200
Subject: [PATCH 27/35] (WIP) Implement similarity switch for PCM
Use the extracted structure in PCM-related similarity switch
Use extracted inner switches in PCM-related similarity switch
Non-similarity switch
---
.../pcm/PCMRepositorySimilaritySwitch.java | 66 +++++++++++++++++++
1 file changed, 66 insertions(+)
create mode 100644 commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositorySimilaritySwitch.java
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositorySimilaritySwitch.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositorySimilaritySwitch.java
new file mode 100644
index 0000000000..8f70179a5a
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositorySimilaritySwitch.java
@@ -0,0 +1,66 @@
+package cipm.consistency.commitintegration.diff.util.pcm;
+
+import java.util.Collection;
+
+import org.eclipse.emf.ecore.util.Switch;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequest;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
+import org.splevo.jamopp.diffing.similarity.base.ecore.AbstractComposedSimilaritySwitch;
+
+import cipm.consistency.commitintegration.diff.util.pcm.switches.SimilarityRepositorySwitch;
+import cipm.consistency.commitintegration.diff.util.pcm.switches.SimilaritySeffSwitch;
+
+/**
+ * Concrete implementation of {@link AbstractComposedSimilaritySwitch} for
+ * computing the similarity of Palladio Component Model (PCM) repositories.
+ *
+ * @author atora
+ */
+public class PCMRepositorySimilaritySwitch extends AbstractComposedSimilaritySwitch
+ implements IPCMRepositorySimilaritySwitch {
+ /**
+ * Constructs an instance with the given request handler and the flag. Adds
+ * default inner switches to the constructed instance.
+ *
+ * @param srh The request handler, to which all incoming
+ * {@link ISimilarityRequest} instances will be
+ * delegated.
+ * @param checkStatementPosition The flag, which denotes whether this switch
+ * should take positions of statements while
+ * comparing.
+ */
+ public PCMRepositorySimilaritySwitch(ISimilarityRequestHandler srh, boolean checkStatementPosition) {
+ super(srh);
+
+ this.addSwitch(new SimilarityRepositorySwitch(this, checkStatementPosition));
+ this.addSwitch(new SimilaritySeffSwitch(this, checkStatementPosition));
+ }
+
+ /**
+ * Constructs an instance with the given {@link ISimilarityRequestHandler}.
+ *
+ * @param srh The {@link ISimilarityRequestHandler}, to which incoming
+ * {@link ISimilarityRequest} instances will be delegated.
+ */
+ protected PCMRepositorySimilaritySwitch(ISimilarityRequestHandler srh) {
+ super(srh);
+ }
+
+ /**
+ * Variation of
+ * {@link #PCMRepositorySimilaritySwitch(ISimilarityRequestHandler)} that
+ * constructs an instance with the given switches.
+ */
+ protected PCMRepositorySimilaritySwitch(ISimilarityRequestHandler srh, Collection> switches) {
+ super(srh, switches);
+ }
+
+ /**
+ * Variation of
+ * {@link #PCMRepositorySimilaritySwitch(ISimilarityRequestHandler)} that
+ * constructs an instance with the given switches.
+ */
+ protected PCMRepositorySimilaritySwitch(ISimilarityRequestHandler srh, Switch[] switches) {
+ super(srh, switches);
+ }
+}
\ No newline at end of file
From 45ddfdbb21a92eab7b74339efd62559b6cae9c31 Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Mon, 2 Sep 2024 19:03:25 +0200
Subject: [PATCH 28/35] (WIP) Implement request and handler
For creating new PCM-related similarity switches
Non-functional commit
---
...wPCMRepositorySimilaritySwitchHandler.java | 51 +++++++++++++++++++
...wPCMRepositorySimilaritySwitchRequest.java | 35 +++++++++++++
2 files changed, 86 insertions(+)
create mode 100644 commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/handlers/NewPCMRepositorySimilaritySwitchHandler.java
create mode 100644 commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/requests/NewPCMRepositorySimilaritySwitchRequest.java
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/handlers/NewPCMRepositorySimilaritySwitchHandler.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/handlers/NewPCMRepositorySimilaritySwitchHandler.java
new file mode 100644
index 0000000000..e43f434872
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/handlers/NewPCMRepositorySimilaritySwitchHandler.java
@@ -0,0 +1,51 @@
+package cipm.consistency.commitintegration.diff.util.pcm.handlers;
+
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequest;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
+
+import cipm.consistency.commitintegration.diff.util.pcm.PCMRepositorySimilaritySwitch;
+import cipm.consistency.commitintegration.diff.util.pcm.requests.NewPCMRepositorySimilaritySwitchRequest;
+
+/**
+ * An {@link ISimilarityRequestHandler} that processes incoming
+ * {@link NewPCMRepositorySimilaritySwitchRequest} instances.
+ *
+ * @author atora
+ */
+public class NewPCMRepositorySimilaritySwitchHandler implements ISimilarityRequestHandler {
+ /**
+ * The {@link ISimilarityRequestHandler}, which will be passed onto the
+ * similarity switches created in
+ * {@link #handleSimilarityRequest(ISimilarityRequest)}.
+ */
+ private ISimilarityRequestHandler srh;
+
+ /**
+ * Constructs an instance with the given {@link ISimilarityRequestHandler}.
+ *
+ * @param srh The {@link ISimilarityRequestHandler}, which will be passed onto
+ * the similarity switches created in
+ * {@link #handleSimilarityRequest(ISimilarityRequest)}.
+ */
+ public NewPCMRepositorySimilaritySwitchHandler(ISimilarityRequestHandler srh) {
+ this.srh = srh;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Constructs a new {@link PCMRepositorySimilaritySwitch} (with its
+ * {@link #srh}) and returns it.
+ */
+ @Override
+ public Object handleSimilarityRequest(ISimilarityRequest req) {
+ NewPCMRepositorySimilaritySwitchRequest castedR = (NewPCMRepositorySimilaritySwitchRequest) req;
+ Boolean csp = (Boolean) castedR.getParams();
+ return new PCMRepositorySimilaritySwitch(this.srh, csp);
+ }
+
+ @Override
+ public boolean canHandleSimilarityRequest(Class extends ISimilarityRequest> reqClass) {
+ return reqClass.equals(NewPCMRepositorySimilaritySwitchRequest.class);
+ }
+}
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/requests/NewPCMRepositorySimilaritySwitchRequest.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/requests/NewPCMRepositorySimilaritySwitchRequest.java
new file mode 100644
index 0000000000..dc115cea6a
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/requests/NewPCMRepositorySimilaritySwitchRequest.java
@@ -0,0 +1,35 @@
+package cipm.consistency.commitintegration.diff.util.pcm.requests;
+
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequest;
+
+/**
+ * An {@link ISimilarityRequest}, which contains a flag that denotes, whether
+ * the new similarity switch created by processing this request should care
+ * about positions of statements while computing similarity.
+ *
+ * @author atora
+ */
+public class NewPCMRepositorySimilaritySwitchRequest implements ISimilarityRequest {
+ /**
+ * The flag that denotes, whether the resulting new similarity switch should
+ * care about positions of statements while computing similarity.
+ */
+ private boolean checkStatementPosition;
+
+ /**
+ * Constructs an instance with the given parameter.
+ *
+ * @param checkStatementPosition The flag that denotes, whether the resulting
+ * new similarity switch should care about
+ * positions of statements while computing
+ * similarity.
+ */
+ public NewPCMRepositorySimilaritySwitchRequest(boolean checkStatementPosition) {
+ this.checkStatementPosition = checkStatementPosition;
+ }
+
+ @Override
+ public Object getParams() {
+ return this.checkStatementPosition;
+ }
+}
From c135c8e50afce97be7df939cc62e7cb7a4563533 Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Sat, 31 Aug 2024 16:11:17 +0200
Subject: [PATCH 29/35] (WIP) Implement interface
For PCM-related inner switches that create further switches
Non-functional commit
---
.../pcm/switches/IPCMPositionInnerSwitch.java | 27 +++++++++++++++++++
1 file changed, 27 insertions(+)
create mode 100644 commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/IPCMPositionInnerSwitch.java
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/IPCMPositionInnerSwitch.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/IPCMPositionInnerSwitch.java
new file mode 100644
index 0000000000..246e9f72f2
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/IPCMPositionInnerSwitch.java
@@ -0,0 +1,27 @@
+package cipm.consistency.commitintegration.diff.util.pcm.switches;
+
+import org.splevo.jamopp.diffing.similarity.base.ecore.IPositionInnerSwitch;
+
+import cipm.consistency.commitintegration.diff.util.pcm.IPCMRepositorySimilaritySwitch;
+import cipm.consistency.commitintegration.diff.util.pcm.requests.NewPCMRepositorySimilaritySwitchRequest;
+
+/**
+ * An interface that bundles and complements {@link IPCMInnerSwitch} and
+ * {@link IPositionInnerSwitch} interfaces. Contains methods, which are specific
+ * to computing similarity in the context of Palladio Component Model (PCM)
+ * repositories.
+ *
+ * @author atora
+ */
+public interface IPCMPositionInnerSwitch extends IPCMInnerSwitch, IPositionInnerSwitch {
+ /**
+ * Sends out a {@link NewPCMRepositorySimilaritySwitchRequest} and returns the
+ * result.
+ *
+ * @see {@link #handleSimilarityRequest(org.splevo.jamopp.diffing.similarity.base.ISimilarityRequest)}
+ */
+ public default IPCMRepositorySimilaritySwitch requestNewSwitch(boolean checkStatementPosition) {
+ return (IPCMRepositorySimilaritySwitch) this
+ .handleSimilarityRequest(new NewPCMRepositorySimilaritySwitchRequest(checkStatementPosition));
+ }
+}
From 7c79364c929b60cc4b6324a45888cb6572f2cc35 Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Tue, 3 Sep 2024 17:52:19 +0200
Subject: [PATCH 30/35] (WIP) Adapt inner switches
Use implemented interfaces in PCM-related inner switches
Use extracted structure in PCM-related inner switches
Non-functional commit
---
.../switches/SimilarityRepositorySwitch.java | 75 +++++++++++++------
.../pcm/switches/SimilaritySeffSwitch.java | 53 +++++++++----
2 files changed, 91 insertions(+), 37 deletions(-)
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilarityRepositorySwitch.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilarityRepositorySwitch.java
index 35d6215985..c004833d5e 100644
--- a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilarityRepositorySwitch.java
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilarityRepositorySwitch.java
@@ -13,13 +13,40 @@
import org.palladiosimulator.pcm.repository.PrimitiveDataType;
import org.palladiosimulator.pcm.repository.Repository;
import org.palladiosimulator.pcm.repository.util.RepositorySwitch;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
+import org.splevo.jamopp.diffing.similarity.base.ecore.IComposedSwitchAdapter;
-import cipm.consistency.commitintegration.diff.util.pcm.PCMRepositorySimilarityChecker;
+import cipm.consistency.commitintegration.diff.util.pcm.IPCMRepositorySimilaritySwitch;
+
+public class SimilarityRepositorySwitch extends RepositorySwitch implements IPCMPositionInnerSwitch {
+ private IPCMRepositorySimilaritySwitch similaritySwitch;
+ private boolean checkStatementPosition;
+
+ @Override
+ public ISimilarityRequestHandler getSimilarityRequestHandler() {
+ return this.similaritySwitch;
+ }
+
+ @Override
+ public IComposedSwitchAdapter getContainingSwitch() {
+ return this.similaritySwitch;
+ }
+
+ @Override
+ public boolean shouldCheckStatementPosition() {
+ return this.checkStatementPosition;
+ }
+
+ public SimilarityRepositorySwitch(
+ IPCMRepositorySimilaritySwitch similaritySwitch,
+ boolean checkStatementPosition) {
+ this.similaritySwitch = similaritySwitch;
+ this.checkStatementPosition = checkStatementPosition;
+ }
-class SimilarityRepositorySwitch extends RepositorySwitch {
@Override
public Boolean caseRepository(Repository repo1) {
- Repository repo2 = (Repository) compareElement;
+ Repository repo2 = (Repository) this.getCompareElement();
if (!repo1.getEntityName().equals(repo2.getEntityName())) {
return Boolean.FALSE;
@@ -30,26 +57,26 @@ public Boolean caseRepository(Repository repo1) {
@Override
public Boolean caseOperationInterface(OperationInterface opInterface1) {
- OperationInterface opInterface2 = (OperationInterface) compareElement;
+ OperationInterface opInterface2 = (OperationInterface) this.getCompareElement();
if (!opInterface1.getEntityName().equals(opInterface2.getEntityName())) {
return Boolean.FALSE;
}
- return PCMRepositorySimilarityChecker.this.areSimilar(
+ return this.areSimilar(
opInterface1.getParentInterfaces__Interface(),
opInterface2.getParentInterfaces__Interface());
}
@Override
public Boolean caseOperationSignature(OperationSignature sign1) {
- OperationSignature sign2 = (OperationSignature) compareElement;
+ OperationSignature sign2 = (OperationSignature) this.getCompareElement();
if (!sign1.getEntityName().equals(sign2.getEntityName())) {
return Boolean.FALSE;
}
- var result = PCMRepositorySimilarityChecker.this.areSimilar(
+ var result = this.areSimilar(
sign1.getParameters__OperationSignature(),
sign2.getParameters__OperationSignature());
@@ -57,93 +84,93 @@ public Boolean caseOperationSignature(OperationSignature sign1) {
return Boolean.FALSE;
}
- return PCMRepositorySimilarityChecker.this.isSimilar(sign1.getReturnType__OperationSignature(),
+ return this.isSimilar(sign1.getReturnType__OperationSignature(),
sign2.getReturnType__OperationSignature());
}
@Override
public Boolean caseParameter(Parameter param1) {
- Parameter param2 = (Parameter) compareElement;
+ Parameter param2 = (Parameter) this.getCompareElement();
if (!param1.getParameterName().equals(param2.getParameterName())) {
return Boolean.FALSE;
}
- return PCMRepositorySimilarityChecker.this.isSimilar(param1.getDataType__Parameter(),
+ return this.isSimilar(param1.getDataType__Parameter(),
param2.getDataType__Parameter());
}
@Override
public Boolean casePrimitiveDataType(PrimitiveDataType type1) {
- PrimitiveDataType type2 = (PrimitiveDataType) compareElement;
+ PrimitiveDataType type2 = (PrimitiveDataType) this.getCompareElement();
return type1.getType() == type2.getType();
}
@Override
public Boolean caseCollectionDataType(CollectionDataType type1) {
- CollectionDataType type2 = (CollectionDataType) compareElement;
+ CollectionDataType type2 = (CollectionDataType) this.getCompareElement();
if (!type1.getEntityName().equals(type2.getEntityName())) {
return Boolean.FALSE;
}
- return PCMRepositorySimilarityChecker.this.isSimilar(type1.getInnerType_CollectionDataType(),
+ return this.isSimilar(type1.getInnerType_CollectionDataType(),
type2.getInnerType_CollectionDataType());
}
@Override
public Boolean caseCompositeDataType(CompositeDataType type1) {
- CompositeDataType type2 = (CompositeDataType) compareElement;
+ CompositeDataType type2 = (CompositeDataType) this.getCompareElement();
if (!type1.getEntityName().equals(type2.getEntityName())) {
return Boolean.FALSE;
}
- return PCMRepositorySimilarityChecker.this.areSimilar(type1.getParentType_CompositeDataType(),
+ return this.areSimilar(type1.getParentType_CompositeDataType(),
type2.getParentType_CompositeDataType());
}
@Override
public Boolean caseInnerDeclaration(InnerDeclaration decl1) {
- InnerDeclaration decl2 = (InnerDeclaration) compareElement;
+ InnerDeclaration decl2 = (InnerDeclaration) this.getCompareElement();
if (!decl1.getEntityName().equals(decl2.getEntityName())) {
return Boolean.FALSE;
}
- return PCMRepositorySimilarityChecker.this.isSimilar(decl1.getDatatype_InnerDeclaration(),
+ return this.isSimilar(decl1.getDatatype_InnerDeclaration(),
decl2.getDatatype_InnerDeclaration());
}
@Override
public Boolean caseBasicComponent(BasicComponent com1) {
- BasicComponent com2 = (BasicComponent) compareElement;
+ BasicComponent com2 = (BasicComponent) this.getCompareElement();
return com1.getEntityName().equals(com2.getEntityName());
}
@Override
public Boolean caseOperationProvidedRole(OperationProvidedRole opRole1) {
- OperationProvidedRole opRole2 = (OperationProvidedRole) compareElement;
+ OperationProvidedRole opRole2 = (OperationProvidedRole) this.getCompareElement();
- return PCMRepositorySimilarityChecker.this.isSimilar(
+ return this.isSimilar(
opRole1.getProvidedInterface__OperationProvidedRole(),
opRole2.getProvidedInterface__OperationProvidedRole());
}
@Override
public Boolean caseOperationRequiredRole(OperationRequiredRole reqRole1) {
- OperationRequiredRole reqRole2 = (OperationRequiredRole) compareElement;
+ OperationRequiredRole reqRole2 = (OperationRequiredRole) this.getCompareElement();
- return PCMRepositorySimilarityChecker.this.isSimilar(
+ return this.isSimilar(
reqRole1.getRequiredInterface__OperationRequiredRole(),
reqRole2.getRequiredInterface__OperationRequiredRole());
}
@Override
public Boolean caseCompositeComponent(CompositeComponent com1) {
- CompositeComponent com2 = (CompositeComponent) compareElement;
+ CompositeComponent com2 = (CompositeComponent) this.getCompareElement();
return com1.getEntityName().equals(com2.getEntityName());
}
-}
+}
\ No newline at end of file
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilaritySeffSwitch.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilaritySeffSwitch.java
index 5d6c5e8829..67b946e198 100644
--- a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilaritySeffSwitch.java
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/switches/SimilaritySeffSwitch.java
@@ -8,10 +8,37 @@
import org.palladiosimulator.pcm.seff.ResourceDemandingBehaviour;
import org.palladiosimulator.pcm.seff.ResourceDemandingSEFF;
import org.palladiosimulator.pcm.seff.util.SeffSwitch;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
+import org.splevo.jamopp.diffing.similarity.base.ecore.IComposedSwitchAdapter;
-import cipm.consistency.commitintegration.diff.util.pcm.PCMRepositorySimilarityChecker;
+import cipm.consistency.commitintegration.diff.util.pcm.IPCMRepositorySimilaritySwitch;
+
+public class SimilaritySeffSwitch extends SeffSwitch implements IPCMPositionInnerSwitch {
+ private IPCMRepositorySimilaritySwitch similaritySwitch;
+ private boolean checkStatementPosition;
+
+ @Override
+ public ISimilarityRequestHandler getSimilarityRequestHandler() {
+ return this.similaritySwitch;
+ }
+
+ @Override
+ public IComposedSwitchAdapter getContainingSwitch() {
+ return this.similaritySwitch;
+ }
+
+ @Override
+ public boolean shouldCheckStatementPosition() {
+ return this.checkStatementPosition;
+ }
+
+ public SimilaritySeffSwitch(
+ IPCMRepositorySimilaritySwitch similaritySwitch,
+ boolean checkStatementPosition) {
+ this.similaritySwitch = similaritySwitch;
+ this.checkStatementPosition = checkStatementPosition;
+ }
-class SimilaritySeffSwitch extends SeffSwitch {
private Boolean checkPositionInContainer(AbstractAction action1, AbstractAction action2) {
ResourceDemandingBehaviour parent1 = (ResourceDemandingBehaviour) action1.eContainer();
ResourceDemandingBehaviour parent2 = (ResourceDemandingBehaviour) action2.eContainer();
@@ -22,29 +49,29 @@ private Boolean checkPositionInContainer(AbstractAction action1, AbstractAction
@Override
public Boolean caseAbstractAction(AbstractAction action1) {
- AbstractAction action2 = (AbstractAction) compareElement;
+ AbstractAction action2 = (AbstractAction) getCompareElement();
return checkPositionInContainer(action1, action2);
}
@Override
public Boolean caseResourceDemandingBehaviour(ResourceDemandingBehaviour behav1) {
- ResourceDemandingBehaviour behav2 = (ResourceDemandingBehaviour) compareElement;
- return PCMRepositorySimilarityChecker.this.areSimilar(behav1.getSteps_Behaviour(), behav2.getSteps_Behaviour());
+ ResourceDemandingBehaviour behav2 = (ResourceDemandingBehaviour) getCompareElement();
+ return areSimilar(behav1.getSteps_Behaviour(), behav2.getSteps_Behaviour());
}
@Override
public Boolean caseResourceDemandingSEFF(ResourceDemandingSEFF seff1) {
- ResourceDemandingSEFF seff2 = (ResourceDemandingSEFF) compareElement;
+ ResourceDemandingSEFF seff2 = (ResourceDemandingSEFF) getCompareElement();
- return PCMRepositorySimilarityChecker.this.isSimilar(seff1.getDescribedService__SEFF(),
+ return isSimilar(seff1.getDescribedService__SEFF(),
seff2.getDescribedService__SEFF());
}
@Override
public Boolean caseCollectionIteratorAction(CollectionIteratorAction action1) {
- CollectionIteratorAction action2 = (CollectionIteratorAction) compareElement;
+ CollectionIteratorAction action2 = (CollectionIteratorAction) getCompareElement();
- var result = PCMRepositorySimilarityChecker.this.isSimilar(
+ var result = isSimilar(
action1.getParameter_CollectionIteratorAction(),
action2.getParameter_CollectionIteratorAction());
@@ -57,7 +84,7 @@ public Boolean caseCollectionIteratorAction(CollectionIteratorAction action1) {
@Override
public Boolean caseAbstractBranchTransition(AbstractBranchTransition transition1) {
- AbstractBranchTransition transition2 = (AbstractBranchTransition) compareElement;
+ AbstractBranchTransition transition2 = (AbstractBranchTransition) getCompareElement();
BranchAction parent1 = (BranchAction) transition1.eContainer();
BranchAction parent2 = (BranchAction) transition2.eContainer();
@@ -68,9 +95,9 @@ public Boolean caseAbstractBranchTransition(AbstractBranchTransition transition1
@Override
public Boolean caseExternalCallAction(ExternalCallAction action1) {
- ExternalCallAction action2 = (ExternalCallAction) compareElement;
+ ExternalCallAction action2 = (ExternalCallAction) getCompareElement();
- var result = PCMRepositorySimilarityChecker.this.isSimilar(
+ var result = isSimilar(
action1.getCalledService_ExternalService(),
action2.getCalledService_ExternalService());
@@ -80,4 +107,4 @@ public Boolean caseExternalCallAction(ExternalCallAction action1) {
return checkPositionInContainer(action1, action2);
}
-}
+}
\ No newline at end of file
From f5b7348e42d4b3f3049e9383590b3f9d6097c302 Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Fri, 30 Aug 2024 19:19:05 +0200
Subject: [PATCH 31/35] (WIP) Implement toolbox builder
For PCM similarity checker construction
Non-functional commit
---
...PCMRepositorySimilarityToolboxBuilder.java | 81 +++++++++++++++++++
1 file changed, 81 insertions(+)
create mode 100644 commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositorySimilarityToolboxBuilder.java
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositorySimilarityToolboxBuilder.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositorySimilarityToolboxBuilder.java
new file mode 100644
index 0000000000..f6a10e0114
--- /dev/null
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositorySimilarityToolboxBuilder.java
@@ -0,0 +1,81 @@
+package cipm.consistency.commitintegration.diff.util.pcm;
+
+import org.splevo.jamopp.diffing.similarity.base.AbstractSimilarityToolboxBuilder;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequest;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequestHandler;
+import org.splevo.jamopp.diffing.similarity.base.ecore.MultipleSimilarityCheckHandler;
+import org.splevo.jamopp.diffing.similarity.base.ecore.MultipleSimilarityCheckRequest;
+import org.splevo.jamopp.diffing.similarity.base.ecore.SingleSimilarityCheckHandler;
+import org.splevo.jamopp.diffing.similarity.base.ecore.SingleSimilarityCheckRequest;
+
+import cipm.consistency.commitintegration.diff.util.pcm.handlers.IDBasedSingleSimilarityCheckHandler;
+import cipm.consistency.commitintegration.diff.util.pcm.handlers.NewPCMRepositorySimilaritySwitchHandler;
+import cipm.consistency.commitintegration.diff.util.pcm.requests.NewPCMRepositorySimilaritySwitchRequest;
+
+/**
+ * Concrete implementation of {@link AbstractSimilarityToolboxBuilder} for
+ * constructing {@link ISimilarityToolbox} instances for computing similarity of
+ * Palladio Component Model (PCM) repositories.
+ *
+ * @author atora
+ */
+public class PCMRepositorySimilarityToolboxBuilder extends AbstractSimilarityToolboxBuilder {
+ @Override
+ public PCMRepositorySimilarityToolboxBuilder instantiate() {
+ return (PCMRepositorySimilarityToolboxBuilder) super.instantiate();
+ }
+
+ @Override
+ public PCMRepositorySimilarityToolboxBuilder buildRequestHandlerPair(Class extends ISimilarityRequest> req,
+ ISimilarityRequestHandler srh) {
+ return (PCMRepositorySimilarityToolboxBuilder) super.buildRequestHandlerPair(req, srh);
+ }
+
+ /**
+ * Adds the handlers required to handle similarity checking related
+ * {@link ISimilarityRequest} instances.
+ *
+ * Pairs added by this method will override those added by
+ * {@link #buildIDBasedComparisonPairs()}
+ *
+ * @return this
+ */
+ public PCMRepositorySimilarityToolboxBuilder buildComparisonPairs() {
+ this.buildRequestHandlerPair(SingleSimilarityCheckRequest.class, new SingleSimilarityCheckHandler());
+ this.buildRequestHandlerPair(MultipleSimilarityCheckRequest.class,
+ new MultipleSimilarityCheckHandler(this.getCurrentToolbox()));
+
+ return this;
+ }
+
+ /**
+ * Adds the handlers required to handle ID based similarity checking related
+ * {@link ISimilarityRequest} instances.
+ *
+ * Pairs added by this method will override those added by
+ * {@link #buildComparisonPairs()}
+ *
+ * @return this
+ */
+ public PCMRepositorySimilarityToolboxBuilder buildIDBasedComparisonPairs() {
+ this.buildRequestHandlerPair(SingleSimilarityCheckRequest.class, new IDBasedSingleSimilarityCheckHandler());
+ this.buildRequestHandlerPair(MultipleSimilarityCheckRequest.class,
+ new MultipleSimilarityCheckHandler(this.getCurrentToolbox()));
+
+ return this;
+ }
+
+ /**
+ * Adds the handler needed to handle {@link ISimilarityRequest} instances, which
+ * request new similarity switch instances.
+ *
+ * @return this
+ * @see {@link IPCMRepositorySimilaritySwitch}
+ */
+ public PCMRepositorySimilarityToolboxBuilder buildNewPCMRepositorySimilaritySwitch() {
+ this.buildRequestHandlerPair(NewPCMRepositorySimilaritySwitchRequest.class,
+ new NewPCMRepositorySimilaritySwitchHandler(this.getCurrentToolbox()));
+
+ return this;
+ }
+}
From 26bf1511604d8d8667746db24d9131bbaaae2f58 Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Fri, 30 Aug 2024 19:14:56 +0200
Subject: [PATCH 32/35] (WIP) Prepare PCM similarity checker
Non-functional commit
---
.../pcm/PCMRepositorySimilarityChecker.java | 259 +-----------------
1 file changed, 15 insertions(+), 244 deletions(-)
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositorySimilarityChecker.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositorySimilarityChecker.java
index 60e5d5686c..a6b22d8755 100644
--- a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositorySimilarityChecker.java
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositorySimilarityChecker.java
@@ -1,257 +1,28 @@
package cipm.consistency.commitintegration.diff.util.pcm;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.util.ComposedSwitch;
-import org.palladiosimulator.pcm.repository.BasicComponent;
-import org.palladiosimulator.pcm.repository.CollectionDataType;
-import org.palladiosimulator.pcm.repository.CompositeComponent;
-import org.palladiosimulator.pcm.repository.CompositeDataType;
-import org.palladiosimulator.pcm.repository.InnerDeclaration;
-import org.palladiosimulator.pcm.repository.OperationInterface;
-import org.palladiosimulator.pcm.repository.OperationProvidedRole;
-import org.palladiosimulator.pcm.repository.OperationRequiredRole;
-import org.palladiosimulator.pcm.repository.OperationSignature;
-import org.palladiosimulator.pcm.repository.Parameter;
-import org.palladiosimulator.pcm.repository.PrimitiveDataType;
-import org.palladiosimulator.pcm.repository.Repository;
-import org.palladiosimulator.pcm.repository.util.RepositorySwitch;
-import org.palladiosimulator.pcm.seff.AbstractAction;
-import org.palladiosimulator.pcm.seff.AbstractBranchTransition;
-import org.palladiosimulator.pcm.seff.BranchAction;
-import org.palladiosimulator.pcm.seff.CollectionIteratorAction;
-import org.palladiosimulator.pcm.seff.ExternalCallAction;
-import org.palladiosimulator.pcm.seff.ResourceDemandingBehaviour;
-import org.palladiosimulator.pcm.seff.ResourceDemandingSEFF;
-import org.palladiosimulator.pcm.seff.util.SeffSwitch;
-import org.splevo.jamopp.diffing.similarity.SimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityRequest;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityToolbox;
+import org.splevo.jamopp.diffing.similarity.base.ecore.AbstractComposedSwitchSimilarityChecker;
+
+import cipm.consistency.commitintegration.diff.util.pcm.requests.NewPCMRepositorySimilaritySwitchRequest;
/**
* A SimilarityChecker for PCM repository models.
*
* @author Martin Armbruster
*/
-public class PCMRepositorySimilarityChecker extends SimilarityChecker {
+public class PCMRepositorySimilarityChecker extends AbstractComposedSwitchSimilarityChecker {
+ public PCMRepositorySimilarityChecker(ISimilarityToolbox st) {
+ super(st);
+ }
+
@Override
- protected Boolean checkSimilarityForResolvedAndSameType(EObject element1, EObject element2,
- boolean checkStatementPosition) {
- return new PCMRepositorySimilaritySwitch(element1).doSwitch(element2);
+ protected PCMRepositorySimilarityComparer createSimilarityComparer(ISimilarityToolbox st) {
+ return new PCMRepositorySimilarityComparer(st);
}
- class PCMRepositorySimilaritySwitch extends ComposedSwitch {
- private EObject compareElement;
-
- PCMRepositorySimilaritySwitch(EObject compareElement) {
- this.compareElement = compareElement;
- this.addSwitch(new SimilarityRepositorySwitch());
- this.addSwitch(new SimilaritySeffSwitch());
- }
-
- class SimilarityRepositorySwitch extends RepositorySwitch {
- @Override
- public Boolean caseRepository(Repository repo1) {
- Repository repo2 = (Repository) compareElement;
-
- if (!repo1.getEntityName().equals(repo2.getEntityName())) {
- return Boolean.FALSE;
- }
-
- return Boolean.TRUE;
- }
-
- @Override
- public Boolean caseOperationInterface(OperationInterface opInterface1) {
- OperationInterface opInterface2 = (OperationInterface) compareElement;
-
- if (!opInterface1.getEntityName().equals(opInterface2.getEntityName())) {
- return Boolean.FALSE;
- }
-
- return PCMRepositorySimilarityChecker.this.areSimilar(
- opInterface1.getParentInterfaces__Interface(),
- opInterface2.getParentInterfaces__Interface());
- }
-
- @Override
- public Boolean caseOperationSignature(OperationSignature sign1) {
- OperationSignature sign2 = (OperationSignature) compareElement;
-
- if (!sign1.getEntityName().equals(sign2.getEntityName())) {
- return Boolean.FALSE;
- }
-
- var result = PCMRepositorySimilarityChecker.this.areSimilar(
- sign1.getParameters__OperationSignature(),
- sign2.getParameters__OperationSignature());
-
- if (!result) {
- return Boolean.FALSE;
- }
-
- return PCMRepositorySimilarityChecker.this.isSimilar(sign1.getReturnType__OperationSignature(),
- sign2.getReturnType__OperationSignature());
- }
-
- @Override
- public Boolean caseParameter(Parameter param1) {
- Parameter param2 = (Parameter) compareElement;
-
- if (!param1.getParameterName().equals(param2.getParameterName())) {
- return Boolean.FALSE;
- }
-
- return PCMRepositorySimilarityChecker.this.isSimilar(param1.getDataType__Parameter(),
- param2.getDataType__Parameter());
- }
-
- @Override
- public Boolean casePrimitiveDataType(PrimitiveDataType type1) {
- PrimitiveDataType type2 = (PrimitiveDataType) compareElement;
- return type1.getType() == type2.getType();
- }
-
- @Override
- public Boolean caseCollectionDataType(CollectionDataType type1) {
- CollectionDataType type2 = (CollectionDataType) compareElement;
-
- if (!type1.getEntityName().equals(type2.getEntityName())) {
- return Boolean.FALSE;
- }
-
- return PCMRepositorySimilarityChecker.this.isSimilar(type1.getInnerType_CollectionDataType(),
- type2.getInnerType_CollectionDataType());
- }
-
- @Override
- public Boolean caseCompositeDataType(CompositeDataType type1) {
- CompositeDataType type2 = (CompositeDataType) compareElement;
-
- if (!type1.getEntityName().equals(type2.getEntityName())) {
- return Boolean.FALSE;
- }
-
- return PCMRepositorySimilarityChecker.this.areSimilar(type1.getParentType_CompositeDataType(),
- type2.getParentType_CompositeDataType());
- }
-
- @Override
- public Boolean caseInnerDeclaration(InnerDeclaration decl1) {
- InnerDeclaration decl2 = (InnerDeclaration) compareElement;
-
- if (!decl1.getEntityName().equals(decl2.getEntityName())) {
- return Boolean.FALSE;
- }
-
- return PCMRepositorySimilarityChecker.this.isSimilar(decl1.getDatatype_InnerDeclaration(),
- decl2.getDatatype_InnerDeclaration());
- }
-
- @Override
- public Boolean caseBasicComponent(BasicComponent com1) {
- BasicComponent com2 = (BasicComponent) compareElement;
-
- return com1.getEntityName().equals(com2.getEntityName());
- }
-
- @Override
- public Boolean caseOperationProvidedRole(OperationProvidedRole opRole1) {
- OperationProvidedRole opRole2 = (OperationProvidedRole) compareElement;
-
- return PCMRepositorySimilarityChecker.this.isSimilar(
- opRole1.getProvidedInterface__OperationProvidedRole(),
- opRole2.getProvidedInterface__OperationProvidedRole());
- }
-
- @Override
- public Boolean caseOperationRequiredRole(OperationRequiredRole reqRole1) {
- OperationRequiredRole reqRole2 = (OperationRequiredRole) compareElement;
-
- return PCMRepositorySimilarityChecker.this.isSimilar(
- reqRole1.getRequiredInterface__OperationRequiredRole(),
- reqRole2.getRequiredInterface__OperationRequiredRole());
- }
-
- @Override
- public Boolean caseCompositeComponent(CompositeComponent com1) {
- CompositeComponent com2 = (CompositeComponent) compareElement;
-
- return com1.getEntityName().equals(com2.getEntityName());
- }
- }
-
- class SimilaritySeffSwitch extends SeffSwitch {
- private Boolean checkPositionInContainer(AbstractAction action1, AbstractAction action2) {
- ResourceDemandingBehaviour parent1 = (ResourceDemandingBehaviour) action1.eContainer();
- ResourceDemandingBehaviour parent2 = (ResourceDemandingBehaviour) action2.eContainer();
-
- return parent1.getSteps_Behaviour().indexOf(action1)
- == parent2.getSteps_Behaviour().indexOf(action2);
- }
-
- @Override
- public Boolean caseAbstractAction(AbstractAction action1) {
- AbstractAction action2 = (AbstractAction) compareElement;
- return checkPositionInContainer(action1, action2);
- }
-
- @Override
- public Boolean caseResourceDemandingBehaviour(ResourceDemandingBehaviour behav1) {
- ResourceDemandingBehaviour behav2 = (ResourceDemandingBehaviour) compareElement;
- return PCMRepositorySimilarityChecker.this.areSimilar(behav1.getSteps_Behaviour(), behav2.getSteps_Behaviour());
- }
-
- @Override
- public Boolean caseResourceDemandingSEFF(ResourceDemandingSEFF seff1) {
- ResourceDemandingSEFF seff2 = (ResourceDemandingSEFF) compareElement;
-
- return PCMRepositorySimilarityChecker.this.isSimilar(seff1.getDescribedService__SEFF(),
- seff2.getDescribedService__SEFF());
- }
-
- @Override
- public Boolean caseCollectionIteratorAction(CollectionIteratorAction action1) {
- CollectionIteratorAction action2 = (CollectionIteratorAction) compareElement;
-
- var result = PCMRepositorySimilarityChecker.this.isSimilar(
- action1.getParameter_CollectionIteratorAction(),
- action2.getParameter_CollectionIteratorAction());
-
- if (!result) {
- return Boolean.FALSE;
- }
-
- return checkPositionInContainer(action1, action2);
- }
-
- @Override
- public Boolean caseAbstractBranchTransition(AbstractBranchTransition transition1) {
- AbstractBranchTransition transition2 = (AbstractBranchTransition) compareElement;
-
- BranchAction parent1 = (BranchAction) transition1.eContainer();
- BranchAction parent2 = (BranchAction) transition2.eContainer();
-
- return parent1.getBranches_Branch().indexOf(transition1) == parent2.getBranches_Branch()
- .indexOf(transition2);
- }
-
- @Override
- public Boolean caseExternalCallAction(ExternalCallAction action1) {
- ExternalCallAction action2 = (ExternalCallAction) compareElement;
-
- var result = PCMRepositorySimilarityChecker.this.isSimilar(
- action1.getCalledService_ExternalService(),
- action2.getCalledService_ExternalService());
-
- if (!result) {
- return Boolean.FALSE;
- }
-
- return checkPositionInContainer(action1, action2);
- }
- }
-
- @Override
- public Boolean defaultCase(EObject obj) {
- return null;
- }
+ @Override
+ protected ISimilarityRequest makeDefaultSwitchRequest() {
+ return new NewPCMRepositorySimilaritySwitchRequest(true);
}
}
From c4a3df0a051aa84fdaf68ccf687ffb41e1b83851 Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Fri, 30 Aug 2024 19:17:12 +0200
Subject: [PATCH 33/35] (WIP) Delete ID-based similarity checker
The dynamic toolbox can be set to use ID-based similarity checking handler
Non-functional commit
---
...PCMRepositoryIDBasedSimilarityChecker.java | 26 -------------------
1 file changed, 26 deletions(-)
delete mode 100644 commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositoryIDBasedSimilarityChecker.java
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositoryIDBasedSimilarityChecker.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositoryIDBasedSimilarityChecker.java
deleted file mode 100644
index 3487e84f16..0000000000
--- a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositoryIDBasedSimilarityChecker.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package cipm.consistency.commitintegration.diff.util.pcm;
-
-import org.eclipse.emf.ecore.EObject;
-
-import de.uka.ipd.sdq.identifier.Identifier;
-
-/**
- * A SimiliarityChecker for PCM Repository models which includes the IDs of elements in the comparison.
- *
- * @author Martin Armbruster
- */
-public class PCMRepositoryIDBasedSimilarityChecker extends PCMRepositorySimilarityChecker {
- @Override
- protected Boolean checkSimilarityForResolvedAndSameType(EObject element1, EObject element2,
- boolean checkStatementPosition) {
- if (element1 instanceof Identifier) {
- if (element2 instanceof Identifier) {
- Identifier id1 = (Identifier) element1;
- Identifier id2 = (Identifier) element2;
- return id1.getId().equals(id2.getId());
- }
- return Boolean.FALSE;
- }
- return super.checkSimilarityForResolvedAndSameType(element1, element2, checkStatementPosition);
- }
-}
From d231a3e1c27ed3b8aefab08e7883180522483f8d Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Fri, 30 Aug 2024 19:19:58 +0200
Subject: [PATCH 34/35] Integrate toolbox builder
To the PCM related similarity checker construction
The FirstInstance should now work in a vacuum
SecondInstance is not adapted to the changes yet
---
...RepositoryMatchEngineFactoryGenerator.java | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositoryMatchEngineFactoryGenerator.java b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositoryMatchEngineFactoryGenerator.java
index aaefb22438..f046b0e9fe 100644
--- a/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositoryMatchEngineFactoryGenerator.java
+++ b/commit-based-cipm/bundles/fi/cipm.consistency.commitintegration.diff.util/src/cipm/consistency/commitintegration/diff/util/pcm/PCMRepositoryMatchEngineFactoryGenerator.java
@@ -1,6 +1,7 @@
package cipm.consistency.commitintegration.diff.util.pcm;
import org.splevo.diffing.match.HierarchicalMatchEngineFactory;
+import org.splevo.jamopp.diffing.similarity.base.MapSimilarityToolboxFactory;
import cipm.consistency.commitintegration.diff.util.HierarchicalMatchEngineFactoryGenerator;
@@ -21,7 +22,14 @@ private PCMRepositoryMatchEngineFactoryGenerator() {
* @return the generated factory.
*/
public static HierarchicalMatchEngineFactory generateMatchEngineFactory() {
- return HierarchicalMatchEngineFactoryGenerator.generateMatchEngineFactory(new PCMRepositorySimilarityChecker(),
+ var builder = new PCMRepositorySimilarityToolboxBuilder();
+ builder.setSimilarityToolboxFactory(new MapSimilarityToolboxFactory());
+
+ var toolbox = builder.instantiate()
+ .buildComparisonPairs()
+ .build();
+
+ return HierarchicalMatchEngineFactoryGenerator.generateMatchEngineFactory(new PCMRepositorySimilarityChecker(toolbox),
"repository");
}
@@ -32,7 +40,14 @@ public static HierarchicalMatchEngineFactory generateMatchEngineFactory() {
* @return the generated factory.
*/
public static HierarchicalMatchEngineFactory generateIDBasedMatchEngineFactory() {
+ var builder = new PCMRepositorySimilarityToolboxBuilder();
+ builder.setSimilarityToolboxFactory(new MapSimilarityToolboxFactory());
+
+ var toolbox = builder.instantiate()
+ .buildIDBasedComparisonPairs()
+ .build();
+
return HierarchicalMatchEngineFactoryGenerator
- .generateMatchEngineFactory(new PCMRepositoryIDBasedSimilarityChecker(), "repository");
+ .generateMatchEngineFactory(new PCMRepositorySimilarityChecker(toolbox), "repository");
}
}
From 7ecc86c56674ea554b827d3fc892573c12e74c45 Mon Sep 17 00:00:00 2001
From: AlpTorac
Date: Fri, 30 Aug 2024 15:08:25 +0200
Subject: [PATCH 35/35] Adapt SecondInstance
The SecondInstance should now work with the preceding changes to FirstInstance
---
...dClassMethodBodyChangedTransformation.java | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/commit-based-cipm/bundles/si/tools.vitruv.applications.pcmjava.seffstatements.finegrained/src/tools/vitruv/applications/pcmjava/seffstatements/code2seff/finegrained/FineGrainedClassMethodBodyChangedTransformation.java b/commit-based-cipm/bundles/si/tools.vitruv.applications.pcmjava.seffstatements.finegrained/src/tools/vitruv/applications/pcmjava/seffstatements/code2seff/finegrained/FineGrainedClassMethodBodyChangedTransformation.java
index dbd8d53b11..57050a243d 100644
--- a/commit-based-cipm/bundles/si/tools.vitruv.applications.pcmjava.seffstatements.finegrained/src/tools/vitruv/applications/pcmjava/seffstatements/code2seff/finegrained/FineGrainedClassMethodBodyChangedTransformation.java
+++ b/commit-based-cipm/bundles/si/tools.vitruv.applications.pcmjava.seffstatements.finegrained/src/tools/vitruv/applications/pcmjava/seffstatements/code2seff/finegrained/FineGrainedClassMethodBodyChangedTransformation.java
@@ -22,7 +22,10 @@
import org.somox.gast2seff.visitors.ResourceDemandingBehaviourForClassMethodFinding;
import org.somox.gast2seff.visitors.VisitorUtils;
import org.somox.sourcecodedecorator.SeffElementSourceCodeLink;
-import org.splevo.jamopp.diffing.similarity.SimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.base.ISimilarityChecker;
+import org.splevo.jamopp.diffing.similarity.base.MapSimilarityToolboxFactory;
+import org.splevo.jamopp.diffing.similarity.JavaSimilarityToolboxBuilder;
+import org.splevo.jamopp.diffing.similarity.JavaSimilarityChecker;
import de.uka.ipd.sdq.identifier.Identifier;
import tools.vitruv.applications.pcmjava.seffstatements.code2seff.BasicComponentFinding;
@@ -45,7 +48,7 @@ public class FineGrainedClassMethodBodyChangedTransformation extends ExtendedCla
private final Method newMethod;
private final BasicComponentFinding basicComponentFinder;
private ResourceDemandingBehaviourDiff rdbDifference;
- private final SimilarityChecker similarityChecker;
+ private final ISimilarityChecker similarityChecker;
public FineGrainedClassMethodBodyChangedTransformation(final Method newMethod,
final BasicComponentFinding basicComponentFinder,
@@ -56,7 +59,17 @@ public FineGrainedClassMethodBodyChangedTransformation(final Method newMethod,
resourceDemandingBehaviourForClassMethodFinding);
this.newMethod = newMethod;
this.basicComponentFinder = basicComponentFinder;
- this.similarityChecker = new SimilarityChecker();
+
+ var builder = new JavaSimilarityToolboxBuilder();
+ builder.setSimilarityToolboxFactory(new MapSimilarityToolboxFactory());
+
+ var toolbox = builder.instantiate()
+ .buildNewSimilaritySwitchHandler()
+ .buildNormalizationHandlers()
+ .buildComparisonHandlers()
+ .build();
+
+ this.similarityChecker = new JavaSimilarityChecker(toolbox);
}
/**