Skip to content

Using an implicit function type in Reporter breaks the build #6946

Closed
@odersky

Description

@odersky

Add the following to Reporters:

  def reportsErrorsFor(op: given Context => Unit) given Context: Boolean = {
    val initial = errorCount
    op
    errorCount > initial
  }

Do sbt clean; sbt test. This gives:

[info] Done packaging.
[error] ## Exception when compiling 9 sources to /Users/odersky/workspace/dotty/sbt-bridge/src/target/classes
[error] Type scala.ImplicitFunction1 not present
[error] sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117)
[error] sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125)
[error] sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
[error] sun.reflect.generics.repository.ConstructorRepository.getParameterTypes(ConstructorRepository.java:94)
[error] java.lang.reflect.Executable.getGenericParameterTypes(Executable.java:283)
[error] java.lang.reflect.Method.getGenericParameterTypes(Method.java:283)
[error] sbt.internal.inc.ClassToAPI$.parameterTypes(ClassToAPI.scala:566)
[error] sbt.internal.inc.ClassToAPI$.methodToDef(ClassToAPI.scala:318)
[error] sbt.internal.inc.ClassToAPI$.$anonfun$structure$1(ClassToAPI.scala:182)
[error] sbt.internal.inc.ClassToAPI$.$anonfun$mergeMap$1(ClassToAPI.scala:400)
[error] scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:240)
[error] scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:32)
[error] scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:29)
[error] scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:37)
[error] scala.collection.TraversableLike.flatMap(TraversableLike.scala:240)
[error] scala.collection.TraversableLike.flatMap$(TraversableLike.scala:237)
[error] scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
[error] sbt.internal.inc.ClassToAPI$.merge(ClassToAPI.scala:411)
[error] sbt.internal.inc.ClassToAPI$.mergeMap(ClassToAPI.scala:400)
[error] sbt.internal.inc.ClassToAPI$.structure(ClassToAPI.scala:182)
[error] sbt.internal.inc.ClassToAPI$.x$2$lzycompute$1(ClassToAPI.scala:133)
[error] sbt.internal.inc.ClassToAPI$.x$2$1(ClassToAPI.scala:133)
[error] sbt.internal.inc.ClassToAPI$.instance$lzycompute$1(ClassToAPI.scala:133)
[error] sbt.internal.inc.ClassToAPI$.instance$1(ClassToAPI.scala:133)
[error] sbt.internal.inc.ClassToAPI$.$anonfun$toDefinitions0$1(ClassToAPI.scala:140)
[error] xsbti.api.SafeLazyProxy$$anon$1.get(SafeLazyProxy.scala:26)
[error] xsbti.api.SafeLazy$Impl.get(SafeLazy.java:58)
[error] sbt.internal.inc.ClassToAPI$.$anonfun$process$2(ClassToAPI.scala:29)
[error] scala.collection.immutable.List.foreach(List.scala:388)
[error] scala.collection.generic.TraversableForwarder.foreach(TraversableForwarder.scala:34)
[error] scala.collection.generic.TraversableForwarder.foreach$(TraversableForwarder.scala:34)
[error] scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:43)
[error] sbt.internal.inc.ClassToAPI$.process(ClassToAPI.scala:29)
[error] sbt.internal.inc.javac.AnalyzingJavaCompiler.readAPI$1(AnalyzingJavaCompiler.scala:143)
[error] sbt.internal.inc.javac.AnalyzingJavaCompiler.$anonfun$compile$20(AnalyzingJavaCompiler.scala:161)
[error] sbt.internal.inc.classfile.Analyze$.readInheritanceDependencies$1(Analyze.scala:148)
[error] sbt.internal.inc.classfile.Analyze$.$anonfun$apply$14(Analyze.scala:154)
[error] sbt.internal.inc.classfile.Analyze$.$anonfun$apply$14$adapted(Analyze.scala:81)
[error] scala.collection.TraversableLike$WithFilter.$anonfun$foreach$1(TraversableLike.scala:788)
[error] scala.collection.mutable.HashMap.$anonfun$foreach$1(HashMap.scala:145)
[error] scala.collection.mutable.HashTable.foreachEntry(HashTable.scala:235)
[error] scala.collection.mutable.HashTable.foreachEntry$(HashTable.scala:228)

If we make op have a normal function type as is done in #6898 it works.
We have elsewhere in the compiler implicit function types like this. So far I have seen a problem only if such types are in Reporter. The stack trace seems to suggest some reflective magic that goes wrong.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions