Skip to content

Commit f57d4eb

Browse files
author
som-snytt
authored
Merge pull request scala#10812 from som-snytt/issue/10287-for-warnings
Fix unused warnings in for comprehensions [ci: last-only]
2 parents 8c1bf9b + 8c00042 commit f57d4eb

File tree

129 files changed

+747
-582
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

129 files changed

+747
-582
lines changed

build.sbt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ lazy val commonSettings = instanceSettings ++ clearSourceAndResourceDirectories
161161
run / fork := true,
162162
run / connectInput := true,
163163
Compile / scalacOptions ++= Seq("-feature", "-Xlint",
164+
//"-Vprint",
164165
//"-Xmaxerrs", "5", "-Xmaxwarns", "5", // uncomment for ease of development while breaking things
165166
// work around https://github.com/scala/bug/issues/11534
166167
"-Wconf:cat=unchecked&msg=The outer reference in this type test cannot be checked at run time.:s",
@@ -463,6 +464,9 @@ lazy val reflect = configureAsSubproject(project)
463464
name := "scala-reflect",
464465
description := "Scala Reflection Library",
465466
Osgi.bundleName := "Scala Reflect",
467+
Compile / scalacOptions ++= Seq(
468+
"-Wconf:cat=deprecation&msg=early initializers:s", // compiler heavily relies upon early initializers
469+
),
466470
Compile / doc / scalacOptions ++= Seq(
467471
"-skip-packages", "scala.reflect.macros.internal:scala.reflect.internal:scala.reflect.io"
468472
),
@@ -534,6 +538,7 @@ lazy val compiler = configureAsSubproject(project)
534538
).get
535539
},
536540
Compile / scalacOptions ++= Seq(
541+
//"-Wunused", //"-Wnonunit-statement",
537542
"-Wconf:cat=deprecation&msg=early initializers:s", // compiler heavily relies upon early initializers
538543
),
539544
Compile / doc / scalacOptions ++= Seq(
@@ -694,6 +699,9 @@ lazy val partest = configureAsSubproject(project)
694699
name := "scala-partest",
695700
description := "Scala Compiler Testing Tool",
696701
libraryDependencies ++= List(testInterfaceDep, diffUtilsDep, junitDep),
702+
Compile / scalacOptions ++= Seq(
703+
"-Wconf:cat=deprecation&msg=early initializers:s", // compiler heavily relies upon early initializers
704+
),
697705
Compile / javacOptions ++= Seq("-XDenableSunApiLintControl", "-Xlint") ++
698706
(if (fatalWarnings.value) Seq("-Werror") else Seq()),
699707
pomDependencyExclusions ++= List((organization.value, "scala-repl-frontend"), (organization.value, "scala-compiler-doc")),

src/compiler/scala/reflect/macros/compiler/DefaultMacroCompiler.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ abstract class DefaultMacroCompiler extends Resolvers
7171
val vanillaResult = tryCompile(vanillaImplRef)
7272
val bundleResult = tryCompile(bundleImplRef)
7373

74-
def ensureUnambiguousSuccess() = {
74+
def ensureUnambiguousSuccess(): Unit = {
7575
// we now face a hard choice of whether to report ambiguity:
7676
// 1) when there are eponymous methods in both bundle and object
7777
// 2) when both references to eponymous methods are resolved successfully
@@ -100,6 +100,7 @@ abstract class DefaultMacroCompiler extends Resolvers
100100
try {
101101
if (vanillaResult.isSuccess || bundleResult.isSuccess) ensureUnambiguousSuccess()
102102
if (vanillaResult.isFailure && bundleResult.isFailure) reportMostAppropriateFailure()
103+
//else // TODO
103104
vanillaResult.orElse(bundleResult).get
104105
} catch {
105106
case MacroImplResolutionException(pos, msg) =>

src/compiler/scala/reflect/macros/compiler/Resolvers.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ trait Resolvers {
3434
lazy val (macroImplRef, isBlackbox, macroImplOwner, macroImpl, targs) =
3535
typer.silent(_.typed(markMacroImplRef(untypedMacroImplRef)), reportAmbiguousErrors = false) match {
3636
case SilentResultValue(macroImplRef @ MacroImplReference(_, isBlackbox, owner, meth, targs)) => (macroImplRef, isBlackbox, owner, meth, targs)
37-
case SilentResultValue(macroImplRef) => MacroImplReferenceWrongShapeError()
37+
case SilentResultValue(_) => MacroImplReferenceWrongShapeError()
3838
case ste: SilentTypeError => abort(ste.err.errPos, ste.err.errMsg)
3939
}
4040
}

src/compiler/scala/reflect/macros/compiler/Validators.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ trait Validators {
127127
*/
128128
private lazy val macroImplSig: MacroImplSig = {
129129
val tparams = macroImpl.typeParams
130-
val paramss = transformTypeTagEvidenceParams(macroImplRef, (param, tparam) => NoSymbol)
130+
val paramss = transformTypeTagEvidenceParams(macroImplRef, (_, _) => NoSymbol)
131131
val ret = macroImpl.info.finalResultType
132132
MacroImplSig(tparams, paramss, ret)
133133
}

src/compiler/scala/reflect/quasiquotes/Parsers.scala

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,16 @@ trait Parsers { self: Quasiquotes =>
4242
val posMapList = posMap.toList
4343
def containsOffset(start: Int, end: Int) = start <= offset && offset < end
4444
def fallbackPosition = posMapList match {
45-
case (pos1, (start1, end1)) :: _ if start1 > offset => pos1
46-
case _ :+ ((pos2, (start2, end2))) if end2 <= offset => pos2.withPoint(pos2.point + (end2 - start2))
47-
case x => throw new MatchError(x)
45+
case (pos1, (start1, _)) :: _ if start1 > offset => pos1
46+
case _ :+ ((pos2, (start2, end2))) if end2 <= offset => pos2.withPoint(pos2.point + (end2 - start2))
47+
case x => throw new MatchError(x)
4848
}
4949
posMapList.sliding(2).collect {
50-
case (pos1, (start1, end1)) :: _ if containsOffset(start1, end1) => (pos1, offset - start1)
51-
case (pos1, (start1, end1)) :: (pos2, (start2, _)) :: _ if containsOffset(end1, start2) => (pos1, end1 - start1)
52-
case _ :: (pos2, (start2, end2)) :: _ if containsOffset(start2, end2) => (pos2, offset - start2)
53-
}.map { case (pos, offset) =>
54-
pos.withPoint(pos.point + offset)
50+
case (pos1, (start1, end1)) :: _ if containsOffset(start1, end1) => (pos1, offset - start1)
51+
case (pos1, (start1, end1)) :: (_, (start2, _)) :: _ if containsOffset(end1, start2) => (pos1, end1 - start1)
52+
case _ :: (pos2, (start2, end2)) :: _ if containsOffset(start2, end2) => (pos2, offset - start2)
53+
}.map {
54+
case (pos, offset) => pos.withPoint(pos.point + offset)
5555
}.toList.headOption.getOrElse(fallbackPosition)
5656
}
5757

@@ -92,7 +92,7 @@ trait Parsers { self: Quasiquotes =>
9292
case _ => gen.mkBlock(stats, doFlatten = true)
9393
}
9494
case nme.unapply => gen.mkBlock(stats, doFlatten = false)
95-
case other => global.abort("unreachable")
95+
case _ => global.abort("unreachable")
9696
}
9797

9898
// tq"$a => $b"

src/compiler/scala/reflect/quasiquotes/Reifiers.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ trait Reifiers { self: Quasiquotes =>
319319
*/
320320
def group[T](lst: List[T])(similar: (T, T) => Boolean) = lst.foldLeft[List[List[T]]](List()) {
321321
case (Nil, el) => List(List(el))
322-
case (ll :+ (last @ (lastinit :+ lastel)), el) if similar(lastel, el) => ll :+ (last :+ el)
322+
case (ll :+ (last @ _ :+ lastel), el) if similar(lastel, el) => ll :+ (last :+ el)
323323
case (ll, el) => ll :+ List(el)
324324
}
325325

@@ -363,7 +363,7 @@ trait Reifiers { self: Quasiquotes =>
363363
case ParamPlaceholder(Hole(tree, DotDot)) => tree
364364
case SyntacticPatDef(mods, pat, tpt, rhs) =>
365365
reifyBuildCall(nme.SyntacticPatDef, mods, pat, tpt, rhs)
366-
case SyntacticValDef(mods, p @ Placeholder(h: ApplyHole), tpt, rhs) if h.tpe <:< treeType =>
366+
case SyntacticValDef(mods, Placeholder(h: ApplyHole), tpt, rhs) if h.tpe <:< treeType =>
367367
mirrorBuildCall(nme.SyntacticPatDef, reify(mods), h.tree, reify(tpt), reify(rhs))
368368
}
369369

src/compiler/scala/reflect/reify/Taggers.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,21 +78,21 @@ abstract class Taggers {
7878
translatingReificationErrors(materializer)
7979
}
8080
try c.typecheck(result)
81-
catch { case terr @ TypecheckException(pos, msg) => failTag(result, terr) }
81+
catch { case terr: TypecheckException => failTag(result, terr) }
8282
}
8383

8484
def materializeExpr(universe: Tree, mirror: Tree, expr: Tree): Tree = {
8585
val result = translatingReificationErrors(c.reifyTree(universe, mirror, expr))
8686
try c.typecheck(result)
87-
catch { case terr @ TypecheckException(pos, msg) => failExpr(result, terr) }
87+
catch { case terr: TypecheckException => failExpr(result, terr) }
8888
}
8989

9090
private def translatingReificationErrors(materializer: => Tree): Tree = {
9191
try materializer
9292
catch {
9393
case ReificationException(pos, msg) =>
9494
c.abort(pos.asInstanceOf[c.Position], msg) // this cast is a very small price for the confidence of exception handling
95-
case UnexpectedReificationException(pos, err, cause) if cause != null =>
95+
case UnexpectedReificationException(_, _, cause) if cause != null =>
9696
throw cause
9797
}
9898
}

src/compiler/scala/reflect/reify/codegen/GenPositions.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ trait GenPositions {
2323
// but I can hardly imagine when one would need a position that points to the reified code
2424
// usually reified trees are used to compose macro expansions or to be fed to the runtime compiler
2525
// however both macros and toolboxes have their own means to report errors in synthetic trees
26-
def reifyPosition(pos: Position): Tree =
27-
reifyMirrorObject(NoPosition)
26+
@annotation.nowarn
27+
def reifyPosition(pos: Position): Tree = reifyMirrorObject(NoPosition)
2828
}

src/compiler/scala/reflect/reify/codegen/GenTypes.scala

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -46,35 +46,35 @@ trait GenTypes {
4646
if (tsym.isClass && tpe == tsym.typeConstructor && tsym.isStatic)
4747
Select(Select(reify(tsym), nme.asType), nme.toTypeConstructor)
4848
else tpe match {
49-
case tpe : NoType.type =>
49+
case tpe: NoType.type =>
5050
reifyMirrorObject(tpe)
51-
case tpe : NoPrefix.type =>
51+
case tpe: NoPrefix.type =>
5252
reifyMirrorObject(tpe)
53-
case tpe @ ThisType(root) if root.isRoot =>
53+
case ThisType(root) if root.isRoot =>
5454
mirrorBuildCall(nme.thisPrefix, mirrorMirrorSelect(nme.RootClass))
55-
case tpe @ ThisType(empty) if empty.isEmptyPackageClass =>
55+
case ThisType(empty) if empty.isEmptyPackageClass =>
5656
mirrorBuildCall(nme.thisPrefix, mirrorMirrorSelect(nme.EmptyPackageClass))
57-
case tpe @ ThisType(clazz) if clazz.isModuleClass && clazz.isStatic =>
57+
case ThisType(clazz) if clazz.isModuleClass && clazz.isStatic =>
5858
val module = reify(clazz.sourceModule)
5959
val moduleClass = Select(Select(module, nme.asModule), nme.moduleClass)
6060
mirrorBuildCall(nme.ThisType, moduleClass)
61-
case tpe @ ThisType(sym) =>
61+
case ThisType(sym) =>
6262
reifyBuildCall(nme.ThisType, sym)
63-
case tpe @ SuperType(thistpe, supertpe) =>
63+
case SuperType(thistpe, supertpe) =>
6464
reifyBuildCall(nme.SuperType, thistpe, supertpe)
65-
case tpe @ SingleType(pre, sym) =>
65+
case SingleType(pre, sym) =>
6666
reifyBuildCall(nme.SingleType, pre, sym)
67-
case tpe @ ConstantType(value) =>
67+
case ConstantType(value) =>
6868
mirrorBuildCall(nme.ConstantType, reifyProduct(value))
69-
case tpe @ TypeRef(pre, sym, args) =>
69+
case TypeRef(pre, sym, args) =>
7070
reifyBuildCall(nme.TypeRef, pre, sym, args)
71-
case tpe @ TypeBounds(lo, hi) =>
71+
case TypeBounds(lo, hi) =>
7272
reifyBuildCall(nme.TypeBounds, lo, hi)
73-
case tpe @ NullaryMethodType(restpe) =>
73+
case NullaryMethodType(restpe) =>
7474
reifyBuildCall(nme.NullaryMethodType, restpe)
75-
case tpe @ AnnotatedType(anns, underlying) =>
75+
case tpe: AnnotatedType =>
7676
reifyAnnotatedType(tpe)
77-
case _ =>
77+
case tpe =>
7878
reifyToughType(tpe)
7979
}
8080
}
@@ -165,7 +165,7 @@ trait GenTypes {
165165
* I.e. we can compile the code that involves `ru.Type`, but we cannot serialize an instance of `ru.Type`.
166166
*/
167167
private def reifySemiConcreteTypeMember(tpe: Type): Tree = tpe match {
168-
case tpe @ TypeRef(pre @ SingleType(prepre, presym), sym, args) if sym.isAbstractType && !sym.isExistential =>
168+
case TypeRef(pre @ SingleType(_, _), sym, args) if sym.isAbstractType && !sym.isExistential =>
169169
mirrorBuildCall(nme.TypeRef, reify(pre), mirrorBuildCall(nme.selectType, reify(sym.owner), reify(sym.name.toString)), reify(args))
170170
case x => throw new MatchError(x)
171171
}
@@ -187,18 +187,18 @@ trait GenTypes {
187187

188188
tpe match {
189189
case tpe @ RefinedType(parents, decls) =>
190-
reifySymDef(tpe.typeSymbol)
190+
List(tpe.typeSymbol).foreach(reifySymDef)
191191
mirrorBuildCall(nme.RefinedType, reify(parents), reifyScope(decls), reify(tpe.typeSymbol))
192-
case tpe @ ExistentialType(tparams, underlying) =>
193-
tparams foreach reifySymDef
192+
case ExistentialType(tparams, underlying) =>
193+
tparams.foreach(reifySymDef)
194194
reifyBuildCall(nme.ExistentialType, tparams, underlying)
195195
case tpe @ ClassInfoType(parents, decls, clazz) =>
196-
reifySymDef(clazz)
196+
List(clazz).foreach(reifySymDef)
197197
mirrorBuildCall(nme.ClassInfoType, reify(parents), reifyScope(decls), reify(tpe.typeSymbol))
198-
case tpe @ MethodType(params, restpe) =>
198+
case MethodType(params, restpe) =>
199199
params foreach reifySymDef
200200
reifyBuildCall(nme.MethodType, params, restpe)
201-
case tpe @ PolyType(tparams, underlying) =>
201+
case PolyType(tparams, underlying) =>
202202
tparams foreach reifySymDef
203203
reifyBuildCall(nme.PolyType, tparams, underlying)
204204
case _ =>

src/compiler/scala/reflect/reify/codegen/GenUtils.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ trait GenUtils {
117117
@tailrec
118118
final def isCrossStageTypeBearer(tree: Tree): Boolean = tree match {
119119
case TypeApply(hk, _) => isCrossStageTypeBearer(hk)
120-
case Select(sym @ Select(_, ctor), nme.apply) if ctor == nme.WeakTypeTag || ctor == nme.TypeTag || ctor == nme.Expr => true
120+
case Select(Select(_, nme.WeakTypeTag|nme.TypeTag|nme.Expr), nme.apply) => true
121121
case _ => false
122122
}
123123

src/compiler/scala/reflect/reify/phases/Reshape.scala

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
package scala.reflect.reify
1414
package phases
1515

16-
import scala.annotation.tailrec
16+
import scala.annotation.{tailrec, unused}
1717
import scala.tools.nsc.symtab.Flags._
1818

1919
trait Reshape {
@@ -192,7 +192,7 @@ trait Reshape {
192192

193193
@tailrec
194194
private def toPreTyperTypedOrAnnotated(tree: Tree): Tree = tree match {
195-
case ty @ Typed(expr1, tpt) =>
195+
case ty @ Typed(_, tpt) =>
196196
if (reifyDebug) println("reify typed: " + tree)
197197
val original = tpt match {
198198
case tt @ TypeTree() => tt.original
@@ -201,11 +201,10 @@ trait Reshape {
201201
val annotatedArg = {
202202
@tailrec
203203
def loop(tree: Tree): Tree = tree match {
204-
case annotated1 @ Annotated(ann, annotated2 @ Annotated(_, _)) => loop(annotated2)
205-
case annotated1 @ Annotated(ann, arg) => arg
204+
case Annotated(_, annotated2 @ Annotated(_, _)) => loop(annotated2)
205+
case Annotated(_, arg) => arg
206206
case _ => EmptyTree
207207
}
208-
209208
loop(original)
210209
}
211210
if (annotatedArg != EmptyTree) {
@@ -220,7 +219,7 @@ trait Reshape {
220219
if (reifyDebug) println("verdict: wasn't annotated, reify as usual")
221220
ty
222221
}
223-
case at @ Annotated(annot, arg) =>
222+
case at @ Annotated(_, arg) =>
224223
if (reifyDebug) println("reify type annotations for: " + tree)
225224
assert(at.tpe.isInstanceOf[AnnotatedType], "%s (%s)".format(at.tpe, at.tpe.kind))
226225
val annot1 = toPreTyperAnnotation(at.tpe.asInstanceOf[AnnotatedType].annotations(0))
@@ -251,7 +250,7 @@ trait Reshape {
251250
New(TypeTree(ann.atp) setOriginal extractOriginal(ann.original), List(args))
252251
}
253252

254-
private def trimAccessors(deff: Tree, stats: List[Tree]): List[Tree] = {
253+
private def trimAccessors(@unused deff: Tree, stats: List[Tree]): List[Tree] = {
255254
val symdefs = (stats collect { case vodef: ValOrDefDef => vodef } map (vodeff => vodeff.symbol -> vodeff)).toMap
256255
val accessors = scala.collection.mutable.Map[ValDef, List[DefDef]]()
257256
stats collect { case ddef: DefDef => ddef } foreach (defdef => {
@@ -311,7 +310,7 @@ trait Reshape {
311310
stats1
312311
}
313312

314-
private def trimSyntheticCaseClassMembers(deff: Tree, stats: List[Tree]): List[Tree] =
313+
private def trimSyntheticCaseClassMembers(@unused deff: Tree, stats: List[Tree]): List[Tree] =
315314
stats filterNot (memberDef => memberDef.isDef && {
316315
val isSynthetic = memberDef.symbol.isSynthetic
317316
// this doesn't work for local classes, e.g. for ones that are top-level to a quasiquote (see comments to companionClass)

src/compiler/scala/reflect/reify/utils/Extractors.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,8 @@ trait Extractors {
242242

243243
object TypeRefToFreeType {
244244
def unapply(tree: Tree): Option[TermName] = tree match {
245-
case Apply(Select(Select(uref @ Ident(_), typeRef), apply), List(Select(_, noSymbol), Ident(freeType: TermName), nil))
246-
if (uref.name == nme.UNIVERSE_SHORT && typeRef == nme.TypeRef && noSymbol == nme.NoSymbol && freeType.startsWith(nme.REIFY_FREE_PREFIX)) =>
245+
case Apply(Select(Select(Ident(nme.UNIVERSE_SHORT), nme.TypeRef), apply@_), List(Select(_, nme.NoSymbol), Ident(freeType: TermName), _))
246+
if freeType.startsWith(nme.REIFY_FREE_PREFIX) =>
247247
Some(freeType)
248248
case _ =>
249249
None

src/compiler/scala/reflect/reify/utils/StdAttachments.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ trait StdAttachments {
2323
def reifyBinding(tree: Tree): Tree =
2424
tree.attachments.get[ReifyBindingAttachment] match {
2525
case Some(ReifyBindingAttachment(binding)) => binding
26-
case other => Ident(NoSymbol)
26+
case _ => Ident(NoSymbol)
2727
}
2828

2929
case class ReifyAliasAttachment(sym: Symbol, alias: TermName)

src/compiler/scala/reflect/reify/utils/SymbolTables.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package scala.reflect.reify
1414
package utils
1515

16+
import scala.annotation._
1617
import scala.collection.{immutable, mutable}, mutable.{ArrayBuffer, ListBuffer}
1718
import java.lang.System.{lineSeparator => EOL}
1819

@@ -89,7 +90,7 @@ trait SymbolTables {
8990
new SymbolTable(newSymtab, newAliases)
9091
}
9192

92-
def add(sym: Symbol, name0: TermName, reification: Tree): SymbolTable = {
93+
def add(@unused sym: Symbol, name0: TermName, reification: Tree): SymbolTable = {
9394
def freshName(name0: TermName): TermName = {
9495
var name = name0.toString
9596
name = name.replace(".type", "$type")
@@ -133,10 +134,11 @@ trait SymbolTables {
133134
s"""symtab = [$symtabString], aliases = [$aliasesString]${if (original.isDefined) ", has original" else ""}"""
134135
}
135136

137+
@nowarn // spurious unused buf.type
136138
def debugString: String = {
137139
val buf = new StringBuilder
138140
buf.append("symbol table = " + (if (syms.length == 0) "<empty>" else "")).append(EOL)
139-
syms foreach (sym => buf.append(symDef(sym)).append(EOL))
141+
syms.foreach(sym => buf.append(symDef(sym)).append(EOL))
140142
buf.delete(buf.length - EOL.length, buf.length)
141143
buf.toString
142144
}

src/compiler/scala/tools/nsc/ClassPathMemoryConsumptionTester.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,15 @@ object ClassPathMemoryConsumptionTester {
4242
private def doTest(args: Array[String]) = {
4343
val settings = loadSettings(args.toList)
4444

45-
val mains = (1 to settings.requiredInstances.value) map (_ => new MainRetainsGlobal)
45+
val mains = (1 to settings.requiredInstances.value).map(_ => new MainRetainsGlobal)
4646

4747
// we need original settings without additional params to be able to use them later
4848
val baseArgs = argsWithoutRequiredInstances(args)
4949

5050
println(s"Loading classpath ${settings.requiredInstances.value} times")
5151
val startTime = System.currentTimeMillis()
5252

53-
mains map (_.process(baseArgs))
53+
mains.foreach(_.process(baseArgs))
5454

5555
val elapsed = System.currentTimeMillis() - startTime
5656
println(s"Operation finished - elapsed $elapsed ms")

0 commit comments

Comments
 (0)