org.sonar.plugins.groovy.gmetrics.CustomSourceAnalyzer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sonar-groovy-plugin Show documentation
Show all versions of sonar-groovy-plugin Show documentation
Enables analysis of Groovy projects.
The newest version!
/*
* Sonar Groovy Plugin
* Copyright (C) 2010 SonarSource
* [email protected]
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
package org.sonar.plugins.groovy.gmetrics;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import org.codehaus.groovy.ast.ClassNode;
import org.codehaus.groovy.ast.ModuleNode;
import org.gmetrics.analyzer.SourceAnalyzer;
import org.gmetrics.metric.Metric;
import org.gmetrics.metricset.MetricSet;
import org.gmetrics.result.ClassMetricResult;
import org.gmetrics.resultsnode.ClassResultsNode;
import org.gmetrics.resultsnode.PackageResultsNode;
import org.gmetrics.resultsnode.ResultsNode;
import org.gmetrics.source.SourceCode;
import org.gmetrics.source.SourceFile;
import java.io.File;
import java.util.Collections;
import java.util.List;
/**
* Custom implementation of {@link org.gmetrics.analyzer.FilesystemSourceAnalyzer}.
*/
public class CustomSourceAnalyzer implements SourceAnalyzer {
private final Multimap resultsByFile = ArrayListMultimap.create();
private final String baseDirAbsolutePath;
private final List sourceFiles;
public CustomSourceAnalyzer(String baseDirAbsolutePath, List sourceFiles) {
this.baseDirAbsolutePath = baseDirAbsolutePath;
this.sourceFiles = sourceFiles;
}
public Multimap getResultsByFile() {
return resultsByFile;
}
@Override
public List getSourceDirectories() {
return Collections.singletonList(baseDirAbsolutePath);
}
@Override
public ResultsNode analyze(MetricSet metricSet) {
return processFiles(metricSet);
}
private PackageResultsNode processFiles(MetricSet metricSet) {
for (File file : sourceFiles) {
SourceCode sourceCode = new SourceFile(file);
ModuleNode ast = sourceCode.getAst();
if (ast != null) {
for (ClassNode classNode : ast.getClasses()) {
String className = classNode.getName();
ClassResultsNode classResults = new ClassResultsNode(className);
for (Object metric : metricSet.getMetrics()) {
ClassMetricResult classMetricResult = ((Metric) metric).applyToClass(classNode, sourceCode);
classResults.addClassMetricResult(classMetricResult);
}
resultsByFile.put(file, classResults);
}
}
}
// Only file results are used
return null;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy