Skip to content

Referring to a Scala 2 trait which has a companion object leads to a crash when a method with the same name also exists #9916

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

Closed
DieBauer opened this issue Sep 30, 2020 · 12 comments

Comments

@DieBauer
Copy link
Contributor

Minimized code

Using the Finagle library I get a crash on a specific construct.
This works in dotty 0.24.0 (and Scala 2.13) but crashes in all recent versions.

Since it's occuring with a 3rd party library, I find it hard to create minimized code.
But it's a bad story for backward compatibility.

I have a Scastie including the sbt dependency: https://scastie.scala-lang.org/LylIH9JBTv6k0a655eG7aw

import com.twitter.finagle.Stack
import com.twitter.finagle.liveness.FailureAccrualFactory

class A {
   val t = Stack.Param[FailureAccrualFactory.Param](FailureAccrualFactory.Param(???))
}

Output (click arrow to expand)

scala.MatchError: NoType (of class dotty.tools.dotc.core.Types$NoType$)
	at dotty.tools.dotc.core.SymDenotations$SymDenotation.sourceOfSelf$1(SymDenotations.scala:1000)
	at dotty.tools.dotc.core.SymDenotations$SymDenotation.sourceModule(SymDenotations.scala:1002)
	at dotty.tools.dotc.core.TypeErasure.dotty$tools$dotc$core$TypeErasure$$apply(TypeErasure.scala:502)
	at dotty.tools.dotc.core.TypeErasure.eraseInfo(TypeErasure.scala:550)
	at dotty.tools.dotc.core.TypeErasure$.transformInfo(TypeErasure.scala:202)
	at dotty.tools.dotc.transform.Erasure.transform(Erasure.scala:82)
	at dotty.tools.dotc.core.Denotations$SingleDenotation.goForward$1(Denotations.scala:803)
	at dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:852)
	at dotty.tools.dotc.core.Symbols$Symbol.recomputeDenot(Symbols.scala:119)
	at dotty.tools.dotc.core.Symbols$Symbol.computeDenot(Symbols.scala:113)
	at dotty.tools.dotc.core.Symbols$Symbol.denot(Symbols.scala:106)
	at dotty.tools.dotc.core.Symbols$.toDenot(Symbols.scala:487)
	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.registeredCompanion(SymDenotations.scala:2143)
	at dotty.tools.dotc.core.SymDenotations$SymDenotation.copySymDenotation(SymDenotations.scala:1477)
	at dotty.tools.dotc.transform.Flatten.transformSym(Flatten.scala:35)
	at dotty.tools.dotc.core.DenotTransformers$SymTransformer.transform(DenotTransformers.scala:70)
	at dotty.tools.dotc.core.DenotTransformers$SymTransformer.transform$(DenotTransformers.scala:65)
	at dotty.tools.dotc.transform.Flatten.transform(Flatten.scala:14)
	at dotty.tools.dotc.core.Denotations$SingleDenotation.goForward$1(Denotations.scala:803)
	at dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:852)
	at dotty.tools.dotc.core.Denotations$SingleDenotation.goForward$1(Denotations.scala:823)
	at dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:852)
	at dotty.tools.dotc.core.Denotations$SingleDenotation.goForward$1(Denotations.scala:823)
	at dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:852)
	at dotty.tools.dotc.core.Symbols$Symbol.recomputeDenot(Symbols.scala:119)
	at dotty.tools.dotc.core.Symbols$Symbol.computeDenot(Symbols.scala:113)
	at dotty.tools.dotc.core.Symbols$Symbol.denot(Symbols.scala:106)
	at dotty.tools.dotc.core.Symbols$.toDenot(Symbols.scala:487)
	at dotty.tools.dotc.transform.GenericSignatures$.fullNameInSig$1(GenericSignatures.scala:116)
	at dotty.tools.dotc.transform.GenericSignatures$.classSig$2(GenericSignatures.scala:165)
	at dotty.tools.dotc.transform.GenericSignatures$.jsig$1(GenericSignatures.scala:227)
	at dotty.tools.dotc.transform.GenericSignatures$.boxedSig$1(GenericSignatures.scala:66)
	at dotty.tools.dotc.transform.GenericSignatures$.argSig$1(GenericSignatures.scala:139)
	at dotty.tools.dotc.transform.GenericSignatures$.classSig$1$$anonfun$1(GenericSignatures.scala:171)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.List.foreach(List.scala:333)
	at dotty.tools.dotc.transform.GenericSignatures$.classSig$2(GenericSignatures.scala:171)
	at dotty.tools.dotc.transform.GenericSignatures$.jsig$1(GenericSignatures.scala:227)
	at dotty.tools.dotc.transform.GenericSignatures$.methodResultSig$1(GenericSignatures.scala:104)
	at dotty.tools.dotc.transform.GenericSignatures$.jsig$1(GenericSignatures.scala:265)
	at dotty.tools.dotc.transform.GenericSignatures$.javaSig0(GenericSignatures.scala:299)
	at dotty.tools.dotc.transform.GenericSignatures$.javaSig(GenericSignatures.scala:38)
	at dotty.tools.backend.jvm.BCodeHelpers.dotty$tools$backend$jvm$BCodeHelpers$$getGenericSignatureHelper(BCodeHelpers.scala:863)
	at dotty.tools.backend.jvm.BCodeHelpers.dotty$tools$backend$jvm$BCodeHelpers$$getStaticForwarderGenericSignature(BCodeHelpers.scala:927)
	at dotty.tools.backend.jvm.BCodeHelpers$BCForwardersGen.addForwarder(BCodeHelpers.scala:522)
	at dotty.tools.backend.jvm.BCodeHelpers$BCForwardersGen.addForwarders$$anonfun$2(BCodeHelpers.scala:593)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.List.foreach(List.scala:333)
	at dotty.tools.backend.jvm.BCodeHelpers$BCForwardersGen.addForwarders(BCodeHelpers.scala:595)
	at dotty.tools.backend.jvm.BCodeHelpers$BCForwardersGen.addForwarders$(BCodeHelpers.scala:499)
	at dotty.tools.backend.jvm.BCodeHelpers$JCommonBuilder.addForwarders(BCodeHelpers.scala:653)
	at dotty.tools.backend.jvm.BCodeHelpers$JMirrorBuilder.genMirrorClass(BCodeHelpers.scala:701)
	at dotty.tools.backend.jvm.GenBCodePipeline$Worker1.visit(GenBCode.scala:218)
	at dotty.tools.backend.jvm.GenBCodePipeline$Worker1.run(GenBCode.scala:192)
	at dotty.tools.backend.jvm.GenBCodePipeline.buildAndSendToDisk(GenBCode.scala:531)
	at dotty.tools.backend.jvm.GenBCodePipeline.run(GenBCode.scala:497)
	at dotty.tools.backend.jvm.GenBCode.run(GenBCode.scala:58)
	at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:296)
	at scala.collection.immutable.List.map(List.scala:246)
	at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:297)
	at dotty.tools.backend.jvm.GenBCode.runOn(GenBCode.scala:62)
	at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:180)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
	at dotty.tools.dotc.Run.runPhases$5(Run.scala:190)
	at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:198)
	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:64)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:205)
	at dotty.tools.dotc.Run.compileSources(Run.scala:142)
	at dotty.tools.dotc.Run.compile(Run.scala:124)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
	at dotty.tools.dotc.Driver.process(Driver.scala:195)
	at dotty.tools.dotc.Main.process(Main.scala)
	at xsbt.CachedCompilerImpl.run(CachedCompilerImpl.java:69)
	at xsbt.CompilerInterface.run(CompilerInterface.java:41)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sbt.internal.inc.AnalyzingCompiler.call(AnalyzingCompiler.scala:248)
	at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:122)
	at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:95)
	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:91)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
	at sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:186)
	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3(MixedAnalyzingCompiler.scala:82)
	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3$adapted(MixedAnalyzingCompiler.scala:77)
	at sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:215)
	at sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:77)
	at sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:146)
	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:343)
	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:343)
	at sbt.internal.inc.Incremental$.doCompile(Incremental.scala:120)
	at sbt.internal.inc.Incremental$.$anonfun$compile$4(Incremental.scala:100)
	at sbt.internal.inc.IncrementalCommon.recompileClasses(IncrementalCommon.scala:180)
	at sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:98)
	at sbt.internal.inc.Incremental$.$anonfun$compile$3(Incremental.scala:102)
	at sbt.internal.inc.Incremental$.manageClassfiles(Incremental.scala:155)
	at sbt.internal.inc.Incremental$.compile(Incremental.scala:92)
	at sbt.internal.inc.IncrementalCompile$.apply(Compile.scala:75)
	at sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:348)
	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:301)
	at sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:168)
	at sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:248)
	at sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:74)
	at sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:1765)
	at sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:1738)
	at scala.Function1.$anonfun$compose$1(Function1.scala:49)
	at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
	at sbt.std.Transform$$anon$4.work(Transform.scala:67)
	at sbt.Execute.$anonfun$submit$2(Execute.scala:281)
	at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19)
	at sbt.Execute.work(Execute.scala:290)
	at sbt.Execute.$anonfun$submit$1(Execute.scala:281)
	at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
	at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
@griggt
Copy link
Contributor

griggt commented Sep 30, 2020

An even simpler example with the same error:

import com.twitter.finagle.liveness.FailureAccrualFactory

trait A {
  def p: FailureAccrualFactory.Param
}

Compilation fails on 0.26.0 and newer.

@b-studios
Copy link
Contributor

@griggt
Copy link
Contributor

griggt commented Sep 30, 2020

Don't know if it's relevant but the companion object for FailureAccrualFactory.Param has a private[finagle] access modifier. By contrast, NackAdmissionFilter and BackupRequestFilter have the same sort of pattern with their Param trait but with a public companion object, and they don't have an issue, e.g.

import com.twitter.finagle.filter._
import com.twitter.finagle.client._

trait A {
  def p: NackAdmissionFilter.Param
  def q: BackupRequestFilter.Param
}

compiles successfully.

https://github.com/twitter/finagle/blob/34167989a6dc964e24e20212516fba89fa58bb23/finagle-core/src/main/scala/com/twitter/finagle/client/BackupRequestFilter.scala#L72-L82

https://github.com/twitter/finagle/blob/34167989a6dc964e24e20212516fba89fa58bb23/finagle-core/src/main/scala/com/twitter/finagle/filter/NackAdmissionFilter.scala#L61-L80

@griggt
Copy link
Contributor

griggt commented Sep 30, 2020

Upon further inspection, I believe the issue may be caused by public "factory" methods defined with the same name as the trait/companion:

https://github.com/twitter/finagle/blob/d2e7485782faeada129d43d7511167c31811df81/finagle-core/src/main/scala/com/twitter/finagle/liveness/FailureAccrualFactory.scala#L129

@DieBauer
Copy link
Contributor Author

@griggt I indeed tried to reproduce this way, but when defining this class in dotty, the error doesn't occur. So maybe it's in the scala 2 - dotty interop.

@griggt
Copy link
Contributor

griggt commented Sep 30, 2020

Standalone reproducer:

//src/dotty-issues/i9916/standalone/lib$ cat build.sbt
scalaVersion := "2.13.3"
name := "i9916-lib"
organization := "io.grigg"
version := "1.0"

//src/dotty-issues/i9916/standalone/lib$ cat src/main/scala/Lib.scala 
package i9916

object Lib {
  trait P
  private object P
  def P(x: Int): P = ???
}

//src/dotty-issues/i9916/standalone/lib$ sbt publishLocal
//src/dotty-issues/i9916/standalone/test$ cat build.sbt
scalaVersion := "0.28.0-bin-20200928-09eaed7-NIGHTLY"
name := "i9916-test"
version := "0.1"
libraryDependencies += ("io.grigg" %% "i9916-lib" % "1.0").withDottyCompat(scalaVersion.value)

//src/dotty-issues/i9916/standalone/test$ cat src/main/scala/Test.scala 
import i9916.Lib

trait X {
  def p: Lib.P
}

//src/dotty-issues/i9916/standalone/test$ sbt compile 
Compiler output -- click to expand
[info] Compiling 1 Scala source to /src/dotty-issues/i9916/standalone/test/target/scala-0.28/classes ...
Error while emitting Test.scala
[info] exception occurred while compiling /src/dotty-issues/i9916/standalone/test/src/main/scala/Test.scala
scala.MatchError: NoType (of class dotty.tools.dotc.core.Types$NoType$) while compiling /src/dotty-issues/i9916/standalone/test/src/main/scala/Test.scala
[error] ## Exception when compiling 1 sources to /src/dotty-issues/i9916/standalone/test/target/scala-0.28/classes
[error] scala.MatchError: NoType (of class dotty.tools.dotc.core.Types$NoType$)
[error] dotty.tools.dotc.core.SymDenotations$SymDenotation.sourceOfSelf$1(SymDenotations.scala:1007)
[error] dotty.tools.dotc.core.SymDenotations$SymDenotation.sourceModule(SymDenotations.scala:1009)
[error] dotty.tools.dotc.core.TypeErasure.dotty$tools$dotc$core$TypeErasure$$apply(TypeErasure.scala:504)
[error] dotty.tools.dotc.core.TypeErasure.eraseInfo(TypeErasure.scala:552)
[error] dotty.tools.dotc.core.TypeErasure$.transformInfo(TypeErasure.scala:202)
[error] dotty.tools.dotc.transform.Erasure.transform(Erasure.scala:82)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.goForward$1(Denotations.scala:803)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:852)
[error] dotty.tools.dotc.core.Symbols$Symbol.recomputeDenot(Symbols.scala:119)
[error] dotty.tools.dotc.core.Symbols$Symbol.computeDenot(Symbols.scala:113)
[error] dotty.tools.dotc.core.Symbols$Symbol.denot(Symbols.scala:106)
[error] dotty.tools.dotc.core.Symbols$.toDenot(Symbols.scala:487)
[error] dotty.tools.dotc.core.SymDenotations$ClassDenotation.registeredCompanion(SymDenotations.scala:2146)
[error] dotty.tools.dotc.core.SymDenotations$SymDenotation.copySymDenotation(SymDenotations.scala:1484)
[error] dotty.tools.dotc.transform.Flatten.transformSym(Flatten.scala:35)
[error] dotty.tools.dotc.core.DenotTransformers$SymTransformer.transform(DenotTransformers.scala:70)
[error] dotty.tools.dotc.core.DenotTransformers$SymTransformer.transform$(DenotTransformers.scala:65)
[error] dotty.tools.dotc.transform.Flatten.transform(Flatten.scala:14)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.goForward$1(Denotations.scala:803)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:852)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.goForward$1(Denotations.scala:823)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:852)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.goForward$1(Denotations.scala:823)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:852)
[error] dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2056)
[error] dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2019)
[error] dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2007)
[error] dotty.tools.backend.jvm.BCodeHelpers.dotty$tools$backend$jvm$BCodeHelpers$$typeToTypeKind(BCodeHelpers.scala:819)
[error] dotty.tools.backend.jvm.BCodeHelpers$BCInnerClassGen.toTypeKind(BCodeHelpers.scala:299)
[error] dotty.tools.backend.jvm.BCodeHelpers$BCInnerClassGen.toTypeKind$(BCodeHelpers.scala:210)
[error] dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.toTypeKind(BCodeSkelBuilder.scala:62)
[error] dotty.tools.backend.jvm.BCodeHelpers$BCInnerClassGen.asmMethodType(BCodeHelpers.scala:283)
[error] dotty.tools.backend.jvm.BCodeHelpers$BCInnerClassGen.asmMethodType$(BCodeHelpers.scala:210)
[error] dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.asmMethodType(BCodeSkelBuilder.scala:62)
[error] dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.genDefDef(BCodeSkelBuilder.scala:673)
[error] dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen(BCodeSkelBuilder.scala:591)
[error] dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen$$anonfun$1(BCodeSkelBuilder.scala:597)
[error] dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.immutable.List.foreach(List.scala:333)
[error] dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen(BCodeSkelBuilder.scala:597)
[error] dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.genPlainClass(BCodeSkelBuilder.scala:223)
[error] dotty.tools.backend.jvm.GenBCodePipeline$Worker1.visit(GenBCode.scala:229)
[error] dotty.tools.backend.jvm.GenBCodePipeline$Worker1.run(GenBCode.scala:194)
[error] dotty.tools.backend.jvm.GenBCodePipeline.buildAndSendToDisk(GenBCode.scala:533)
[error] dotty.tools.backend.jvm.GenBCodePipeline.run(GenBCode.scala:499)
[error] dotty.tools.backend.jvm.GenBCode.run(GenBCode.scala:60)
[error] dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:296)
[error] scala.collection.immutable.List.map(List.scala:246)
[error] dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:297)
[error] dotty.tools.backend.jvm.GenBCode.runOn(GenBCode.scala:64)
[error] dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:185)
[error] dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
[error] dotty.tools.dotc.Run.runPhases$5(Run.scala:195)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:203)
[error] dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:63)
[error] dotty.tools.dotc.Run.compileUnits(Run.scala:210)
[error] dotty.tools.dotc.Run.compileSources(Run.scala:147)
[error] dotty.tools.dotc.Run.compile(Run.scala:129)
[error] dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
[error] dotty.tools.dotc.Driver.process(Driver.scala:195)
[error] dotty.tools.dotc.Main.process(Main.scala)
[error] xsbt.CachedCompilerImpl.run(CachedCompilerImpl.java:69)
[error] xsbt.CompilerInterface.run(CompilerInterface.java:41)
[error] java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] java.base/java.lang.reflect.Method.invoke(Method.java:566)
[error] sbt.internal.inc.AnalyzingCompiler.call(AnalyzingCompiler.scala:248)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:122)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:95)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:91)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:186)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3(MixedAnalyzingCompiler.scala:82)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3$adapted(MixedAnalyzingCompiler.scala:77)
[error] sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:215)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:77)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:146)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:343)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:343)
[error] sbt.internal.inc.Incremental$.doCompile(Incremental.scala:120)
[error] sbt.internal.inc.Incremental$.$anonfun$compile$4(Incremental.scala:100)
[error] sbt.internal.inc.IncrementalCommon.recompileClasses(IncrementalCommon.scala:180)
[error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:98)
[error] sbt.internal.inc.Incremental$.$anonfun$compile$3(Incremental.scala:102)
[error] sbt.internal.inc.Incremental$.manageClassfiles(Incremental.scala:155)
[error] sbt.internal.inc.Incremental$.compile(Incremental.scala:92)
[error] sbt.internal.inc.IncrementalCompile$.apply(Compile.scala:75)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:348)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:301)
[error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:168)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:248)
[error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:74)
[error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:1765)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:1738)
[error] scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error] sbt.std.Transform$$anon$4.work(Transform.scala:67)
[error] sbt.Execute.$anonfun$submit$2(Execute.scala:281)
[error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19)
[error] sbt.Execute.work(Execute.scala:290)
[error] sbt.Execute.$anonfun$submit$1(Execute.scala:281)
[error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
[error] sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[error] java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[error] java.base/java.lang.Thread.run(Thread.java:834)
[error]            
[error] scala.MatchError: NoType (of class dotty.tools.dotc.core.Types$NoType$)
[error] 	at dotty.tools.dotc.core.SymDenotations$SymDenotation.sourceOfSelf$1(SymDenotations.scala:1007)
[error] 	at dotty.tools.dotc.core.SymDenotations$SymDenotation.sourceModule(SymDenotations.scala:1009)
[error] 	at dotty.tools.dotc.core.TypeErasure.dotty$tools$dotc$core$TypeErasure$$apply(TypeErasure.scala:504)
[error] 	at dotty.tools.dotc.core.TypeErasure.eraseInfo(TypeErasure.scala:552)
[error] 	at dotty.tools.dotc.core.TypeErasure$.transformInfo(TypeErasure.scala:202)
[error] 	at dotty.tools.dotc.transform.Erasure.transform(Erasure.scala:82)
[error] 	at dotty.tools.dotc.core.Denotations$SingleDenotation.goForward$1(Denotations.scala:803)
[error] 	at dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:852)
[error] 	at dotty.tools.dotc.core.Symbols$Symbol.recomputeDenot(Symbols.scala:119)
[error] 	at dotty.tools.dotc.core.Symbols$Symbol.computeDenot(Symbols.scala:113)
[error] 	at dotty.tools.dotc.core.Symbols$Symbol.denot(Symbols.scala:106)
[error] 	at dotty.tools.dotc.core.Symbols$.toDenot(Symbols.scala:487)
[error] 	at dotty.tools.dotc.core.SymDenotations$ClassDenotation.registeredCompanion(SymDenotations.scala:2146)
[error] 	at dotty.tools.dotc.core.SymDenotations$SymDenotation.copySymDenotation(SymDenotations.scala:1484)
[error] 	at dotty.tools.dotc.transform.Flatten.transformSym(Flatten.scala:35)
[error] 	at dotty.tools.dotc.core.DenotTransformers$SymTransformer.transform(DenotTransformers.scala:70)
[error] 	at dotty.tools.dotc.core.DenotTransformers$SymTransformer.transform$(DenotTransformers.scala:65)
[error] 	at dotty.tools.dotc.transform.Flatten.transform(Flatten.scala:14)
[error] 	at dotty.tools.dotc.core.Denotations$SingleDenotation.goForward$1(Denotations.scala:803)
[error] 	at dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:852)
[error] 	at dotty.tools.dotc.core.Denotations$SingleDenotation.goForward$1(Denotations.scala:823)
[error] 	at dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:852)
[error] 	at dotty.tools.dotc.core.Denotations$SingleDenotation.goForward$1(Denotations.scala:823)
[error] 	at dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:852)
[error] 	at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:2056)
[error] 	at dotty.tools.dotc.core.Types$NamedType.denot(Types.scala:2019)
[error] 	at dotty.tools.dotc.core.Types$NamedType.info(Types.scala:2007)
[error] 	at dotty.tools.backend.jvm.BCodeHelpers.dotty$tools$backend$jvm$BCodeHelpers$$typeToTypeKind(BCodeHelpers.scala:819)
[error] 	at dotty.tools.backend.jvm.BCodeHelpers$BCInnerClassGen.toTypeKind(BCodeHelpers.scala:299)
[error] 	at dotty.tools.backend.jvm.BCodeHelpers$BCInnerClassGen.toTypeKind$(BCodeHelpers.scala:210)
[error] 	at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.toTypeKind(BCodeSkelBuilder.scala:62)
[error] 	at dotty.tools.backend.jvm.BCodeHelpers$BCInnerClassGen.asmMethodType(BCodeHelpers.scala:283)
[error] 	at dotty.tools.backend.jvm.BCodeHelpers$BCInnerClassGen.asmMethodType$(BCodeHelpers.scala:210)
[error] 	at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.asmMethodType(BCodeSkelBuilder.scala:62)
[error] 	at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.genDefDef(BCodeSkelBuilder.scala:673)
[error] 	at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen(BCodeSkelBuilder.scala:591)
[error] 	at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen$$anonfun$1(BCodeSkelBuilder.scala:597)
[error] 	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] 	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] 	at scala.collection.immutable.List.foreach(List.scala:333)
[error] 	at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen(BCodeSkelBuilder.scala:597)
[error] 	at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.genPlainClass(BCodeSkelBuilder.scala:223)
[error] 	at dotty.tools.backend.jvm.GenBCodePipeline$Worker1.visit(GenBCode.scala:229)
[error] 	at dotty.tools.backend.jvm.GenBCodePipeline$Worker1.run(GenBCode.scala:194)
[error] 	at dotty.tools.backend.jvm.GenBCodePipeline.buildAndSendToDisk(GenBCode.scala:533)
[error] 	at dotty.tools.backend.jvm.GenBCodePipeline.run(GenBCode.scala:499)
[error] 	at dotty.tools.backend.jvm.GenBCode.run(GenBCode.scala:60)
[error] 	at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:296)
[error] 	at scala.collection.immutable.List.map(List.scala:246)
[error] 	at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:297)
[error] 	at dotty.tools.backend.jvm.GenBCode.runOn(GenBCode.scala:64)
[error] 	at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:185)
[error] 	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] 	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] 	at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
[error] 	at dotty.tools.dotc.Run.runPhases$5(Run.scala:195)
[error] 	at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:203)
[error] 	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] 	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:63)
[error] 	at dotty.tools.dotc.Run.compileUnits(Run.scala:210)
[error] 	at dotty.tools.dotc.Run.compileSources(Run.scala:147)
[error] 	at dotty.tools.dotc.Run.compile(Run.scala:129)
[error] 	at dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
[error] 	at dotty.tools.dotc.Driver.process(Driver.scala:195)
[error] 	at dotty.tools.dotc.Main.process(Main.scala)
[error] 	at xsbt.CachedCompilerImpl.run(CachedCompilerImpl.java:69)
[error] 	at xsbt.CompilerInterface.run(CompilerInterface.java:41)
[error] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] 	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[error] 	at sbt.internal.inc.AnalyzingCompiler.call(AnalyzingCompiler.scala:248)
[error] 	at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:122)
[error] 	at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:95)
[error] 	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:91)
[error] 	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] 	at sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:186)
[error] 	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3(MixedAnalyzingCompiler.scala:82)
[error] 	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3$adapted(MixedAnalyzingCompiler.scala:77)
[error] 	at sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:215)
[error] 	at sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:77)
[error] 	at sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:146)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:343)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:343)
[error] 	at sbt.internal.inc.Incremental$.doCompile(Incremental.scala:120)
[error] 	at sbt.internal.inc.Incremental$.$anonfun$compile$4(Incremental.scala:100)
[error] 	at sbt.internal.inc.IncrementalCommon.recompileClasses(IncrementalCommon.scala:180)
[error] 	at sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:98)
[error] 	at sbt.internal.inc.Incremental$.$anonfun$compile$3(Incremental.scala:102)
[error] 	at sbt.internal.inc.Incremental$.manageClassfiles(Incremental.scala:155)
[error] 	at sbt.internal.inc.Incremental$.compile(Incremental.scala:92)
[error] 	at sbt.internal.inc.IncrementalCompile$.apply(Compile.scala:75)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:348)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:301)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:168)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:248)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:74)
[error] 	at sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:1765)
[error] 	at sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:1738)
[error] 	at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] 	at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error] 	at sbt.std.Transform$$anon$4.work(Transform.scala:67)
[error] 	at sbt.Execute.$anonfun$submit$2(Execute.scala:281)
[error] 	at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19)
[error] 	at sbt.Execute.work(Execute.scala:290)
[error] 	at sbt.Execute.$anonfun$submit$1(Execute.scala:281)
[error] 	at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
[error] 	at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[error] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[error] 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[error] 	at java.base/java.lang.Thread.run(Thread.java:834)
[error] (Compile / compileIncremental) scala.MatchError: NoType (of class dotty.tools.dotc.core.Types$NoType$)

@griggt
Copy link
Contributor

griggt commented Sep 30, 2020

@DieBauer Yes, the issue only arises when the library is compiled with Scala 2.

@griggt
Copy link
Contributor

griggt commented Sep 30, 2020

The regression appears to have been introduced by e88c5b7 in #8652.

@smarter smarter changed the title Using third party withDottyCompat crashes with NoType Referring to a Scala 2 trait whose companion object is private leads to a crash when a method with the same name also exists Oct 1, 2020
@DieBauer
Copy link
Contributor Author

DieBauer commented Oct 1, 2020

BTW the private part of object doesn't matter:

object Lib {
  trait P
  object P
  def P(x: Int): P = ???
}

also fails when compiled with scala 2.13 and used in dotty.

@smarter smarter changed the title Referring to a Scala 2 trait whose companion object is private leads to a crash when a method with the same name also exists Referring to a Scala 2 trait which has a companion object leads to a crash when a method with the same name also exists Oct 1, 2020
@griggt
Copy link
Contributor

griggt commented Oct 1, 2020

Just curious, does the Dotty testing framework support regression tests for this sort of issue, i.e. where the test depends on some code compiled by Scala 2.x?

@smarter
Copy link
Member

smarter commented Oct 1, 2020

we use sbt scripted tests for this purpose: https://github.com/lampepfl/dotty/tree/master/sbt-dotty/sbt-test/scala2-compat (which is not ideal since they're slow to run, but it's better than nothing).

@DieBauer
Copy link
Contributor Author

DieBauer commented Oct 9, 2020

I can confirm that reverting e88c5b7 resolves the issue.
/cc @sjrd

griggt added a commit to griggt/dotty that referenced this issue Oct 9, 2020
griggt added a commit to griggt/dotty that referenced this issue Oct 9, 2020
smarter added a commit to dotty-staging/dotty that referenced this issue Oct 14, 2020
smarter added a commit to dotty-staging/dotty that referenced this issue Oct 14, 2020
odersky added a commit that referenced this issue Oct 27, 2020
Fix #9916: Properly unpickle non-toplevel Scala 2 objects
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants