Created
April 10, 2012 16:27
-
-
Save csokol/2352637 to your computer and use it in GitHub Desktop.
CCMetric.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package tasks.metric.cc; | |
import japa.parser.JavaParser; | |
import japa.parser.ast.CompilationUnit; | |
import java.io.InputStream; | |
import model.SourceCode; | |
import tasks.metric.ClassInfoVisitor; | |
import tasks.metric.Metric; | |
public class CCMetric implements Metric { | |
private CCVisitor visitor; | |
private ClassInfoVisitor classInfo; | |
public String header() { | |
return "path;project;class;cc;average cc"; | |
} | |
public Object resultToPersistOf(SourceCode sourceCode) { | |
return new CCMetricResultToPersist(sourceCode, cc(), avgCc()); | |
} | |
public void calculate(InputStream is) { | |
try { | |
CompilationUnit cunit = JavaParser.parse(is); | |
classInfo = new ClassInfoVisitor(); | |
classInfo.visit(cunit, null); | |
visitor = new CCVisitor(); | |
visitor.visit(cunit, null); | |
} catch (Exception e) { | |
throw new RuntimeException(e); | |
} | |
} | |
public double avgCc() { | |
double avgCc = visitor.getAvgCc(); | |
if (Double.isNaN(avgCc)) | |
avgCc = -1.0; | |
return avgCc; | |
} | |
public int cc() { | |
return visitor.getCc(); | |
} | |
public int cc(String method) { | |
return visitor.getCc(method); | |
} | |
@Override | |
public boolean shouldCalculateMetricOf(String fileName) { | |
return fileName.endsWith(".java"); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package tasks; | |
import java.io.ByteArrayInputStream; | |
import java.util.List; | |
import model.Project; | |
import model.SourceCode; | |
import model.Task; | |
import org.apache.log4j.Logger; | |
import org.hibernate.Session; | |
import tasks.metric.Metric; | |
import tasks.runner.RunnableTask; | |
import br.com.caelum.revolution.domain.Artifact; | |
public class CalculateMetricTask implements RunnableTask { | |
private Task task; | |
private Metric metric; | |
private Session session; | |
private static Logger log = Logger.getLogger(CalculateMetricTask.class); | |
public CalculateMetricTask(Task task, Metric metric, Session session) { | |
this.task = task; | |
this.metric = metric; | |
this.session = session; | |
} | |
@Override | |
public void run() { | |
Project project = task.getProject(); | |
List<Artifact> artifacts = project.getArtifacts(); | |
for (Artifact artifact : artifacts) { | |
List<SourceCode> sources = artifact.getSources(); | |
for (SourceCode sourceCode : sources) { | |
if (metric.shouldCalculateMetricOf(sourceCode.getName())) { | |
log.info("Calculating metrics for: " + sourceCode.getName() + " - " | |
+ sourceCode.getCommit().getCommitId()); | |
try { | |
metric.calculate(new ByteArrayInputStream(sourceCode.getSourceBytesArray())); | |
session.save(metric.resultToPersistOf(sourceCode)); | |
} catch (Exception e) { | |
log.error("Unable to calculate CC metric: ", e); | |
} | |
} | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10:30:16,412 INFO [CalculateMetricTask ] Calculating metrics for: jdktools/modules/jdktools/src/test/java/org/apache/harmony/tests/tools/javah/Test02.java - 5ce5fd50769a5ddc32bd316839a71dfe0ded9290 | |
10:30:16,559 ERROR [TaskLogger ] Tasktasks.runner.TaskRunner was failed | |
org.quartz.JobExecutionException: org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: japa.parser.TokenMgrError: Lexical error at line 23, column 35. Encountered: "\ufffd" (65533), after : ""] [See nested exception: org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: japa.parser.TokenMgrError: Lexical error at line 23, column 35. Encountered: "\ufffd" (65533), after : ""]] | |
at org.quartz.core.JobRunShell.run(JobRunShell.java:229) | |
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) | |
Caused by: org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: japa.parser.TokenMgrError: Lexical error at line 23, column 35. Encountered: "\ufffd" (65533), after : ""] | |
at org.quartz.core.JobRunShell.run(JobRunShell.java:224) | |
... 1 more | |
Caused by: japa.parser.TokenMgrError: Lexical error at line 23, column 35. Encountered: "\ufffd" (65533), after : "" | |
at japa.parser.ASTParserTokenManager.getNextToken(ASTParserTokenManager.java:2247) | |
at japa.parser.ASTParser.jj_scan_token(ASTParser.java:9932) | |
at japa.parser.ASTParser.jj_3R_64(ASTParser.java:5411) | |
at japa.parser.ASTParser.jj_3_5(ASTParser.java:5562) | |
at japa.parser.ASTParser.jj_2_5(ASTParser.java:4853) | |
at japa.parser.ASTParser.ClassOrInterfaceBodyDeclaration(ASTParser.java:1027) | |
at japa.parser.ASTParser.ClassOrInterfaceBody(ASTParser.java:961) | |
at japa.parser.ASTParser.ClassOrInterfaceDeclaration(ASTParser.java:604) | |
at japa.parser.ASTParser.TypeDeclaration(ASTParser.java:524) | |
at japa.parser.ASTParser.CompilationUnit(ASTParser.java:269) | |
at japa.parser.JavaParser.parse(JavaParser.java:81) | |
at japa.parser.JavaParser.parse(JavaParser.java:94) | |
at tasks.metric.cc.CCMetric.calculate(CCMetric.java:27) | |
at tasks.CalculateMetricTask.run(CalculateMetricTask.java:41) | |
at tasks.runner.TaskRunner.execute(TaskRunner.java:41) | |
at br.com.caelum.vraptor.tasks.jobs.simple.ConcurrentJobWrapper.execute(ConcurrentJobWrapper.java:18) | |
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) | |
... 1 more |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment