public void analyse(Project project, SensorContext context) { this.project = project; this.context = context; Collection<SquidAstVisitor<LexerlessGrammar>> squidChecks = annotationCheckFactory.getChecks(); List<SquidAstVisitor<LexerlessGrammar>> visitors = Lists.newArrayList(squidChecks); visitors.add(new FileLinesVisitor(project, fileLinesContextFactory)); this.scanner = FlexAstScanner.create( createConfiguration(project), visitors.toArray(new SquidAstVisitor[visitors.size()])); Collection<java.io.File> files = InputFileUtils.toFiles(project.getFileSystem().mainFiles(Flex.KEY)); files = ImmutableList.copyOf(Collections2.filter(files, Predicates.not(MXML_FILTER))); scanner.scanFiles(files); Collection<SourceCode> squidSourceFiles = scanner.getIndex().search(new QueryByType(SourceFile.class)); save(squidSourceFiles); Collection<SourceCode> squidPackages = scanner.getIndex().search(new QueryByType(FlexSquidPackage.class)); for (SourceCode pkg : squidPackages) { String packageName = pkg.getKey(); if (!"".equals(packageName)) { Directory directory = resourceBridge.findDirectory(packageName); context.saveMeasure(directory, CoreMetrics.PACKAGES, 1.0); } } }
@Test public void testScanSimpleFile() { AstScanner<CSharpGrammar> scanner = CSharpAstScanner.create(new CSharpConfiguration(Charset.forName("UTF-8"))); scanner.scanFile(readFile("/metric/simpleFile.cs")); SourceProject project = (SourceProject) scanner.getIndex().search(new QueryByType(SourceProject.class)).iterator().next(); assertThat(project.getInt(CSharpMetric.STATEMENTS), is(16)); }
private void saveFunctionsComplexityDistribution(File sonarFile, SourceFile squidFile) { Collection<SourceCode> squidFunctionsInFile = scanner .getIndex() .search(new QueryByParent(squidFile), new QueryByType(SourceFunction.class)); RangeDistributionBuilder complexityDistribution = new RangeDistributionBuilder( CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION, FUNCTIONS_DISTRIB_BOTTOM_LIMITS); for (SourceCode squidFunction : squidFunctionsInFile) { complexityDistribution.add(squidFunction.getDouble(FlexMetric.COMPLEXITY)); } context.saveMeasure( sonarFile, complexityDistribution.build().setPersistenceMode(PersistenceMode.MEMORY)); }