Skip to content

Commit

Permalink
build: Remove explicit guava dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
felipebz committed May 11, 2023
1 parent cf5bf5f commit efa179c
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 63 deletions.
1 change: 0 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ repositories {
dependencies {
implementation("com.github.ajalt.clikt:clikt:3.5.0")
implementation("com.felipebz.zpa:sonar-zpa-plugin:3.3.0-SNAPSHOT")
implementation("com.google.guava:guava:31.1-jre")
implementation("org.sonarsource.sonarqube:sonar-scanner-protocol:7.9")
implementation("org.sonarsource.sonarqube:sonar-ws:7.9")
implementation("com.squareup.okhttp3:okhttp:4.10.0")
Expand Down
131 changes: 69 additions & 62 deletions src/main/kotlin/br/com/felipezorzo/zpa/cli/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import com.github.ajalt.clikt.parameters.options.default
import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.options.required
import com.github.ajalt.clikt.parameters.types.choice
import com.google.common.base.Stopwatch
import com.google.gson.Gson
import org.sonar.plsqlopen.CustomAnnotationBasedRulesDefinition
import org.sonar.plsqlopen.metadata.FormsMetadata
Expand All @@ -34,6 +33,7 @@ import java.util.*
import java.util.concurrent.TimeUnit
import java.util.logging.LogManager
import java.util.stream.Collectors
import kotlin.system.measureTimeMillis
import br.com.felipezorzo.zpa.cli.sqissue.Issue as GenericIssue

const val CONSOLE = "console"
Expand Down Expand Up @@ -70,88 +70,95 @@ class Main : CliktCommand(name = "zpa-cli") {

val extensions = extensions.split(',')

val stopwatch = Stopwatch.createStarted()
val ellapsedTime = measureTimeMillis {

val baseDir = File(sources).absoluteFile
val baseDirPath = baseDir.toPath()
val baseDir = File(sources).absoluteFile
val baseDirPath = baseDir.toPath()

var sonarqubeLoader: SonarQubeLoader? = null
sonarqubeOptions?.let {
if (it.sonarqubeUrl.isNotEmpty()) {
sonarqubeLoader = SonarQubeLoader(it)
var sonarqubeLoader: SonarQubeLoader? = null
sonarqubeOptions?.let {
if (it.sonarqubeUrl.isNotEmpty()) {
sonarqubeLoader = SonarQubeLoader(it)
}
}
}

val activeRulesOnSonarQube = sonarqubeLoader?.downloadQualityProfile() ?: emptyList()
val activeRules = ActiveRules().configureRules(activeRulesOnSonarQube)
val activeRulesOnSonarQube = sonarqubeLoader?.downloadQualityProfile() ?: emptyList()
val activeRules = ActiveRules().configureRules(activeRulesOnSonarQube)

val ruleMetadataLoader = RuleMetadataLoader()
val ruleMetadataLoader = RuleMetadataLoader()

val checkList = mutableListOf<PlSqlVisitor>()
val checkList = mutableListOf<PlSqlVisitor>()

val rulesDefinitions= listOf(DefaultRulesDefinition(),
*pluginManager.getExtensions(CustomPlSqlRulesDefinition::class.java).toTypedArray())
val rulesDefinitions = listOf(
DefaultRulesDefinition(),
*pluginManager.getExtensions(CustomPlSqlRulesDefinition::class.java).toTypedArray()
)

for (rulesDefinition in rulesDefinitions) {
val repository = Repository(rulesDefinition.repositoryKey())
CustomAnnotationBasedRulesDefinition.load(repository, "plsqlopen",
rulesDefinition.checkClasses().toList(), ruleMetadataLoader)
for (rulesDefinition in rulesDefinitions) {
val repository = Repository(rulesDefinition.repositoryKey())
CustomAnnotationBasedRulesDefinition.load(
repository, "plsqlopen",
rulesDefinition.checkClasses().toList(), ruleMetadataLoader
)

activeRules.addRepository(repository)
activeRules.addRepository(repository)

val checks = ZpaChecks(activeRules, repository.key, ruleMetadataLoader)
.addAnnotatedChecks(rulesDefinition.checkClasses().toList())
val checks = ZpaChecks(activeRules, repository.key, ruleMetadataLoader)
.addAnnotatedChecks(rulesDefinition.checkClasses().toList())

checkList.addAll(checks.all())
}
checkList.addAll(checks.all())
}

val files = baseDir
val files = baseDir
.walkTopDown()
.filter { it.isFile && extensions.contains(it.extension.lowercase(Locale.getDefault())) }
.map { InputFile(PlSqlFile.Type.MAIN, baseDirPath, it, StandardCharsets.UTF_8) }
.toList()

val metadata = FormsMetadata.loadFromFile(formsMetadata)

val progressReport = ProgressReport("Report about progress of code analyzer", TimeUnit.SECONDS.toMillis(10))
progressReport.start(files.map { it.pathRelativeToBase }.toList())

val scanner = AstScanner(checkList, metadata, true, StandardCharsets.UTF_8)

val issues = files.parallelStream().flatMap { file ->
val scannerResult = scanner.scanFile(file)
progressReport.nextFile()
scannerResult.issues.stream()
}.collect(Collectors.toList())

progressReport.stop()

if (outputFormat == CONSOLE) {
printIssues(issues)
} else {
val generatedOutput =
when (outputFormat) {
GENERIC_ISSUE_FORMAT -> {
exportToGenericIssueFormat(issues)
}
SONAR_REPORT_FORMAT -> {
sonarqubeLoader?.let {
val issuesToExport = it.updateIssues(activeRules, issues)
val gson = Gson()
gson.toJson(issuesToExport)
}.orEmpty()
val metadata = FormsMetadata.loadFromFile(formsMetadata)

val progressReport = ProgressReport("Report about progress of code analyzer", TimeUnit.SECONDS.toMillis(10))
progressReport.start(files.map { it.pathRelativeToBase }.toList())

val scanner = AstScanner(checkList, metadata, true, StandardCharsets.UTF_8)

val issues = files.parallelStream().flatMap { file ->
val scannerResult = scanner.scanFile(file)
progressReport.nextFile()
scannerResult.issues.stream()
}.collect(Collectors.toList())

progressReport.stop()

if (outputFormat == CONSOLE) {
printIssues(issues)
} else {
val generatedOutput =
when (outputFormat) {
GENERIC_ISSUE_FORMAT -> {
exportToGenericIssueFormat(issues)
}

SONAR_REPORT_FORMAT -> {
sonarqubeLoader?.let {
val issuesToExport = it.updateIssues(activeRules, issues)
val gson = Gson()
gson.toJson(issuesToExport)
}.orEmpty()
}

else -> {
""
}
}
else -> {
""
}
}

val file = File(outputFile)
file.parentFile?.mkdirs()
file.writeText(generatedOutput)
val file = File(outputFile)
file.parentFile?.mkdirs()
file.writeText(generatedOutput)
}
}

LOG.info("Time elapsed: ${stopwatch.elapsed().toMillis()} ms")
LOG.info("Time elapsed: $ellapsedTime ms")
pluginManager.stopPlugins()
pluginManager.unloadPlugins()
}
Expand Down

0 comments on commit efa179c

Please sign in to comment.