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

Scoverage's compiler can't handle 'final' in traits (scala 2.12, scoverage 1.5.0) #203

Closed
andrei-l opened this issue Nov 15, 2016 · 2 comments

Comments

@andrei-l
Copy link

andrei-l commented Nov 15, 2016

Unfortunately, scoverage's compiler fails on processing final fields in traits. Works fine in classes & objects. It prints some strange error which makes it rather hard to find the place where it failed.

scala.reflect.internal.Types$TypeError: type mismatch;
 found   : String
 required: String("World")
        at scala.tools.nsc.typechecker.Contexts$ThrowingReporter.handleError(Contexts.scala:1374)
        at scala.tools.nsc.typechecker.Contexts$ContextReporter.issue(Contexts.scala:1226)
        at scala.tools.nsc.typechecker.Contexts$Context.issue(Contexts.scala:575)
        at scala.tools.nsc.typechecker.ContextErrors$ErrorUtils$.issueTypeError(ContextErrors.scala:106)
        at scala.tools.nsc.typechecker.ContextErrors$ErrorUtils$.issueNormalTypeError(ContextErrors.scala:99)
        at scala.tools.nsc.typechecker.ContextErrors$TyperContextErrors$TyperErrorGen$.AdaptTypeError(ContextErrors.scala:219)
        at scala.tools.nsc.typechecker.Typers$Typer.adaptMismatchedSkolems$1(Typers.scala:1044)
        at scala.tools.nsc.typechecker.Typers$Typer.lastTry$1(Typers.scala:1055)
        at scala.tools.nsc.typechecker.Typers$Typer.adaptExprNotFunMode$1(Typers.scala:1105)
        at scala.tools.nsc.typechecker.Typers$Typer.vanillaAdapt$1(Typers.scala:1151)
        at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1195)
        at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5514)
        at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5530)
        at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5474)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5478)
        at scala.tools.nsc.typechecker.Typers$Typer.transformedOrTyped(Typers.scala:5709)
        at scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:2270)
        at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5412)
        at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5463)
        at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5500)
        at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5530)
        at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5474)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5478)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5555)
        at scala.tools.nsc.typechecker.Typers$Typer.typedPos(Typers.scala:5562)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.typedPos(Fields.scala:514)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.mkAccessor(Fields.scala:520)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.transform(Fields.scala:711)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.transformTermsAtExprOwner(Fields.scala:745)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.$anonfun$transformStats$3(Fields.scala:758)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.transformStats(Fields.scala:758)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.transformStats(Fields.scala:513)
        at scala.reflect.internal.Trees.itransform(Trees.scala:1408)
        at scala.reflect.internal.Trees.itransform$(Trees.scala:1340)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.super$transform(TypingTransformers.scala:40)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.$anonfun$transform$1(TypingTransformers.scala:40)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:25)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.transform(Fields.scala:737)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.transform(Fields.scala:513)
        at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2563)
        at scala.reflect.internal.Trees.$anonfun$itransform$4(Trees.scala:1412)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:25)
        at scala.reflect.internal.Trees.itransform(Trees.scala:1411)
        at scala.reflect.internal.Trees.itransform$(Trees.scala:1340)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.transform(Fields.scala:737)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.$anonfun$transformStats$4(Fields.scala:758)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.transformStats(Fields.scala:758)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.transformStats(Fields.scala:513)
        at scala.reflect.internal.Trees.$anonfun$itransform$7(Trees.scala:1430)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:25)
        at scala.reflect.internal.Trees.itransform(Trees.scala:1430)
        at scala.reflect.internal.Trees.itransform$(Trees.scala:1340)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.super$transform(TypingTransformers.scala:40)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.$anonfun$transform$2(TypingTransformers.scala:42)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:25)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.transform(Fields.scala:737)
        at scala.tools.nsc.transform.Fields$FieldsTransformer.transform(Fields.scala:513)
        at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:140)
        at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
        at scala.tools.nsc.Global$GlobalPhase.$anonfun$applyPhase$1(Global.scala:402)
        at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:395)
        at scala.tools.nsc.Global$GlobalPhase.$anonfun$run$1(Global.scala:366)
        at scala.tools.nsc.Global$GlobalPhase.$anonfun$run$1$adapted(Global.scala:366)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:932)
        at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:366)
        at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1404)
        at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1389)
        at scala.tools.nsc.Global$Run.compileSources(Global.scala:1384)
        at scala.tools.nsc.Global$Run.compile(Global.scala:1478)
        at xsbt.CachedCompiler0.run(CompilerInterface.scala:116)
        at xsbt.CachedCompiler0.run(CompilerInterface.scala:95)
        at xsbt.CompilerInterface.run(CompilerInterface.scala:26)
        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.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:107)
        at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:53)
        at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:47)
        at sbt.compiler.MixedAnalyzingCompiler$$anonfun$compileScala$1$1.apply$mcV$sp(MixedAnalyzingCompiler.scala:50)
        at sbt.compiler.MixedAnalyzingCompiler$$anonfun$compileScala$1$1.apply(MixedAnalyzingCompiler.scala:50)
        at sbt.compiler.MixedAnalyzingCompiler$$anonfun$compileScala$1$1.apply(MixedAnalyzingCompiler.scala:50)
        at sbt.compiler.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:74)
        at sbt.compiler.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:49)
        at sbt.compiler.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:64)
        at sbt.compiler.IC$$anonfun$compileInternal$1.apply(IncrementalCompiler.scala:160)
        at sbt.compiler.IC$$anonfun$compileInternal$1.apply(IncrementalCompiler.scala:160)
        at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:66)
        at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:64)
        at sbt.inc.IncrementalCommon.cycle(IncrementalCommon.scala:32)
        at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:72)
        at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:71)
        at sbt.inc.Incremental$.manageClassfiles(Incremental.scala:99)
        at sbt.inc.Incremental$.compile(Incremental.scala:71)
        at sbt.inc.IncrementalCompile$.apply(Compile.scala:54)
        at sbt.compiler.IC$.compileInternal(IncrementalCompiler.scala:160)
        at sbt.compiler.IC$.incrementalCompile(IncrementalCompiler.scala:138)
        at sbt.Compiler$.compile(Compiler.scala:155)
        at sbt.Compiler$.compile(Compiler.scala:141)
        at sbt.Defaults$.sbt$Defaults$$compileIncrementalTaskImpl(Defaults.scala:879)
        at sbt.Defaults$$anonfun$compileIncrementalTask$1.apply(Defaults.scala:870)
        at sbt.Defaults$$anonfun$compileIncrementalTask$1.apply(Defaults.scala:868)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon$4.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:237)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
        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:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
[error] (compile:compileIncremental) scala.reflect.internal.Types$TypeError: type mismatch;
[error]  found   : String
[error]  required: String("World")

P.S. All was fine in scala 2.11 & scoverage 1.4.0

Attached is the example project: scoverage-compiler-issue.zip
Run with: sbt clean compile coverage test

@gslowikowski
Copy link
Member

We know the issue, we don't know how to fix it yet. I will create issue in scalac-scoverage-plugin project (because it belongs there) with all details I know.

@sksamuel
Copy link
Member

This is fixed in master.

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

No branches or pull requests

3 participants