Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Async.async gives "nullary-override" warning when not provided with explicit type #238

Closed
shubhamJay opened this issue May 5, 2020 · 5 comments · Fixed by #240
Closed

Comments

@shubhamJay
Copy link

val a = async { "hello" } // gives warning 
val b: Future[String] = async { "hello" }

While compiling the above code with compiler option "-Xlint:nullary-override" enabled on scala 2.13.2 version, the first line throws an warning saying nullary method assumes an empty parameter list from the overridden definition. After providing explicit type, the warning goes away as written on second line.

@SethTisue
Copy link
Member

@retronym it came up in the Scala community build that this problem will become more acute with the release of Scala 2.13.3, because @dwijnand's scala/scala#8846 makes this warn by default

https://scala-ci.typesafe.com/job/scala-2.13.x-jdk11-integrate-community-build/1545/artifact/logs/scala-async-build.log

[scala-async] [info] Test scala.async.run.WarningsSpec.noDeadCodeWarningForAsyncThrow started
[scala-async] [error] Test scala.async.run.WarningsSpec.noDeadCodeWarningForAsyncThrow failed: assertion failed: LinkedHashSet(pos: RangePosition(<console>, 109, 115, 136) method without a parameter list overrides a method with a single empty one WARNING, pos: NoPosition No warnings can be incurred under -Werror. ERROR), took 1.47 sec
[scala-async] [info] Test scala.async.run.WarningsSpec.noDeadCodeWarningInMacroExpansion started
[scala-async] [error] Test scala.async.run.WarningsSpec.noDeadCodeWarningInMacroExpansion failed: assertion failed: LinkedHashSet(pos: RangePosition(<console>, 120, 126, 347) method without a parameter list overrides a method with a single empty one WARNING, pos: NoPosition No warnings can be incurred under -Werror. ERROR), took 0.351 sec
[scala-async] [info] Test scala.async.run.WarningsSpec.noPureExpressionInStatementPositionWarning_t74 started
[scala-async] [error] Test scala.async.run.WarningsSpec.noPureExpressionInStatementPositionWarning_t74 failed: scala.tools.reflect.ToolBoxError: reflective compilation has failed:
[scala-async] [error] 
[scala-async] [error] method without a parameter list overrides a method with a single empty one
[scala-async] [error] No warnings can be incurred under -Werror., took 1.354 sec

@SethTisue
Copy link
Member

SethTisue commented Jun 16, 2020

@shubhamJay as a workaround, I'd suggest using -Wconf to suppress the warning

@retronym
Copy link
Member

This problem will go away in scala-async 1.0, which I plan to release in July (once Scala 2.12.12 and 2.12.3 are out.)

scala-ref 2.12.x -cp /Users/jz/code/scala-async/target/scala-2.12/classes -Xasync -Xlint:nullary-override
Welcome to Scala 2.12.12-20200622-114403-72e2d77 (OpenJDK 64-Bit Server VM, Java 1.8.0-adoptopenjdk).
Type in expressions for evaluation. Or try :help.

scala> import scala.concurrent._, ExecutionContext.Implicits.global, scala.async.Async._
import scala.concurrent._
import ExecutionContext.Implicits.global
import scala.async.Async._

scala> async { "hello" }
res0: scala.concurrent.Future[String] = Future(Success(hello))

It may also be possible to get rid of the warning in scala-async 0.10.x by tracking down what part of the macro expansion runs afoul of the warning and inserting the parens.

@retronym
Copy link
Member

The tree in question is:

override def apply: Unit = apply(null)

This should be def apply() : Unit.

It is generated in

DefDef(NoMods, name.apply, Nil, Nil, TypeTree(definitions.UnitTpe), Apply(Ident(name.apply), literalNull :: Nil))
.

To fix, the vparamss argument should be List(Nil), rather than Nil.

@simao
Copy link

simao commented Jun 16, 2021

Any info on that scala-async 1.x release? I am noticing these warnings with scala 2.13.6. To get rid of the warnings I needed to explicitly set the types return types when using async.

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants