]> git.uio.no Git - ifi-stolz-refaktor.git/blobdiff - case-study/refaktor-before/src/no/uio/ifi/refaktor/metrics/RefaktorMethodCalculatorListener.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / refaktor-before / src / no / uio / ifi / refaktor / metrics / RefaktorMethodCalculatorListener.java
diff --git a/case-study/refaktor-before/src/no/uio/ifi/refaktor/metrics/RefaktorMethodCalculatorListener.java b/case-study/refaktor-before/src/no/uio/ifi/refaktor/metrics/RefaktorMethodCalculatorListener.java
new file mode 100644 (file)
index 0000000..21ddd2f
--- /dev/null
@@ -0,0 +1,54 @@
+package no.uio.ifi.refaktor.metrics;
+
+import no.uio.ifi.refaktor.utils.ParseUtils;
+import no.uio.ifi.refaktor.utils.RefaktorASTNodeSearchUtil;
+
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
+
+import com.stateofflow.eclipse.metrics.calculators.CalculatorListener;
+import com.stateofflow.eclipse.metrics.location.MetricLocation;
+import com.stateofflow.eclipse.metrics.location.MetricLocationFactory;
+import com.stateofflow.eclipse.metrics.metric.Metric;
+import com.stateofflow.eclipse.metrics.metric.MetricId;
+import com.stateofflow.eclipse.metrics.type.NonNullType;
+import com.stateofflow.eclipse.metrics.type.TypeDeclarationAdapter;
+
+public class RefaktorMethodCalculatorListener implements CalculatorListener {
+               private Metric metric;
+               private IMethod method;
+               
+               public RefaktorMethodCalculatorListener(IMethod method) {
+                       this.method = method;
+               }
+
+               @Override
+               public void noteTypeValue(MetricId metricKey, MetricLocation location, int value) {
+                       return;
+               }
+
+               @Override
+               public void noteMethodValue(MetricId metricKey, MetricLocation location, int value) {
+                       if (location.equals(getMethodLocation())) {
+                               this.metric = new Metric(metricKey, location, value);
+                       }
+               }
+
+               private MetricLocation getMethodLocation() {
+                       CompilationUnit compilationUnit = ParseUtils.parse(method.getCompilationUnit());
+                       NonNullType typeNode = new TypeDeclarationAdapter((TypeDeclaration) compilationUnit.findDeclaringNode(method.getDeclaringType().getKey()));
+                       try {
+                               MethodDeclaration methodNode = RefaktorASTNodeSearchUtil.getMethodDeclarationNode(method, compilationUnit);
+                               return new MetricLocationFactory().findOrCreate(typeNode, methodNode, compilationUnit);
+                       } catch (JavaModelException e) {
+                               throw new RuntimeException(method + " not found in " + compilationUnit);
+                       }
+               }
+
+               public Metric getMetric() {
+                       return metric;
+               }
+}
\ No newline at end of file