@@ -3,24 +3,23 @@ package com.codacy.analysis.core.tools
33import java .nio .file .Paths
44
55import better .files .File
6- import com .codacy .analysis .core .model .FileMetrics
6+ import com .codacy .analysis .core .model .{ AnalyserError , FileMetrics , MetricsToolSpec }
77import com .codacy .plugins .api
88import com .codacy .plugins .api .Source
99import com .codacy .plugins .api .languages .Language
1010import com .codacy .plugins .api .metrics .MetricsTool .CodacyConfiguration
1111import com .codacy .plugins .metrics .traits
1212import com .codacy .plugins .metrics .traits .{MetricsRequest , MetricsRunner }
13- import com .codacy .plugins .metrics .utils .MetricsTools
1413import com .codacy .plugins .runners .{BinaryDockerRunner , DockerRunner }
1514import org .log4s .getLogger
1615
1716import scala .concurrent .duration .Duration
1817import scala .util .Try
1918
20- class MetricsTool (private val metricsTool : traits. MetricsTool , val languageToRun : Language ) extends ITool {
19+ class MetricsTool (metricsToolSpec : MetricsToolSpec , val languageToRun : Language ) extends ITool {
2120 override def name : String = " metrics"
2221
23- override def supportedLanguages : Set [Language ] = metricsTool .languages.to[Set ]
22+ override def supportedLanguages : Set [Language ] = metricsToolSpec .languages.to[Set ]
2423
2524 def run (directory : File ,
2625 files : Option [Set [Source .File ]],
@@ -29,6 +28,8 @@ class MetricsTool(private val metricsTool: traits.MetricsTool, val languageToRun
2928 maxToolMemory : Option [String ] = None ): Try [List [FileMetrics ]] = {
3029 val request = MetricsRequest (directory.pathAsString)
3130
31+ val metricsTool = new traits.MetricsTool (metricsToolSpec.dockerImage, metricsToolSpec.languages.toList)
32+
3233 val dockerRunner = new BinaryDockerRunner [api.metrics.FileMetrics ](
3334 metricsTool,
3435 BinaryDockerRunner .Config (containerMemoryLimit = maxToolMemory))
@@ -64,22 +65,22 @@ class MetricsTool(private val metricsTool: traits.MetricsTool, val languageToRun
6465 }
6566}
6667
67- object MetricsToolCollector {
68+ class MetricsToolCollector ( toolRepository : ToolRepository ) {
6869
6970 private val logger : org.log4s.Logger = getLogger
7071
71- private val availableTools = MetricsTools .list
72-
73- def fromLanguages (languages : Set [Language ]): Set [MetricsTool ] = {
74- languages.flatMap { lang =>
75- val collectedTools = availableTools.collect {
76- case tool if tool.languages.contains(lang) =>
77- new MetricsTool (tool, lang)
78- }
79- if (collectedTools.isEmpty) {
80- logger.info(s " No metrics tools found for language ${lang.name}" )
72+ def fromLanguages (languages : Set [Language ]): Either [AnalyserError , Set [MetricsTool ]] = {
73+ toolRepository.listMetricsTools().map { tools =>
74+ languages.flatMap { lang =>
75+ val collectedTools = tools.collect {
76+ case tool if tool.languages.contains(lang) =>
77+ new MetricsTool (tool, lang)
78+ }
79+ if (collectedTools.isEmpty) {
80+ logger.info(s " No metrics tools found for language ${lang.name}" )
81+ }
82+ collectedTools
8183 }
82- collectedTools
8384 }
8485 }
8586
0 commit comments