private JavaConfiguration createConfiguration() { boolean analyzePropertyAccessors = settings.getBoolean(JavaPlugin.SQUID_ANALYSE_ACCESSORS_PROPERTY); Charset charset = fs.encoding(); JavaConfiguration conf = new JavaConfiguration(charset); conf.setSeparateAccessorsFromMethods(analyzePropertyAccessors); return conf; }
private static VisitorsBridge createVisitorBridge( Iterable<CodeVisitor> codeVisitors, List<File> classpath, JavaConfiguration conf, @Nullable SonarComponents sonarComponents, boolean enableSymbolicExecution) { VisitorsBridge visitorsBridge = new VisitorsBridge(codeVisitors, classpath, sonarComponents, enableSymbolicExecution); visitorsBridge.setCharset(conf.getCharset()); visitorsBridge.setAnalyseAccessors(conf.separatesAccessorsFromMethods()); visitorsBridge.setJavaVersion(conf.javaVersion()); return visitorsBridge; }
private static JavaAstScanner create(JavaConfiguration conf, @Nullable VisitorsBridge visitorsBridge) { JavaAstScanner astScanner = new JavaAstScanner(JavaParser.createParser(conf.getCharset())); if (visitorsBridge != null) { visitorsBridge.setCharset(conf.getCharset()); visitorsBridge.setJavaVersion(conf.javaVersion()); astScanner.setVisitorBridge(visitorsBridge); } return astScanner; }
private void setupAstScanner(AstScanner astScanner, Iterable<CodeVisitor> visitorsToBridge, List<File> classpath, JavaConfiguration conf, @Nullable SonarComponents sonarComponents) { if(sonarComponents != null) { astScanner.accept(new FileLinesVisitor(sonarComponents, conf.getCharset())); astScanner.accept(new SyntaxHighlighterVisitor(sonarComponents, conf.getCharset())); } VisitorsBridge visitorsBridgeTest = new VisitorsBridge(visitorsToBridge, classpath, sonarComponents); visitorsBridgeTest.setCharset(conf.getCharset()); visitorsBridgeTest.setAnalyseAccessors(conf.separatesAccessorsFromMethods()); astScanner.accept(visitorsBridgeTest); }
@VisibleForTesting public static void scanSingleFileForTests(File file, VisitorsBridge visitorsBridge) { scanSingleFileForTests(file, visitorsBridge, new JavaConfiguration(Charset.forName("UTF-8"))); }
codeVisitors, Arrays.asList( new FileLinesVisitor(sonarComponents, conf.getCharset()), new SyntaxHighlighterVisitor(sonarComponents, conf.getCharset()) testCodeVisitors.add(new SyntaxHighlighterVisitor(sonarComponents, conf.getCharset())); classpath = sonarComponents.getJavaClasspath(); testClasspath = sonarComponents.getJavaTestClasspath(); astScanner = new JavaAstScanner(JavaParser.createParser(conf.getCharset())); boolean enableSymbolicExecution = hasASymbolicExecutionCheck(visitors); astScanner.setVisitorBridge(createVisitorBridge(codeVisitors, classpath, conf, sonarComponents, enableSymbolicExecution));
@Override public void analyse(Project project, SensorContext context) { javaResourceLocator.setSensorContext(context); sonarComponents.registerCheckClasses(CheckList.REPOSITORY_KEY, CheckList.getJavaChecks()); sonarComponents.registerTestCheckClasses(CheckList.REPOSITORY_KEY, CheckList.getJavaTestChecks()); JavaConfiguration configuration = createConfiguration(); Measurer measurer = new Measurer(project, context, configuration.separatesAccessorsFromMethods()); JavaSquid squid = new JavaSquid(configuration, sonarComponents, measurer, javaResourceLocator, sonarComponents.checkClasses()); squid.scan(getSourceFiles(), getTestFiles(), getBytecodeFiles()); new Bridges(squid, settings).save(context, project, sonarComponents, javaResourceLocator.getResourceMapping(), noSonarFilter, profile); }
/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ @VisibleForTesting public static SourceFile scanSingleFile(File file, File parentFile, SquidAstVisitor<LexerlessGrammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } org.sonar.java.ast.AstScanner scanner = create(new JavaConfiguration(Charset.forName("UTF-8")), visitors); scanner.scan(Collections.singleton(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(); }
((CharsetAwareVisitor) visitor).setCharset(conf.getCharset());
public static AstScanner create(JavaConfiguration conf, SquidAstVisitor<LexerlessGrammar>... visitors) { final Parser parser = JavaParser.createParser(conf.getCharset()); AstScanner builder = new AstScanner(parser); /* Files */ builder.withSquidAstVisitor(new FileVisitor()); /* Comments */ builder.setCommentAnalyser(new CommentLinesVisitor.JavaCommentAnalyser()); builder.withSquidAstVisitor(CommentsVisitor.<LexerlessGrammar>builder() .withNoSonar(true) .withIgnoreHeaderComment(true) .build()); /* External visitors (typically Check ones) */ for (SquidAstVisitor<LexerlessGrammar> visitor : visitors) { if (visitor instanceof CharsetAwareVisitor) { ((CharsetAwareVisitor) visitor).setCharset(conf.getCharset()); } builder.withSquidAstVisitor(visitor); } return builder; }