diff --git a/console/src/main/scala/io/appthreat/console/Console.scala b/console/src/main/scala/io/appthreat/console/Console.scala index bc5a92c5..a6f6783d 100644 --- a/console/src/main/scala/io/appthreat/console/Console.scala +++ b/console/src/main/scala/io/appthreat/console/Console.scala @@ -33,7 +33,7 @@ class Console[T <: Project]( def config: ConsoleConfig = _config def console: Console[T] = this - protected var workspaceManager: WorkspaceManager[T] = _ + protected var workspaceManager: WorkspaceManager[T] = scala.compiletime.uninitialized switchWorkspace(baseDir.path.resolve("workspace").toString) protected def workspacePathName: String = workspaceManager.getPath diff --git a/console/src/test/scala/io/appthreat/console/ConsoleTests.scala b/console/src/test/scala/io/appthreat/console/ConsoleTests.scala index 60133e66..25f98796 100644 --- a/console/src/test/scala/io/appthreat/console/ConsoleTests.scala +++ b/console/src/test/scala/io/appthreat/console/ConsoleTests.scala @@ -289,7 +289,7 @@ class ConsoleTests extends AnyWordSpec with Matchers { ) val numOverlayFilesBefore = console.project.path.resolve("overlays").toFile.list().length numOverlayFilesBefore shouldBe 0 - console._runAnalyzer(defaultOverlayCreators(): _*) + console._runAnalyzer(defaultOverlayCreators()*) console.project.appliedOverlays shouldBe List( Base.overlayName, ControlFlow.overlayName, diff --git a/dataflowengineoss/src/main/scala/io/appthreat/dataflowengineoss/language/ExtendedCfgNode.scala b/dataflowengineoss/src/main/scala/io/appthreat/dataflowengineoss/language/ExtendedCfgNode.scala index 67263a84..f9d0d907 100644 --- a/dataflowengineoss/src/main/scala/io/appthreat/dataflowengineoss/language/ExtendedCfgNode.scala +++ b/dataflowengineoss/src/main/scala/io/appthreat/dataflowengineoss/language/ExtendedCfgNode.scala @@ -39,7 +39,7 @@ class ExtendedCfgNode(val traversal: Iterator[CfgNode]) extends AnyVal: sourceTrav: IterableOnce[NodeType], sourceTravs: IterableOnce[NodeType]* )(implicit context: EngineContext): Iterator[NodeType] = - val sources = sourceTravsToStartingPoints(sourceTrav +: sourceTravs: _*) + val sources = sourceTravsToStartingPoints(sourceTrav +: sourceTravs*) val reachedSources = reachableByInternal(sources).map(_.path.head.node) reachedSources.cast[NodeType] @@ -51,7 +51,7 @@ class ExtendedCfgNode(val traversal: Iterator[CfgNode]) extends AnyVal: def reachableByFlows[A](sourceTrav: IterableOnce[A], sourceTravs: IterableOnce[A]*)(implicit context: EngineContext ): Iterator[Path] = - val sources = sourceTravsToStartingPoints(sourceTrav +: sourceTravs: _*) + val sources = sourceTravsToStartingPoints(sourceTrav +: sourceTravs*) val startingPoints = sources.map(_.startingPoint) val paths = reachableByInternal(sources).par .map { result => @@ -79,7 +79,7 @@ class ExtendedCfgNode(val traversal: Iterator[CfgNode]) extends AnyVal: sourceTravs: Iterator[NodeType]* )(implicit context: EngineContext): Vector[TableEntry] = val sources = - SourcesToStartingPoints.sourceTravsToStartingPoints(sourceTrav +: sourceTravs: _*) + SourcesToStartingPoints.sourceTravsToStartingPoints(sourceTrav +: sourceTravs*) reachableByInternal(sources) private def removeConsecutiveDuplicates[T](l: Vector[T]): List[T] = diff --git a/dataflowengineoss/src/main/scala/io/appthreat/dataflowengineoss/passes/reachingdef/DataFlowSolver.scala b/dataflowengineoss/src/main/scala/io/appthreat/dataflowengineoss/passes/reachingdef/DataFlowSolver.scala index 4a91ab5c..eb656b0e 100644 --- a/dataflowengineoss/src/main/scala/io/appthreat/dataflowengineoss/passes/reachingdef/DataFlowSolver.scala +++ b/dataflowengineoss/src/main/scala/io/appthreat/dataflowengineoss/passes/reachingdef/DataFlowSolver.scala @@ -8,7 +8,7 @@ class DataFlowSolver: * given by two maps: `in` and `out`. These maps associate all CFG nodes with the set of * definitions at node entry and node exit respectively. */ - def calculateMopSolutionForwards[Node, T <: Iterable[_]](problem: DataFlowProblem[Node, T]) + def calculateMopSolutionForwards[Node, T <: Iterable[?]](problem: DataFlowProblem[Node, T]) : Solution[Node, T] = var out: Map[Node, T] = problem.inOutInit.initOut var in = problem.inOutInit.initIn @@ -43,7 +43,7 @@ class DataFlowSolver: * given by two maps: `in` and `out`. These maps associate all CFG nodes with the set of * definitions at node entry and node exit respectively. */ - def calculateMopSolutionBackwards[Node, T <: Iterable[_]](problem: DataFlowProblem[Node, T]) + def calculateMopSolutionBackwards[Node, T <: Iterable[?]](problem: DataFlowProblem[Node, T]) : Solution[Node, T] = var out: Map[Node, T] = problem.inOutInit.initOut var in = problem.inOutInit.initIn diff --git a/platform/frontends/javasrc2cpg/src/main/scala/io/appthreat/javasrc2cpg/typesolvers/EagerSourceTypeSolver.scala b/platform/frontends/javasrc2cpg/src/main/scala/io/appthreat/javasrc2cpg/typesolvers/EagerSourceTypeSolver.scala index 99a164d9..0a41602e 100644 --- a/platform/frontends/javasrc2cpg/src/main/scala/io/appthreat/javasrc2cpg/typesolvers/EagerSourceTypeSolver.scala +++ b/platform/frontends/javasrc2cpg/src/main/scala/io/appthreat/javasrc2cpg/typesolvers/EagerSourceTypeSolver.scala @@ -21,14 +21,14 @@ class EagerSourceTypeSolver( ) extends TypeSolver: private val logger = LoggerFactory.getLogger(this.getClass) - private var parent: TypeSolver = _ + private var parent: TypeSolver = scala.compiletime.uninitialized private val foundTypes: Map[String, SymbolReference[ResolvedReferenceTypeDeclaration]] = filenames .flatMap(sourceParser.parseTypesFile) .flatMap { cu => symbolSolver.inject(cu) - cu.findAll(classOf[TypeDeclaration[_]]) + cu.findAll(classOf[TypeDeclaration[?]]) .asScala .map { typeDeclaration => val name = typeDeclaration.getFullyQualifiedName.toScala match diff --git a/platform/frontends/javasrc2cpg/src/main/scala/io/appthreat/javasrc2cpg/typesolvers/SimpleCombinedTypeSolver.scala b/platform/frontends/javasrc2cpg/src/main/scala/io/appthreat/javasrc2cpg/typesolvers/SimpleCombinedTypeSolver.scala index d0d6e6c7..4938ed71 100644 --- a/platform/frontends/javasrc2cpg/src/main/scala/io/appthreat/javasrc2cpg/typesolvers/SimpleCombinedTypeSolver.scala +++ b/platform/frontends/javasrc2cpg/src/main/scala/io/appthreat/javasrc2cpg/typesolvers/SimpleCombinedTypeSolver.scala @@ -14,7 +14,7 @@ import scala.jdk.OptionConverters.RichOptional class SimpleCombinedTypeSolver extends TypeSolver: private val logger = LoggerFactory.getLogger(this.getClass) - private var parent: TypeSolver = _ + private var parent: TypeSolver = scala.compiletime.uninitialized // Ideally all types would be cached in the SimpleCombinedTypeSolver to avoid unnecessary unresolved types // from being cached. The EagerSourceTypeSolver preloads all types, however, so separating caching and // non-caching solvers avoids caching types twice. diff --git a/platform/frontends/jimple2cpg/src/test/scala/io/appthreat/jimple2cpg/unpacking/JarUnpackingTests.scala b/platform/frontends/jimple2cpg/src/test/scala/io/appthreat/jimple2cpg/unpacking/JarUnpackingTests.scala index 9cbfd62a..2b53bf8c 100644 --- a/platform/frontends/jimple2cpg/src/test/scala/io/appthreat/jimple2cpg/unpacking/JarUnpackingTests.scala +++ b/platform/frontends/jimple2cpg/src/test/scala/io/appthreat/jimple2cpg/unpacking/JarUnpackingTests.scala @@ -16,8 +16,8 @@ import scala.util.{Failure, Success, Try} class JarUnpackingTests extends AnyWordSpec with Matchers with BeforeAndAfterAll { - var validCpgs: Map[String, Cpg] = _ - var slippyCpg: Cpg = _ + var validCpgs: Map[String, Cpg] = scala.compiletime.uninitialized + var slippyCpg: Cpg = scala.compiletime.uninitialized override protected def beforeAll(): Unit = { super.beforeAll() diff --git a/platform/frontends/pysrc2cpg/src/main/scala/io/appthreat/pysrc2cpg/PythonAstVisitor.scala b/platform/frontends/pysrc2cpg/src/main/scala/io/appthreat/pysrc2cpg/PythonAstVisitor.scala index 94e0089d..f39a8d34 100644 --- a/platform/frontends/pysrc2cpg/src/main/scala/io/appthreat/pysrc2cpg/PythonAstVisitor.scala +++ b/platform/frontends/pysrc2cpg/src/main/scala/io/appthreat/pysrc2cpg/PythonAstVisitor.scala @@ -42,7 +42,7 @@ class PythonAstVisitor( protected val contextStack = new ContextStack() - private var memOpMap: AstNodeToMemoryOperationMap = _ + private var memOpMap: AstNodeToMemoryOperationMap = scala.compiletime.uninitialized private val members = mutable.Map.empty[NewTypeDecl, List[String]] @@ -173,7 +173,7 @@ class PythonAstVisitor( result end createBuiltinIdentifiers - private def unhandled(node: ast.iast with ast.iattributes): NewNode = + private def unhandled(node: ast.iast & ast.iattributes): NewNode = val unhandledAsUnknown = true if unhandledAsUnknown then nodeBuilder.unknownNode(node.toString, node.getClass.getName, lineAndColOf(node)) diff --git a/platform/frontends/pysrc2cpg/src/main/scala/io/appthreat/pythonparser/PyParser.scala b/platform/frontends/pysrc2cpg/src/main/scala/io/appthreat/pythonparser/PyParser.scala index 89a06d80..276ba03a 100644 --- a/platform/frontends/pysrc2cpg/src/main/scala/io/appthreat/pythonparser/PyParser.scala +++ b/platform/frontends/pysrc2cpg/src/main/scala/io/appthreat/pythonparser/PyParser.scala @@ -9,7 +9,7 @@ import java.nio.charset.StandardCharsets import scala.jdk.CollectionConverters.* class PyParser: - private var pythonParser: PythonParser = _ + private var pythonParser: PythonParser = scala.compiletime.uninitialized def parse(code: String): iast = parse(new ByteArrayInputStream(code.getBytes(StandardCharsets.UTF_8))) diff --git a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/X2Cpg.scala b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/X2Cpg.scala index d7c06b47..5c6dc86b 100644 --- a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/X2Cpg.scala +++ b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/X2Cpg.scala @@ -77,7 +77,7 @@ end X2CpgConfig * @param frontend * the frontend to use for CPG creation */ -abstract class X2CpgMain[T <: X2CpgConfig[T], X <: X2CpgFrontend[_]]( +abstract class X2CpgMain[T <: X2CpgConfig[T], X <: X2CpgFrontend[?]]( val cmdLineParser: OParser[Unit, T], frontend: X )( @@ -105,7 +105,7 @@ end X2CpgMain /** Trait that represents a CPG generator, where T is the frontend configuration class. */ -trait X2CpgFrontend[T <: X2CpgConfig[_]]: +trait X2CpgFrontend[T <: X2CpgConfig[?]]: /** Create a CPG according to given configuration. Returns CPG wrapped in a `Try`, making it * possible to detect and inspect exceptions in CPG generation. To be provided by the frontend. @@ -244,7 +244,7 @@ object X2Cpg: /** Apply function `applyPasses` to a newly created CPG. The CPG is wrapped in a `Try` and * returned. On failure, the CPG is ensured to be closed. */ - def withNewEmptyCpg[T <: X2CpgConfig[_]]( + def withNewEmptyCpg[T <: X2CpgConfig[?]]( outPath: String, config: T )(applyPasses: (Cpg, T) => Unit): Try[Cpg] = @@ -263,7 +263,7 @@ object X2Cpg: /** Given a function that receives a configuration and returns an arbitrary result type wrapped * in a `Try`, evaluate the function, printing errors to the console. */ - def withErrorsToConsole[T <: X2CpgConfig[_]](config: T)(f: T => Try[?]): Try[?] = + def withErrorsToConsole[T <: X2CpgConfig[?]](config: T)(f: T => Try[?]): Try[?] = f(config) match case Failure(exception) => exception.printStackTrace() diff --git a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/base/MethodDecoratorPass.scala b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/base/MethodDecoratorPass.scala index a9a993b3..d11f6c9b 100644 --- a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/base/MethodDecoratorPass.scala +++ b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/base/MethodDecoratorPass.scala @@ -16,8 +16,8 @@ import org.slf4j.{Logger, LoggerFactory} class MethodDecoratorPass(cpg: Cpg) extends CpgPass(cpg): import MethodDecoratorPass.logger - private[this] var loggedDeprecatedWarning = false - private[this] var loggedMissingTypeFullName = false + private var loggedDeprecatedWarning = false + private var loggedMissingTypeFullName = false override def run(dstGraph: DiffGraphBuilder): Unit = cpg.parameter.foreach { parameterIn => diff --git a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/controlflow/cfgcreation/CfgCreator.scala b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/controlflow/cfgcreation/CfgCreator.scala index 00aa1330..c28a79e9 100644 --- a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/controlflow/cfgcreation/CfgCreator.scala +++ b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/controlflow/cfgcreation/CfgCreator.scala @@ -549,7 +549,7 @@ class CfgCreator(entryNode: Method, diffGraph: DiffGraphBuilder): maybeFinallyBodyCfg.headOption.getOrElse(Cfg.empty) else Cfg - .from(Seq(tryBodyCfg) ++ catchBodyCfgs ++ maybeFinallyBodyCfg: _*) + .from(Seq(tryBodyCfg) ++ catchBodyCfgs ++ maybeFinallyBodyCfg*) .copy( entryNode = tryBodyCfg.entryNode, edges = @@ -600,7 +600,7 @@ class CfgCreator(entryNode: Method, diffGraph: DiffGraphBuilder): val breakFringe = takeCurrentLevel(bodyCfgs.flatMap(_.breaks)).map((_, AlwaysEdge)) Cfg - .from(conditionCfg :: bodyCfgs: _*) + .from(conditionCfg :: bodyCfgs*) .copy( entryNode = conditionCfg.entryNode, edges = caseEdges ++ conditionCfg.edges ++ bodyCfgs.flatMap(_.edges), diff --git a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/frontend/XTypeRecovery.scala b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/frontend/XTypeRecovery.scala index aaa4f17f..8d911865 100644 --- a/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/frontend/XTypeRecovery.scala +++ b/platform/frontends/x2cpg/src/main/scala/io/appthreat/x2cpg/passes/frontend/XTypeRecovery.scala @@ -176,7 +176,7 @@ object XTypeRecovery: /** Parser options for languages implementing this pass. */ - def parserOptions[R <: X2CpgConfig[R] with TypeRecoveryParserConfig[R]]: OParser[?, R] = + def parserOptions[R <: X2CpgConfig[R] & TypeRecoveryParserConfig[R]]: OParser[?, R] = val builder = OParser.builder[R] import builder.* OParser.sequence( diff --git a/platform/frontends/x2cpg/src/test/scala/io/joern/x2cpg/testfixtures/LanguageFrontend.scala b/platform/frontends/x2cpg/src/test/scala/io/joern/x2cpg/testfixtures/LanguageFrontend.scala index 2c752a23..bfb1a6f1 100644 --- a/platform/frontends/x2cpg/src/test/scala/io/joern/x2cpg/testfixtures/LanguageFrontend.scala +++ b/platform/frontends/x2cpg/src/test/scala/io/joern/x2cpg/testfixtures/LanguageFrontend.scala @@ -8,16 +8,16 @@ import io.appthreat.x2cpg.X2CpgConfig /** LanguageFrontend encapsulates the logic that translates the source code directory into CPGs */ trait LanguageFrontend { - private var config: Option[X2CpgConfig[_]] = None + private var config: Option[X2CpgConfig[?]] = None - def setConfig(config: X2CpgConfig[_]): Unit = { + def setConfig(config: X2CpgConfig[?]): Unit = { if (this.config.isDefined) { throw new RuntimeException("Frontend config may only be set once per test") } this.config = Some(config) } - def getConfig(): Option[X2CpgConfig[_]] = config + def getConfig(): Option[X2CpgConfig[?]] = config /** A standard file extension for the source code files of the given language. E.g. `.c` for C language */ diff --git a/platform/frontends/x2cpg/src/test/scala/io/joern/x2cpg/testfixtures/TestCpg.scala b/platform/frontends/x2cpg/src/test/scala/io/joern/x2cpg/testfixtures/TestCpg.scala index fe60042a..a4ed211e 100644 --- a/platform/frontends/x2cpg/src/test/scala/io/joern/x2cpg/testfixtures/TestCpg.scala +++ b/platform/frontends/x2cpg/src/test/scala/io/joern/x2cpg/testfixtures/TestCpg.scala @@ -35,7 +35,7 @@ abstract class TestCpg extends Cpg() with LanguageFrontend { this } - def withConfig(config: X2CpgConfig[_]): this.type = { + def withConfig(config: X2CpgConfig[?]): this.type = { setConfig(config) this } diff --git a/platform/src/main/scala/io/appthreat/chencli/ChenParse.scala b/platform/src/main/scala/io/appthreat/chencli/ChenParse.scala index d51f3934..d6fafe09 100644 --- a/platform/src/main/scala/io/appthreat/chencli/ChenParse.scala +++ b/platform/src/main/scala/io/appthreat/chencli/ChenParse.scala @@ -14,7 +14,7 @@ object ChenParse: // Special string used to separate joern-parse opts from frontend-specific opts val ArgsDelimitor = "--frontend-args" val DefaultCpgOutFile = "cpg.bin" - var generator: CpgGenerator = _ + var generator: CpgGenerator = scala.compiletime.uninitialized def main(args: Array[String]): Unit = run(args) match diff --git a/semanticcpg/src/test/scala/io/shiftleft/semanticcpg/language/StepsTest.scala b/semanticcpg/src/test/scala/io/shiftleft/semanticcpg/language/StepsTest.scala index 3561f1ab..92a892de 100644 --- a/semanticcpg/src/test/scala/io/shiftleft/semanticcpg/language/StepsTest.scala +++ b/semanticcpg/src/test/scala/io/shiftleft/semanticcpg/language/StepsTest.scala @@ -56,7 +56,7 @@ class StepsTest extends AnyWordSpec with Matchers { "providing multiple" in { // find two arbitrary methods so we can find it again in the next step val methods = cpg.method.toList.take(2) - val results: List[Method] = cpg.method.id(methods.map(_.id): _*).toList + val results: List[Method] = cpg.method.id(methods.map(_.id)*).toList results.size shouldBe 2 results.toSet shouldBe methods.toSet