Class SonarComponents


@ScannerSide @SonarLintSide public class SonarComponents extends CheckRegistrar.RegistrarContext
  • Field Details

    • FAIL_ON_EXCEPTION_KEY

      public static final String FAIL_ON_EXCEPTION_KEY
      See Also:
    • SONAR_BATCH_MODE_KEY

      public static final String SONAR_BATCH_MODE_KEY
      See Also:
    • SONAR_AUTOSCAN

      public static final String SONAR_AUTOSCAN
      See Also:
    • SONAR_AUTOSCAN_CHECK_FILTERING

      public static final String SONAR_AUTOSCAN_CHECK_FILTERING
      See Also:
    • SONAR_BATCH_SIZE_KEY

      public static final String SONAR_BATCH_SIZE_KEY
      See Also:
    • SONAR_FILE_BY_FILE

      public static final String SONAR_FILE_BY_FILE
      See Also:
    • SONAR_CAN_SKIP_UNCHANGED_FILES_KEY

      public static final String SONAR_CAN_SKIP_UNCHANGED_FILES_KEY
      Describes if an optimized analysis of unchanged by skipping some rules is enabled. By default, the property is not set (null), leaving SQ/SC to decide whether to enable this behavior. Setting it to true or false, forces the behavior from the analyzer independently of the server.
      See Also:
    • SONAR_IGNORE_UNNAMED_MODULE_FOR_SPLIT_PACKAGE

      public static final String SONAR_IGNORE_UNNAMED_MODULE_FOR_SPLIT_PACKAGE
      Describes whether input files should be parsed while ignoring unnamed split modules. In practice, enabling this parameter should help developers in the Android ecosystem and those relying on (transitive) dependencies that do not respect modularization as defined by the JLS.
      See Also:
  • Constructor Details

    • SonarComponents

      public SonarComponents(org.sonar.api.measures.FileLinesContextFactory fileLinesContextFactory, org.sonar.api.batch.fs.FileSystem fs, ClasspathForMain javaClasspath, ClasspathForTest javaTestClasspath, org.sonar.api.batch.rule.CheckFactory checkFactory, org.sonar.api.batch.rule.ActiveRules activeRules)
    • SonarComponents

      public SonarComponents(org.sonar.api.measures.FileLinesContextFactory fileLinesContextFactory, org.sonar.api.batch.fs.FileSystem fs, ClasspathForMain javaClasspath, ClasspathForTest javaTestClasspath, org.sonar.api.batch.rule.CheckFactory checkFactory, org.sonar.api.batch.rule.ActiveRules activeRules, @Nullable CheckRegistrar[] checkRegistrars)
      Can be called in SonarLint context when custom rules are present.
    • SonarComponents

      public SonarComponents(org.sonar.api.measures.FileLinesContextFactory fileLinesContextFactory, org.sonar.api.batch.fs.FileSystem fs, ClasspathForMain javaClasspath, ClasspathForTest javaTestClasspath, org.sonar.api.batch.rule.CheckFactory checkFactory, org.sonar.api.batch.rule.ActiveRules activeRules, @Nullable CheckRegistrar[] checkRegistrars, SonarLintCache sonarLintCache)
      Will *only* be called in SonarLint context and when custom rules are present.

      This is because SonarLintCache is only added as an extension in a SonarLint context. See also JavaPlugin#define in the sonar-java-plugin module.

      SonarLintCache is used only by newer custom rules, e.g. DBD. Thus, for this constructor, we can also assume the presence of CheckRegistrar instances.

    • SonarComponents

      public SonarComponents(org.sonar.api.measures.FileLinesContextFactory fileLinesContextFactory, org.sonar.api.batch.fs.FileSystem fs, ClasspathForMain javaClasspath, ClasspathForTest javaTestClasspath, org.sonar.api.batch.rule.CheckFactory checkFactory, org.sonar.api.batch.rule.ActiveRules activeRules, @Nullable org.sonar.api.batch.bootstrap.ProjectDefinition projectDefinition)
      Will be called in SonarScanner context when no custom rules are present. May be called in some SonarLint contexts, but not others, since ProjectDefinition might not be available.
    • SonarComponents

      public SonarComponents(org.sonar.api.measures.FileLinesContextFactory fileLinesContextFactory, org.sonar.api.batch.fs.FileSystem fs, ClasspathForMain javaClasspath, ClasspathForTest javaTestClasspath, org.sonar.api.batch.rule.CheckFactory checkFactory, org.sonar.api.batch.rule.ActiveRules activeRules, @Nullable CheckRegistrar[] checkRegistrars, @Nullable org.sonar.api.batch.bootstrap.ProjectDefinition projectDefinition)
      May be called in some SonarLint contexts, but not others, since ProjectDefinition might not be available.
    • SonarComponents

      public SonarComponents(org.sonar.api.measures.FileLinesContextFactory fileLinesContextFactory, org.sonar.api.batch.fs.FileSystem fs, ClasspathForMain javaClasspath, ClasspathForTest javaTestClasspath, org.sonar.api.batch.rule.CheckFactory checkFactory, org.sonar.api.batch.rule.ActiveRules activeRules, @Nullable CheckRegistrar[] checkRegistrars, @Nullable org.sonar.api.batch.bootstrap.ProjectDefinition projectDefinition, @Nullable SonarLintCache sonarLintCache)
      All other constructors delegate to this one.

      It will also be called directly when constructing a SonarComponents instance for injection if all parameters are available. This is for example the case for SonarLint in IntelliJ when DBD is present (because ProjectDefinition can be available in recent SonarLint versions, and DBD provides a CheckRegistrar.)

  • Method Details

    • setSensorContext

      public void setSensorContext(org.sonar.api.batch.sensor.SensorContext context)
    • setCheckFilter

      public void setCheckFilter(UnaryOperator<List<JavaCheck>> checkFilter)
    • fileLinesContextFor

      public org.sonar.api.measures.FileLinesContext fileLinesContextFor(org.sonar.api.batch.fs.InputFile inputFile)
    • symbolizableFor

      public org.sonar.api.batch.sensor.symbol.NewSymbolTable symbolizableFor(org.sonar.api.batch.fs.InputFile inputFile)
    • highlightableFor

      public org.sonar.api.batch.sensor.highlighting.NewHighlighting highlightableFor(org.sonar.api.batch.fs.InputFile inputFile)
    • getJavaClasspath

      public List<File> getJavaClasspath()
    • inAndroidContext

      public boolean inAndroidContext()
    • getJavaTestClasspath

      public List<File> getJavaTestClasspath()
    • getJspClasspath

      public List<File> getJspClasspath()
    • registerMainChecks

      public void registerMainChecks(String repositoryKey, Collection<?> javaCheckClassesAndInstances)
      Description copied from class: CheckRegistrar.RegistrarContext
      Registers main code java checks for a given repository.
      Overrides:
      registerMainChecks in class CheckRegistrar.RegistrarContext
      Parameters:
      repositoryKey - key of rule repository
      javaCheckClassesAndInstances - a collection of Classinvalid input: '<'? extends JavaCheck> and JavaCheck> instances
    • registerMainChecks

      public void registerMainChecks(org.sonar.api.batch.rule.Checks<JavaCheck> checks, Collection<?> javaCheckClassesAndInstances)
      Description copied from class: CheckRegistrar.RegistrarContext
      Register main code java checks which have already been initialized by a CheckFactory.
      Overrides:
      registerMainChecks in class CheckRegistrar.RegistrarContext
    • registerTestChecks

      public void registerTestChecks(String repositoryKey, Collection<?> javaCheckClassesAndInstances)
      Description copied from class: CheckRegistrar.RegistrarContext
      Registers test code java checks for a given repository.
      Overrides:
      registerTestChecks in class CheckRegistrar.RegistrarContext
      Parameters:
      repositoryKey - key of rule repository
      javaCheckClassesAndInstances - a collection of Classinvalid input: '<'? extends JavaCheck> and JavaCheck> instances
    • registerMainSharedCheck

      public void registerMainSharedCheck(JavaCheck check, Collection<org.sonar.api.rule.RuleKey> ruleKeys)
      Description copied from class: CheckRegistrar.RegistrarContext
      Registers one main code check related to not one but a list of rules. The check will be active if at least one of the given rule key is active. In this context injection of @RuleProperty and auto instantiation of rules defined as template in RulesDefinition will not work. And the reportIssue mechanism will not be able to find the RuleKey automatically.
      Overrides:
      registerMainSharedCheck in class CheckRegistrar.RegistrarContext
    • registerTestSharedCheck

      public void registerTestSharedCheck(JavaCheck check, Collection<org.sonar.api.rule.RuleKey> ruleKeys)
      Description copied from class: CheckRegistrar.RegistrarContext
      Registers one test code check related to not one but a list of rules. The check will be active if at least one of the given rule key is active. In this context injection of @RuleProperty and auto instantiation of rules defined as template in RulesDefinition will not work.
      Overrides:
      registerTestSharedCheck in class CheckRegistrar.RegistrarContext
    • registerAutoScanCompatibleRules

      public void registerAutoScanCompatibleRules(Collection<org.sonar.api.rule.RuleKey> ruleKeys)
      Description copied from class: CheckRegistrar.RegistrarContext
      Cannot be used outside of Sonar Products. Registers rules compatible with the autoscan context. Note: It's possible to convert checkClass to RuleKey using:
         RuleKey.of(repositoryKey, RuleAnnotationUtils.getRuleKey(checkClass))
       
      Overrides:
      registerAutoScanCompatibleRules in class CheckRegistrar.RegistrarContext
    • getAdditionalAutoScanCompatibleRuleKeys

      public Set<org.sonar.api.rule.RuleKey> getAdditionalAutoScanCompatibleRuleKeys()
    • mainChecks

      public List<JavaCheck> mainChecks()
    • testChecks

      public List<JavaCheck> testChecks()
    • jspChecks

      public List<JavaCheck> jspChecks()
    • getRuleKey

      public Optional<org.sonar.api.rule.RuleKey> getRuleKey(JavaCheck check)
    • addIssue

      public void addIssue(org.sonar.api.batch.fs.InputComponent inputComponent, JavaCheck check, int line, String message, @Nullable Integer cost)
    • reportIssue

      public void reportIssue(AnalyzerMessage analyzerMessage)
    • reportAnalysisError

      public boolean reportAnalysisError(com.sonar.sslr.api.RecognitionException re, org.sonar.api.batch.fs.InputFile inputFile)
    • isSonarLintContext

      public boolean isSonarLintContext()
    • isQuickFixCompatible

      public boolean isQuickFixCompatible()
    • isSetQuickFixAvailableCompatible

      public boolean isSetQuickFixAvailableCompatible()
    • fileLines

      public List<String> fileLines(org.sonar.api.batch.fs.InputFile inputFile)
    • inputFileContents

      public String inputFileContents(org.sonar.api.batch.fs.InputFile inputFile)
    • analysisCancelled

      public boolean analysisCancelled()
    • shouldFailAnalysisOnException

      public boolean shouldFailAnalysisOnException()
    • isFileByFileEnabled

      public boolean isFileByFileEnabled()
    • isAutoScan

      public boolean isAutoScan()
    • isAutoScanCheckFiltering

      public boolean isAutoScanCheckFiltering()
    • getBatchModeSizeInKB

      public long getBatchModeSizeInKB()
      Returns the batch mode size as read from configuration, in Kilo Bytes. If not value can be found, compute dynamically an ideal value.
      Returns:
      the batch mode size or a default value of -1L.
    • shouldIgnoreUnnamedModuleForSplitPackage

      public boolean shouldIgnoreUnnamedModuleForSplitPackage()
    • projectLevelWorkDir

      public File projectLevelWorkDir()
    • getModuleKey

      public String getModuleKey()
      Returns an OS-independent key that should identify the module within the project
      Returns:
      A key representing the module
    • canSkipUnchangedFiles

      public boolean canSkipUnchangedFiles() throws ApiMismatchException
      Throws:
      ApiMismatchException
    • fileCanBeSkipped

      public boolean fileCanBeSkipped(org.sonar.api.batch.fs.InputFile inputFile)
    • project

      public org.sonar.api.batch.fs.InputComponent project()
    • collectUndefinedTypes

      public void collectUndefinedTypes(String pathToFile, Set<JProblem> undefinedTypes)
    • logUndefinedTypes

      public void logUndefinedTypes()
    • context

      public org.sonar.api.batch.sensor.SensorContext context()
    • sonarLintCache

      @CheckForNull public SonarLintCache sonarLintCache()