--- /dev/null
+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