From 8ca4668275e7f9298b9960acc66373aa94650453 Mon Sep 17 00:00:00 2001 From: 20001LastOrder Date: Tue, 20 Aug 2019 17:13:46 -0400 Subject: changes in settings of measurements --- .../.settings/org.eclipse.wst.validation.prefs | 10 + .../META-INF/MANIFEST.MF | 3 +- .../ecore/LoopInInheritenceConstraint0.java | 79 ++ .../ecore/MoreThenFiveSuperTypesConstraint0.java | 79 -- .../ecore/NonSymmetricOppositeConstraint0.java | 80 ++ .../ecore/OppositeDifferentClassConstraint0.java | 79 ++ .../constraints/ecore/Ecore_pattern.java | 53 - .../constraints/ecore/MoreThenFiveSuperTypes.java | 621 ------------ .../ecore.ecore | 1016 ++++++++++++++++++++ .../realistic/metrics/calculator/app/Main.xtend | 7 +- .../app/PartialInterpretationMetricDistance.xtend | 8 +- .../metrics/calculator/graph/GraphStatistic.xtend | 4 + .../metrics/calculator/io/GraphReader.xtend | 3 +- .../metrics/calculator/io/RepMetricsReader.xtend | 10 +- .../metrics/TypedClusteringCoefficientMetric.xtend | 23 +- .../calculator/validation/ViolationCheck.xtend | 4 +- 16 files changed, 1306 insertions(+), 773 deletions(-) create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.settings/org.eclipse.wst.validation.prefs create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/LoopInInheritenceConstraint0.java delete mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/MoreThenFiveSuperTypesConstraint0.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/NonSymmetricOppositeConstraint0.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/OppositeDifferentClassConstraint0.java delete mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/Ecore_pattern.java delete mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/MoreThenFiveSuperTypes.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/ecore.ecore (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator') diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.settings/org.eclipse.wst.validation.prefs b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 00000000..b0a80408 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,10 @@ +DELEGATES_PREFERENCE=delegateValidatorList +USER_BUILD_PREFERENCE=enabledBuildValidatorList +USER_MANUAL_PREFERENCE=enabledManualValidatorList +USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.701.v201810290944 +eclipse.preferences.version=1 +override=true +suspend=false +vals/org.eclipse.wst.xml.core.xml/global=FF03 +vals/org.eclipse.wst.xsd.core.xsd/global=FF02162org.eclipse.wst.xsd.core.internal.validation.eclipse.Validator +vf.version=3 diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/META-INF/MANIFEST.MF b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/META-INF/MANIFEST.MF index 71eeb2c4..eacce276 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/META-INF/MANIFEST.MF +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/META-INF/MANIFEST.MF @@ -19,7 +19,8 @@ Require-Bundle: com.google.guava, org.eclipse.viatra.addon.validation.core;bundle-version="2.1.2", org.eclipse.collections;bundle-version="9.2.0", org.eclipse.viatra.query.runtime.localsearch;bundle-version="2.1.2", - org.apache.log4j;bundle-version="1.2.15" + org.apache.log4j;bundle-version="1.2.15", + github-graph;bundle-version="0.1.0" Export-Package: ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app, ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance, ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph, diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/LoopInInheritenceConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/LoopInInheritenceConstraint0.java new file mode 100644 index 00000000..c31e59e7 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/LoopInInheritenceConstraint0.java @@ -0,0 +1,79 @@ +/** +Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql +*/ +package constraints.ecore; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; +import org.eclipse.viatra.addon.validation.core.api.Severity; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; + +import ecore.LoopInInheritence; + +public class LoopInInheritenceConstraint0 implements IConstraintSpecification { + + private LoopInInheritence querySpecification; + + public LoopInInheritenceConstraint0() { + querySpecification = LoopInInheritence.instance(); + } + + @Override + public String getMessageFormat() { + return "error"; + } + + + @Override + public Map getKeyObjects(IPatternMatch signature) { + Map map = new HashMap<>(); + map.put("a",signature.get("a")); + return map; + } + + @Override + public List getKeyNames() { + List keyNames = Arrays.asList( + "a" + ); + return keyNames; + } + + @Override + public List getPropertyNames() { + List propertyNames = Arrays.asList( + ); + return propertyNames; + } + + @Override + public Set> getSymmetricPropertyNames() { + Set> symmetricPropertyNamesSet = new HashSet<>(); + return symmetricPropertyNamesSet; + } + + @Override + public Set> getSymmetricKeyNames() { + Set> symmetricKeyNamesSet = new HashSet<>(); + return symmetricKeyNamesSet; + } + + @Override + public Severity getSeverity() { + return Severity.ERROR; + } + + @Override + public IQuerySpecification> getQuerySpecification() { + return querySpecification; + } + +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/MoreThenFiveSuperTypesConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/MoreThenFiveSuperTypesConstraint0.java deleted file mode 100644 index 5243b104..00000000 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/MoreThenFiveSuperTypesConstraint0.java +++ /dev/null @@ -1,79 +0,0 @@ -/** -Generated from platform:/resource/SocialNetwork_plugin/queries/queries/ecore_pattern.vql -*/ -package constraints.ecore; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; -import org.eclipse.viatra.addon.validation.core.api.Severity; -import org.eclipse.viatra.query.runtime.api.IPatternMatch; -import org.eclipse.viatra.query.runtime.api.IQuerySpecification; -import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; - -import ecore.MoreThenFiveSuperTypes; - -public class MoreThenFiveSuperTypesConstraint0 implements IConstraintSpecification { - - private MoreThenFiveSuperTypes querySpecification; - - public MoreThenFiveSuperTypesConstraint0() { - querySpecification = MoreThenFiveSuperTypes.instance(); - } - - @Override - public String getMessageFormat() { - return "error"; - } - - - @Override - public Map getKeyObjects(IPatternMatch signature) { - Map map = new HashMap<>(); - map.put("c",signature.get("c")); - return map; - } - - @Override - public List getKeyNames() { - List keyNames = Arrays.asList( - "c" - ); - return keyNames; - } - - @Override - public List getPropertyNames() { - List propertyNames = Arrays.asList( - ); - return propertyNames; - } - - @Override - public Set> getSymmetricPropertyNames() { - Set> symmetricPropertyNamesSet = new HashSet<>(); - return symmetricPropertyNamesSet; - } - - @Override - public Set> getSymmetricKeyNames() { - Set> symmetricKeyNamesSet = new HashSet<>(); - return symmetricKeyNamesSet; - } - - @Override - public Severity getSeverity() { - return Severity.ERROR; - } - - @Override - public IQuerySpecification> getQuerySpecification() { - return querySpecification; - } - -} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/NonSymmetricOppositeConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/NonSymmetricOppositeConstraint0.java new file mode 100644 index 00000000..29b35552 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/NonSymmetricOppositeConstraint0.java @@ -0,0 +1,80 @@ +/** +Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql +*/ +package constraints.ecore; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; +import org.eclipse.viatra.addon.validation.core.api.Severity; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; + +import ecore.NonSymmetricOpposite; + +public class NonSymmetricOppositeConstraint0 implements IConstraintSpecification { + + private NonSymmetricOpposite querySpecification; + + public NonSymmetricOppositeConstraint0() { + querySpecification = NonSymmetricOpposite.instance(); + } + + @Override + public String getMessageFormat() { + return "error"; + } + + + @Override + public Map getKeyObjects(IPatternMatch signature) { + Map map = new HashMap<>(); + map.put("a",signature.get("a")); + return map; + } + + @Override + public List getKeyNames() { + List keyNames = Arrays.asList( + "a" + ); + return keyNames; + } + + @Override + public List getPropertyNames() { + List propertyNames = Arrays.asList( + "b" + ); + return propertyNames; + } + + @Override + public Set> getSymmetricPropertyNames() { + Set> symmetricPropertyNamesSet = new HashSet<>(); + return symmetricPropertyNamesSet; + } + + @Override + public Set> getSymmetricKeyNames() { + Set> symmetricKeyNamesSet = new HashSet<>(); + return symmetricKeyNamesSet; + } + + @Override + public Severity getSeverity() { + return Severity.ERROR; + } + + @Override + public IQuerySpecification> getQuerySpecification() { + return querySpecification; + } + +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/OppositeDifferentClassConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/OppositeDifferentClassConstraint0.java new file mode 100644 index 00000000..9ef4e35e --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/ecore/OppositeDifferentClassConstraint0.java @@ -0,0 +1,79 @@ +/** +Generated from platform:/resource/SocialNetwork_plugin/queries/queries/Ecore.vql +*/ +package constraints.ecore; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; +import org.eclipse.viatra.addon.validation.core.api.Severity; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; + +import ecore.OppositeDifferentClass; + +public class OppositeDifferentClassConstraint0 implements IConstraintSpecification { + + private OppositeDifferentClass querySpecification; + + public OppositeDifferentClassConstraint0() { + querySpecification = OppositeDifferentClass.instance(); + } + + @Override + public String getMessageFormat() { + return "error"; + } + + + @Override + public Map getKeyObjects(IPatternMatch signature) { + Map map = new HashMap<>(); + map.put("a",signature.get("a")); + return map; + } + + @Override + public List getKeyNames() { + List keyNames = Arrays.asList( + "a" + ); + return keyNames; + } + + @Override + public List getPropertyNames() { + List propertyNames = Arrays.asList( + ); + return propertyNames; + } + + @Override + public Set> getSymmetricPropertyNames() { + Set> symmetricPropertyNamesSet = new HashSet<>(); + return symmetricPropertyNamesSet; + } + + @Override + public Set> getSymmetricKeyNames() { + Set> symmetricKeyNamesSet = new HashSet<>(); + return symmetricKeyNamesSet; + } + + @Override + public Severity getSeverity() { + return Severity.ERROR; + } + + @Override + public IQuerySpecification> getQuerySpecification() { + return querySpecification; + } + +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/Ecore_pattern.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/Ecore_pattern.java deleted file mode 100644 index 6da94486..00000000 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/Ecore_pattern.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Generated from platform:/resource/SocialNetwork_plugin/queries/ecore/ecore_pattern.vql - */ -package ecore; - -import ecore.MoreThenFiveSuperTypes; -import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; -import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedPatternGroup; - -/** - * A pattern group formed of all public patterns defined in ecore_pattern.vql. - * - *

Use the static instance as any {@link interface org.eclipse.viatra.query.runtime.api.IQueryGroup}, to conveniently prepare - * a VIATRA Query engine for matching all patterns originally defined in file ecore_pattern.vql, - * in order to achieve better performance than one-by-one on-demand matcher initialization. - * - *

From package ecore, the group contains the definition of the following patterns:

    - *
  • moreThenFiveSuperTypes
  • - *
- * - * @see IQueryGroup - * - */ -@SuppressWarnings("all") -public final class Ecore_pattern extends BaseGeneratedPatternGroup { - /** - * Access the pattern group. - * - * @return the singleton instance of the group - * @throws ViatraQueryRuntimeException if there was an error loading the generated code of pattern specifications - * - */ - public static Ecore_pattern instance() { - if (INSTANCE == null) { - INSTANCE = new Ecore_pattern(); - } - return INSTANCE; - } - - private static Ecore_pattern INSTANCE; - - private Ecore_pattern() { - querySpecifications.add(MoreThenFiveSuperTypes.instance()); - } - - public MoreThenFiveSuperTypes getMoreThenFiveSuperTypes() { - return MoreThenFiveSuperTypes.instance(); - } - - public MoreThenFiveSuperTypes.Matcher getMoreThenFiveSuperTypes(final ViatraQueryEngine engine) { - return MoreThenFiveSuperTypes.Matcher.on(engine); - } -} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/MoreThenFiveSuperTypes.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/MoreThenFiveSuperTypes.java deleted file mode 100644 index da64d899..00000000 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/ecore/MoreThenFiveSuperTypes.java +++ /dev/null @@ -1,621 +0,0 @@ -/** - * Generated from platform:/resource/SocialNetwork_plugin/queries/ecore/ecore_pattern.vql - */ -package ecore; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.function.Consumer; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import org.apache.log4j.Logger; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.viatra.query.runtime.api.IPatternMatch; -import org.eclipse.viatra.query.runtime.api.IQuerySpecification; -import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; -import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; -import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; -import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; -import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; -import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; -import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; -import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; -import org.eclipse.viatra.query.runtime.matchers.psystem.IExpressionEvaluator; -import org.eclipse.viatra.query.runtime.matchers.psystem.IValueProvider; -import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; -import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; -import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; -import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExpressionEvaluation; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.PatternMatchCounter; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; -import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; -import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; -import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; -import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; -import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; -import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; - -/** - * A pattern-specific query specification that can instantiate Matcher in a type-safe way. - * - *

Original source: - *

- *         {@literal @}Constraint(severity="error", message="error", key = {c})
- *         pattern moreThenFiveSuperTypes(c: EClass){
- *         	m == count EClass.eSuperTypes(c,_);
- *         	check(m {@literal >}= 5);
- *         }
- * 
- * - * @see Matcher - * @see Match - * - */ -@SuppressWarnings("all") -public final class MoreThenFiveSuperTypes extends BaseGeneratedEMFQuerySpecification { - /** - * Pattern-specific match representation of the ecore.moreThenFiveSuperTypes pattern, - * to be used in conjunction with {@link Matcher}. - * - *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. - * Each instance is a (possibly partial) substitution of pattern parameters, - * usable to represent a match of the pattern in the result of a query, - * or to specify the bound (fixed) input parameters when issuing a query. - * - * @see Matcher - * - */ - public static abstract class Match extends BasePatternMatch { - private EClass fC; - - private static List parameterNames = makeImmutableList("c"); - - private Match(final EClass pC) { - this.fC = pC; - } - - @Override - public Object get(final String parameterName) { - if ("c".equals(parameterName)) return this.fC; - return null; - } - - public EClass getC() { - return this.fC; - } - - @Override - public boolean set(final String parameterName, final Object newValue) { - if (!isMutable()) throw new java.lang.UnsupportedOperationException(); - if ("c".equals(parameterName) ) { - this.fC = (EClass) newValue; - return true; - } - return false; - } - - public void setC(final EClass pC) { - if (!isMutable()) throw new java.lang.UnsupportedOperationException(); - this.fC = pC; - } - - @Override - public String patternName() { - return "ecore.moreThenFiveSuperTypes"; - } - - @Override - public List parameterNames() { - return MoreThenFiveSuperTypes.Match.parameterNames; - } - - @Override - public Object[] toArray() { - return new Object[]{fC}; - } - - @Override - public MoreThenFiveSuperTypes.Match toImmutable() { - return isMutable() ? newMatch(fC) : this; - } - - @Override - public String prettyPrint() { - StringBuilder result = new StringBuilder(); - result.append("\"c\"=" + prettyPrintValue(fC)); - return result.toString(); - } - - @Override - public int hashCode() { - return Objects.hash(fC); - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) { - return false; - } - if ((obj instanceof MoreThenFiveSuperTypes.Match)) { - MoreThenFiveSuperTypes.Match other = (MoreThenFiveSuperTypes.Match) obj; - return Objects.equals(fC, other.fC); - } else { - // this should be infrequent - if (!(obj instanceof IPatternMatch)) { - return false; - } - IPatternMatch otherSig = (IPatternMatch) obj; - return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); - } - } - - @Override - public MoreThenFiveSuperTypes specification() { - return MoreThenFiveSuperTypes.instance(); - } - - /** - * Returns an empty, mutable match. - * Fields of the mutable match can be filled to create a partial match, usable as matcher input. - * - * @return the empty match. - * - */ - public static MoreThenFiveSuperTypes.Match newEmptyMatch() { - return new Mutable(null); - } - - /** - * Returns a mutable (partial) match. - * Fields of the mutable match can be filled to create a partial match, usable as matcher input. - * - * @param pC the fixed value of pattern parameter c, or null if not bound. - * @return the new, mutable (partial) match object. - * - */ - public static MoreThenFiveSuperTypes.Match newMutableMatch(final EClass pC) { - return new Mutable(pC); - } - - /** - * Returns a new (partial) match. - * This can be used e.g. to call the matcher with a partial match. - *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. - * @param pC the fixed value of pattern parameter c, or null if not bound. - * @return the (partial) match object. - * - */ - public static MoreThenFiveSuperTypes.Match newMatch(final EClass pC) { - return new Immutable(pC); - } - - private static final class Mutable extends MoreThenFiveSuperTypes.Match { - Mutable(final EClass pC) { - super(pC); - } - - @Override - public boolean isMutable() { - return true; - } - } - - private static final class Immutable extends MoreThenFiveSuperTypes.Match { - Immutable(final EClass pC) { - super(pC); - } - - @Override - public boolean isMutable() { - return false; - } - } - } - - /** - * Generated pattern matcher API of the ecore.moreThenFiveSuperTypes pattern, - * providing pattern-specific query methods. - * - *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, - * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. - * - *

Matches of the pattern will be represented as {@link Match}. - * - *

Original source: - *

-   * {@literal @}Constraint(severity="error", message="error", key = {c})
-   * pattern moreThenFiveSuperTypes(c: EClass){
-   * 	m == count EClass.eSuperTypes(c,_);
-   * 	check(m {@literal >}= 5);
-   * }
-   * 
- * - * @see Match - * @see MoreThenFiveSuperTypes - * - */ - public static class Matcher extends BaseMatcher { - /** - * Initializes the pattern matcher within an existing VIATRA Query engine. - * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. - * - * @param engine the existing VIATRA Query engine in which this matcher will be created. - * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation - * - */ - public static MoreThenFiveSuperTypes.Matcher on(final ViatraQueryEngine engine) { - // check if matcher already exists - Matcher matcher = engine.getExistingMatcher(querySpecification()); - if (matcher == null) { - matcher = (Matcher)engine.getMatcher(querySpecification()); - } - return matcher; - } - - /** - * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation - * @return an initialized matcher - * @noreference This method is for internal matcher initialization by the framework, do not call it manually. - * - */ - public static MoreThenFiveSuperTypes.Matcher create() { - return new Matcher(); - } - - private static final int POSITION_C = 0; - - private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(MoreThenFiveSuperTypes.Matcher.class); - - /** - * Initializes the pattern matcher within an existing VIATRA Query engine. - * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. - * - * @param engine the existing VIATRA Query engine in which this matcher will be created. - * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation - * - */ - private Matcher() { - super(querySpecification()); - } - - /** - * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. - * @param pC the fixed value of pattern parameter c, or null if not bound. - * @return matches represented as a Match object. - * - */ - public Collection getAllMatches(final EClass pC) { - return rawStreamAllMatches(new Object[]{pC}).collect(Collectors.toSet()); - } - - /** - * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. - *

- * NOTE: It is important not to modify the source model while the stream is being processed. - * If the match set of the pattern changes during processing, the contents of the stream is undefined. - * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. - * @param pC the fixed value of pattern parameter c, or null if not bound. - * @return a stream of matches represented as a Match object. - * - */ - public Stream streamAllMatches(final EClass pC) { - return rawStreamAllMatches(new Object[]{pC}); - } - - /** - * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. - * Neither determinism nor randomness of selection is guaranteed. - * @param pC the fixed value of pattern parameter c, or null if not bound. - * @return a match represented as a Match object, or null if no match is found. - * - */ - public Optional getOneArbitraryMatch(final EClass pC) { - return rawGetOneArbitraryMatch(new Object[]{pC}); - } - - /** - * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, - * under any possible substitution of the unspecified parameters (if any). - * @param pC the fixed value of pattern parameter c, or null if not bound. - * @return true if the input is a valid (partial) match of the pattern. - * - */ - public boolean hasMatch(final EClass pC) { - return rawHasMatch(new Object[]{pC}); - } - - /** - * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. - * @param pC the fixed value of pattern parameter c, or null if not bound. - * @return the number of pattern matches found. - * - */ - public int countMatches(final EClass pC) { - return rawCountMatches(new Object[]{pC}); - } - - /** - * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. - * Neither determinism nor randomness of selection is guaranteed. - * @param pC the fixed value of pattern parameter c, or null if not bound. - * @param processor the action that will process the selected match. - * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked - * - */ - public boolean forOneArbitraryMatch(final EClass pC, final Consumer processor) { - return rawForOneArbitraryMatch(new Object[]{pC}, processor); - } - - /** - * Returns a new (partial) match. - * This can be used e.g. to call the matcher with a partial match. - *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. - * @param pC the fixed value of pattern parameter c, or null if not bound. - * @return the (partial) match object. - * - */ - public MoreThenFiveSuperTypes.Match newMatch(final EClass pC) { - return MoreThenFiveSuperTypes.Match.newMatch(pC); - } - - /** - * Retrieve the set of values that occur in matches for c. - * @return the Set of all values or empty set if there are no matches - * - */ - protected Stream rawStreamAllValuesOfc(final Object[] parameters) { - return rawStreamAllValues(POSITION_C, parameters).map(EClass.class::cast); - } - - /** - * Retrieve the set of values that occur in matches for c. - * @return the Set of all values or empty set if there are no matches - * - */ - public Set getAllValuesOfc() { - return rawStreamAllValuesOfc(emptyArray()).collect(Collectors.toSet()); - } - - /** - * Retrieve the set of values that occur in matches for c. - * @return the Set of all values or empty set if there are no matches - * - */ - public Stream streamAllValuesOfc() { - return rawStreamAllValuesOfc(emptyArray()); - } - - @Override - protected MoreThenFiveSuperTypes.Match tupleToMatch(final Tuple t) { - try { - return MoreThenFiveSuperTypes.Match.newMatch((EClass) t.get(POSITION_C)); - } catch(ClassCastException e) { - LOGGER.error("Element(s) in tuple not properly typed!",e); - return null; - } - } - - @Override - protected MoreThenFiveSuperTypes.Match arrayToMatch(final Object[] match) { - try { - return MoreThenFiveSuperTypes.Match.newMatch((EClass) match[POSITION_C]); - } catch(ClassCastException e) { - LOGGER.error("Element(s) in array not properly typed!",e); - return null; - } - } - - @Override - protected MoreThenFiveSuperTypes.Match arrayToMatchMutable(final Object[] match) { - try { - return MoreThenFiveSuperTypes.Match.newMutableMatch((EClass) match[POSITION_C]); - } catch(ClassCastException e) { - LOGGER.error("Element(s) in array not properly typed!",e); - return null; - } - } - - /** - * @return the singleton instance of the query specification of this pattern - * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded - * - */ - public static IQuerySpecification querySpecification() { - return MoreThenFiveSuperTypes.instance(); - } - } - - private MoreThenFiveSuperTypes() { - super(GeneratedPQuery.INSTANCE); - } - - /** - * @return the singleton instance of the query specification - * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded - * - */ - public static MoreThenFiveSuperTypes instance() { - try{ - return LazyHolder.INSTANCE; - } catch (ExceptionInInitializerError err) { - throw processInitializerError(err); - } - } - - @Override - protected MoreThenFiveSuperTypes.Matcher instantiate(final ViatraQueryEngine engine) { - return MoreThenFiveSuperTypes.Matcher.on(engine); - } - - @Override - public MoreThenFiveSuperTypes.Matcher instantiate() { - return MoreThenFiveSuperTypes.Matcher.create(); - } - - @Override - public MoreThenFiveSuperTypes.Match newEmptyMatch() { - return MoreThenFiveSuperTypes.Match.newEmptyMatch(); - } - - @Override - public MoreThenFiveSuperTypes.Match newMatch(final Object... parameters) { - return MoreThenFiveSuperTypes.Match.newMatch((org.eclipse.emf.ecore.EClass) parameters[0]); - } - - /** - * Inner class allowing the singleton instance of {@link JvmGenericType: ecore.MoreThenFiveSuperTypes (visibility: PUBLIC, simpleName: MoreThenFiveSuperTypes, identifier: ecore.MoreThenFiveSuperTypes, deprecated: ) (abstract: false, static: false, final: true, packageName: ecore) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created - * not at the class load time of the outer class, - * but rather at the first call to {@link JvmGenericType: ecore.MoreThenFiveSuperTypes (visibility: PUBLIC, simpleName: MoreThenFiveSuperTypes, identifier: ecore.MoreThenFiveSuperTypes, deprecated: ) (abstract: false, static: false, final: true, packageName: ecore) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. - * - *

This workaround is required e.g. to support recursion. - * - */ - private static class LazyHolder { - private static final MoreThenFiveSuperTypes INSTANCE = new MoreThenFiveSuperTypes(); - - /** - * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. - * This initialization order is required to support indirect recursion. - * - *

The static initializer is defined using a helper field to work around limitations of the code generator. - * - */ - private static final Object STATIC_INITIALIZER = ensureInitialized(); - - public static Object ensureInitialized() { - INSTANCE.ensureInitializedInternal(); - return null; - } - } - - private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { - private static final MoreThenFiveSuperTypes.GeneratedPQuery INSTANCE = new GeneratedPQuery(); - - private final PParameter parameter_c = new PParameter("c", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT); - - private final List parameters = Arrays.asList(parameter_c); - - private class Embedded_1_EClass_eSuperTypes extends BaseGeneratedEMFPQuery { - private final PParameter parameter_p0 = new PParameter("p0", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT); - - private final PParameter parameter_p1 = new PParameter("p1", "org.eclipse.emf.ecore.EClass", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.eclipse.org/emf/2002/Ecore", "EClass")), PParameterDirection.INOUT); - - private final List embeddedParameters = Arrays.asList(parameter_p0, parameter_p1); - - public Embedded_1_EClass_eSuperTypes() { - super(PVisibility.EMBEDDED); - } - - @Override - public String getFullyQualifiedName() { - return GeneratedPQuery.this.getFullyQualifiedName() + "$Embedded_1_EClass_eSuperTypes"; - } - - @Override - public List getParameters() { - return embeddedParameters; - } - - @Override - public Set doGetContainedBodies() { - PBody body = new PBody(this); - PVariable var_p0 = body.getOrCreateVariableByName("p0"); - PVariable var_p1 = body.getOrCreateVariableByName("p1"); - body.setSymbolicParameters(Arrays.asList( - new ExportedParameter(body, var_p0, parameter_p0), - new ExportedParameter(body, var_p1, parameter_p1) - )); - // EClass.eSuperTypes(c,_) - new TypeConstraint(body, Tuples.flatTupleOf(var_p0), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); - PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); - new TypeConstraint(body, Tuples.flatTupleOf(var_p0, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass", "eSuperTypes"))); - new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); - new Equality(body, var__virtual_0_, var_p1); - return Collections.singleton(body); - } - } - - private GeneratedPQuery() { - super(PVisibility.PUBLIC); - } - - @Override - public String getFullyQualifiedName() { - return "ecore.moreThenFiveSuperTypes"; - } - - @Override - public List getParameterNames() { - return Arrays.asList("c"); - } - - @Override - public List getParameters() { - return parameters; - } - - @Override - public Set doGetContainedBodies() { - setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); - Set bodies = new LinkedHashSet<>(); - { - PBody body = new PBody(this); - PVariable var_c = body.getOrCreateVariableByName("c"); - PVariable var_m = body.getOrCreateVariableByName("m"); - PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); - new TypeConstraint(body, Tuples.flatTupleOf(var_c), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http://www.eclipse.org/emf/2002/Ecore", "EClass"))); - body.setSymbolicParameters(Arrays.asList( - new ExportedParameter(body, var_c, parameter_c) - )); - // m == count EClass.eSuperTypes(c,_) - PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); - new PatternMatchCounter(body, Tuples.flatTupleOf(var_c, var___0_), new MoreThenFiveSuperTypes.GeneratedPQuery.Embedded_1_EClass_eSuperTypes(), var__virtual_0_); - new Equality(body, var_m, var__virtual_0_); - // check(m >= 5) - new ExpressionEvaluation(body, new IExpressionEvaluator() { - - @Override - public String getShortDescription() { - return "Expression evaluation from pattern moreThenFiveSuperTypes"; - } - - @Override - public Iterable getInputParameterNames() { - return Arrays.asList("m");} - - @Override - public Object evaluateExpression(IValueProvider provider) throws Exception { - Integer m = (Integer) provider.getValue("m"); - return evaluateExpression_1_1(m); - } - }, null); - bodies.add(body); - } - { - PAnnotation annotation = new PAnnotation("Constraint"); - annotation.addAttribute("severity", "error"); - annotation.addAttribute("message", "error"); - annotation.addAttribute("key", Arrays.asList(new Object[] { - new ParameterReference("c") - })); - addAnnotation(annotation); - } - return bodies; - } - } - - private static boolean evaluateExpression_1_1(final Integer m) { - return ((m).intValue() >= 5); - } -} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/ecore.ecore b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/ecore.ecore new file mode 100644 index 00000000..e7dc2768 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/ecore.ecore @@ -0,0 +1,1016 @@ + + + + +

+
+ + +
+ + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + + + +
+
+ + +
+ + + +
+
+ + + + +
+
+ + + + + +
+
+ + + + +
+
+ + + + +
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+ + + + +
+
+ + + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ + + + +
+
+ + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + +
+
+ + + + +
+
+ + + + + +
+
+ + +
+ + + + + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + + + + +
+
+ + +
+
+ + + + +
+
+ + +
+
+ + + + + + +
+
+ + + +
+
+ + + + + +
+ + + + +
+ + + + +
+
+ + + + +
+
+ + + + +
+ + + + + +
+
+ + +
+ + + + + + + + + + + + +
+
+ + + + + +
+ + + + +
+
+ + + +
+
+ + + + +
+
+ + + + +
+
+ + + + + + +
+
+ + + + + + + + + + + + + + +
+
+ + + + + +
+ + + + +
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + +
+ + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + + +
+ + + + +
+
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+
+ + + + +
+
+ + + + +
+ + + + + + +
+
+ + + + + + +
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + + + + + +
+
+ + + + +
+
+ + + + +
+
+ + +
+
+ + + + +
+
+ + +
+
+ + + + + + +
+
+ + +
+ + + + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + + + +
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + + +
+ + + + +
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + +
+
+ + + + +
+
+ + + + + +
+
+ + +
+ + + + + + + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + + + +
+ + + + + +
+
+ + +
+ + + +
+
+ + +
+
+ + + + +
+
+ + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + + +
+
+ + + +
+
+ + + + diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend index 2add9f0e..dfde6593 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend @@ -18,9 +18,9 @@ import org.eclipse.emf.ecore.EReference class Main { var static Domain d = Domain.Yakindumm; val static String suffix = '.xmi' - val static String OUTPUT_FOLDER = "Inputs/yakindumm/human/humanInput100/"; - val static String INPUT_FOLDER = "outputs/Human/"; - val static int NUM_RUNS = 100; + val static String OUTPUT_FOLDER = "Inputs/measurement2/yakindu/Alloy/"; + val static String INPUT_FOLDER = "outputs/measurement2/yakindu/Alloy/"; + val static int NUM_RUNS = 1; static class RWInformation{ public var String inputFolder; @@ -37,7 +37,6 @@ class Main { def static void main(String[] args){ //init model var EPackage metamodel; - //init viatra engine for the violation checker ReteEngine.getClass(); diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend index 4c9246d1..697b2639 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend @@ -162,9 +162,11 @@ class PartialInterpretationMetricDistance { def double[] calculateFeature(int step, int violations){ var features = newDoubleArrayOfSize(2); //constant term - features.set(0, 1); - features.set(0, Math.sqrt(step) + 30) - features.set(1, 1.0 / (step + 30) ); + features.set(0, 1); //a + features.set(0, Math.sqrt(step) + 30) // b + features.set(1, 1.0 / (step + 30) );// c + + // features.set(2, violations); // features.set(3, Math.pow(violations, 2)); diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend index af05a1cd..31788bb2 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend @@ -186,5 +186,9 @@ class GraphStatistic { return outgoingEdges; } + def HashMap> incomingEdges(){ + return incomingEdges; + } + } diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend index 858113e9..053e0da3 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend @@ -22,6 +22,7 @@ import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl import org.eclipse.emf.ecore.EGenericType import org.eclipse.emf.ecore.EStructuralFeature +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedClusteringCoefficientMetric class GraphReader{ val ResourceSet resSet = new ResourceSetImpl(); @@ -58,8 +59,6 @@ class GraphReader{ var count = 1 //check all files in the directory with suffix for(String name : dir.list.filter[it| it.endsWith(suffix)]){ - println(name) - println(count) val file = new File(name); val roots = readModel(EObject, path, file.name); //add a list of metrics diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend index 06e88efc..2e7be586 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.xtend @@ -2,6 +2,7 @@ package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup +import github.impl.GithubPackageImpl import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl import java.util.HashMap import org.eclipse.emf.ecore.EReference @@ -19,7 +20,7 @@ class RepMetricsReader { }else if (d == Domain.Ecore){ reader = new GraphReader(EcorePackageImpl.eINSTANCE, '.ecore'); }else if (d == Domain.Github){ - // Initialize the reader with github package + reader = new GraphReader(GithubPackageImpl.eINSTANCE, '.githubmodel') } domain = d; @@ -58,6 +59,13 @@ class RepMetricsReader { nodeTypeSamples.put('EGenericType', 0.002014098690835851); nodeTypeSamples.put('EOperation', 0.009415911379657605); nodeTypeSamples.put('ETypeParameter', 0.0007049345417925478); + }else if (d == Domain.Github){ + nodeTypeSamples.put('Project', 0.012636538873420432); + nodeTypeSamples.put('Commit', 0.5525808524309276); + nodeTypeSamples.put('User', 0.05847076461769116); + nodeTypeSamples.put('Issue', 0.12743628185907047); + nodeTypeSamples.put('PullRequest', 0.07560505461554937); + nodeTypeSamples.put('IssueEvent', 0.17327050760334123); } diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedClusteringCoefficientMetric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedClusteringCoefficientMetric.xtend index 93f5ccd4..0b6d61c6 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedClusteringCoefficientMetric.xtend +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedClusteringCoefficientMetric.xtend @@ -4,6 +4,7 @@ import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatis import java.text.DecimalFormat import java.util.ArrayList import java.util.HashMap +import java.util.HashSet import org.eclipse.emf.ecore.EObject class TypedClusteringCoefficientMetric extends Metric { @@ -18,7 +19,9 @@ class TypedClusteringCoefficientMetric extends Metric { //calculate the metric distribution g.allNodes.forEach[n| var coef = calculateTCC1(n, g); - + if(coef > 0){ + println(n); + } //format number to String val value = formatter.format(coef); if(!map.containsKey(value)){ @@ -61,15 +64,20 @@ class TypedClusteringCoefficientMetric extends Metric { var triangles = 0; for(type1 : g.allTypes){ - val type1EdgeTargetNodes = g.outgoingEdges.get(type1).values; + val typed1RelatedOfN = new HashSet(g.outgoingEdges.get(type1).get(n)); + val type1EdgeSourceNodesOfN = new HashSet(g.incomingEdges.get(type1).get(n)); + + typed1RelatedOfN.addAll(type1EdgeSourceNodesOfN); + + // number of wedges - val d = type1EdgeTargetNodes.size - wedges += d * (d-1) + val d = typed1RelatedOfN.size + wedges += d * (d-1) // we will also count each closed triangle twice // pairs of neighbors - for (n1: type1EdgeTargetNodes) { - for (n2: type1EdgeTargetNodes) { + for (n1: typed1RelatedOfN) { + for (n2: typed1RelatedOfN) { for(type2 : g.allTypes){ if ((type1 != type2) && (g.outgoingEdges.get(type2).containsEntry(n1, n2) || @@ -81,10 +89,11 @@ class TypedClusteringCoefficientMetric extends Metric { } } } + if (wedges == 0.0) { return 0.0 } else { - return triangles/wedges + return (triangles as double)/wedges } } } \ No newline at end of file diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend index 3c98bb1c..4db5f940 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend @@ -2,7 +2,7 @@ package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain import com.google.common.reflect.ClassPath -import ecore.Ecore_pattern +import ecore.Ecore import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.Patterns import java.util.ArrayList import org.eclipse.emf.ecore.EObject @@ -23,7 +23,7 @@ class ViolationCheck { } var constriants = loadConstraints(packageName); - var collections = new ConstraintCollection(constriants, Ecore_pattern.instance); + var collections = new ConstraintCollection(constriants, Ecore.instance); collections.addModel(root); var results = collections.calculateViolations(); if(results.size > 0){ -- cgit v1.2.3-54-g00ecf