/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ public static SourceFile scanSingleFile(File file, SquidAstVisitor<SwiftGrammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } AstScanner<SwiftGrammar> scanner = create(new SwiftConfiguration(), visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException("Only one SourceFile was expected whereas " + sources.size() + " has been returned."); } return (SourceFile) sources.iterator().next(); }
/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ public static SourceFile scanSingleFile(File file, CSharpConfiguration conf, SquidAstVisitor<Grammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } AstScanner<Grammar> scanner = create(conf, visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException("Only one SourceFile was expected whereas " + sources.size() + " has been returned."); } return (SourceFile) sources.iterator().next(); }
/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ public static SourceFile scanSingleFile(File file, SquidAstVisitor<ObjectiveCGrammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } AstScanner<ObjectiveCGrammar> scanner = create(new ObjectiveCConfiguration(), visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException("Only one SourceFile was expected whereas " + sources.size() + " has been returned."); } return (SourceFile) sources.iterator().next(); }
/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ public static SourceFile scanSingleFile(File file, SquidAstVisitor<ObjectiveCGrammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } AstScanner<ObjectiveCGrammar> scanner = create(new ObjectiveCConfiguration(), visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException("Only one SourceFile was expected whereas " + sources.size() + " has been returned."); } return (SourceFile) sources.iterator().next(); }
/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ public static SourceFile scanSingleFile(File file, SquidAstVisitor<Grammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } AstScanner<Grammar> scanner = create(new PythonConfiguration(Charsets.UTF_8), visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException("Only one SourceFile was expected whereas " + sources.size() + " has been returned."); } return (SourceFile) sources.iterator().next(); }
/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ public static SourceFile scanSingleFile(File file, SquidAstVisitor<LexerlessGrammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } AstScanner<LexerlessGrammar> scanner = create(new FlexConfiguration(Charsets.UTF_8), visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException("Only one SourceFile was expected whereas " + sources.size() + " has been returned."); } return (SourceFile) sources.iterator().next(); }
/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ public static SourceFile scanSingleFile(File file, SquidAstVisitor<LexerlessGrammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } AstScanner scanner = create(new CssConfiguration(Charsets.UTF_8), null, visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException("Only one SourceFile was expected whereas " + sources.size() + " has been returned."); } return (SourceFile) sources.iterator().next(); }
/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ public static SourceFile scanSingleFile(File file, SquidAstVisitor<LexerlessGrammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } AstScanner<LexerlessGrammar> scanner = create(new EcmaScriptConfiguration(Charsets.UTF_8), visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException("Only one SourceFile was expected whereas " + sources.size() + " has been returned."); } return (SourceFile) sources.iterator().next(); }
/** * Returns a source file from file and visitors. * * @param file source file. * @param visitors list of visitors. * @return a source. * @exception IllegalArgumentException when file is not found. * @exception IllegalStateException when there is more than one sourceFile. */ public static SourceFile scanFile(File file, SquidAstVisitor<Grammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException(String.format(FILE_NOT_FOUND, file)); } AstScanner<Grammar> scanner = create(new ApexConfiguration(Charsets.UTF_8), visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException(String.format(ONE_SOURCE_FILE, sources.size())); } return (SourceFile) sources.iterator().next(); }
@Override public void analyse(Project project, SensorContext context) { this.context = context; List<CodeVisitor> astNodeVisitors = Lists.newArrayList(); List<JavaScriptFileScanner> treeVisitors = Lists.newArrayList(); for (CodeVisitor visitor : checks.all()) { if (visitor instanceof JavaScriptFileScanner) { treeVisitors.add((JavaScriptFileScanner) visitor); } else { astNodeVisitors.add(visitor); } } astNodeVisitors.add(new VisitorsBridge(treeVisitors, resourcePerspectives, fileSystem, settings)); astNodeVisitors.add(new FileLinesVisitor(fileLinesContextFactory, fileSystem, pathResolver)); scanner = JavaScriptAstScanner.create(createConfiguration(), astNodeVisitors.toArray(new SquidAstVisitor[astNodeVisitors.size()])); scanner.scanFiles(Lists.newArrayList(fileSystem.files(mainFilePredicate))); Collection<SourceCode> squidSourceFiles = scanner.getIndex().search(new QueryByType(SourceFile.class)); save(squidSourceFiles); highlight(); }
/** * Analyzes files for a given project. * * @param project current project. * @param context sensor context. */ @Override public void analyse(Project project, SensorContext context) { this.context = context; List<SquidAstVisitor<Grammar>> visitors = Lists.newArrayList(checks.all()); scanner = ApexAstScanner.create(createConfiguration(), visitors.toArray(new SquidAstVisitor[visitors.size()])); scanner.scanFiles(Lists.newArrayList(fileSystem.files(filePredicate))); Collection<SourceCode> squidSourceFiles = scanner.getIndex() .search(new QueryByType(SourceFile.class)); save(squidSourceFiles); }
public void analyse(Project project, SensorContext context) { this.project = project; this.context = context; Collection<SquidCheck> squidChecks = annotationCheckFactory.getChecks(); this.scanner = ObjectiveCAstScanner.create(createConfiguration(project), squidChecks.toArray(new SquidCheck[squidChecks.size()])); scanner.scanFiles(InputFileUtils.toFiles(project.getFileSystem().mainFiles(ObjectiveC.KEY))); Collection<SourceCode> squidSourceFiles = scanner.getIndex().search(new QueryByType(SourceFile.class)); save(squidSourceFiles); }
@Override public void execute(SensorContext sensorContext) { FilePredicate hasSwift = context.fileSystem().predicates().hasLanguage(Swift.KEY); FilePredicate isMain = context.fileSystem().predicates().hasType(InputFile.Type.MAIN); FilePredicate and = context.fileSystem().predicates().and(hasSwift, isMain); List<File> files = new ArrayList<>(); for(InputFile inf : context.fileSystem().inputFiles(and)){ files.add(inf.file()); } List<SquidAstVisitor<SwiftGrammar>> visitors = new ArrayList<>(checks.all()); scanner = SwiftAstScanner.create(createConfiguration(), visitors.toArray(new SquidAstVisitor[visitors.size()])); scanner.scanFiles(files); Collection<SourceCode> squidSourceFiles = scanner.getIndex().search(new QueryByType(SourceFile.class)); save(squidSourceFiles); } }
@Override public void execute(SensorContext context) { FilePredicate hasObjC = context.fileSystem().predicates().hasLanguage(ObjectiveC.KEY); FilePredicate isMain = context.fileSystem().predicates().hasType(InputFile.Type.MAIN); FilePredicate and = context.fileSystem().predicates().and(hasObjC, isMain); List<File> files = new ArrayList<>(); for(InputFile inf : context.fileSystem().inputFiles(and)){ files.add(inf.file()); } List<SquidAstVisitor<ObjectiveCGrammar>> visitors = new ArrayList<>(checks.all()); scanner = ObjectiveCAstScanner.create(createConfiguration(), visitors.toArray(new SquidAstVisitor[visitors.size()])); scanner.scanFiles(files); Collection<SourceCode> squidSourceFiles = scanner.getIndex().search(new QueryByType(SourceFile.class)); save(squidSourceFiles); } }
/** * Saves a measure with the limits of the function. * * @param sonarFile input file. * @param squidFile source file. */ private void saveFunctionsComplexityDistribution(InputFile 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); squidFunctionsInFile.forEach(squidFunction -> complexityDistribution.add(squidFunction.getDouble(ApexMetric.COMPLEXITY)) ); context.saveMeasure(sonarFile, buildMeasure(complexityDistribution)); }
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(ObjectiveCMetric.COMPLEXITY)); } context.saveMeasure(sonarFile, complexityDistribution.build().setPersistenceMode(PersistenceMode.MEMORY)); }
private void saveFunctionsComplexityAndDistribution(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); double complexityInFunction = 0; for (SourceCode squidFunction : squidFunctionsInFile) { double functionComplexity = squidFunction.getDouble(EcmaScriptMetric.COMPLEXITY); complexityDistribution.add(functionComplexity); complexityInFunction += functionComplexity; } context.saveMeasure(sonarFile, complexityDistribution.build().setPersistenceMode(PersistenceMode.MEMORY)); context.saveMeasure(sonarFile, CoreMetrics.COMPLEXITY_IN_FUNCTIONS, complexityInFunction); }