diff options
4 files changed, 16 insertions, 10 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BytecodeWriters.scala b/src/compiler/scala/tools/nsc/backend/jvm/BytecodeWriters.scala index 3197652c2f..faf86d37f6 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/BytecodeWriters.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/BytecodeWriters.scala @@ -8,7 +8,7 @@ package backend.jvm import ch.epfl.lamp.fjbg._ import java.io.{ DataOutputStream, OutputStream } -import scala.tools.nsc.io.Path +import scala.tools.nsc.io.{ Path, Directory } import scala.tools.nsc.util.ScalaClassLoader import scala.tools.util.Javap import java.util.jar.{ JarEntry, JarOutputStream } @@ -57,7 +57,7 @@ trait BytecodeWriters { } trait JavapBytecodeWriter extends BytecodeWriter { - val baseDir = Path(settings.Ygenjavap.value) + val baseDir = Directory(settings.Ygenjavap.value).createDirectory() def emitJavap(bytes: Array[Byte], javapFile: io.File) { val pw = javapFile.printWriter() @@ -73,7 +73,7 @@ trait BytecodeWriters { val bytes = getFile(sym, jclass, ".class").toByteArray val segments = jclass.getName().split("[./]") - val javapFile = segments.foldLeft(baseDir)(_ / _) changeExtension "javap" toFile + val javapFile = segments.foldLeft(baseDir: Path)(_ / _) changeExtension "javap" toFile; javapFile.parent.createDirectory() emitJavap(bytes, javapFile) diff --git a/src/compiler/scala/tools/nsc/io/Path.scala b/src/compiler/scala/tools/nsc/io/Path.scala index ebc568cfe6..9efff089ba 100644 --- a/src/compiler/scala/tools/nsc/io/Path.scala +++ b/src/compiler/scala/tools/nsc/io/Path.scala @@ -194,8 +194,12 @@ class Path private[io] (val jfile: JFile) { def stripExtension: String = name stripSuffix ("." + extension) // returns the Path with the extension. def addExtension(ext: String): Path = Path(path + "." + ext) - // changes the existing extension out for a new one - def changeExtension(ext: String): Path = Path(path stripSuffix extension) addExtension ext + // changes the existing extension out for a new one, or adds it + // if the current path has none. + def changeExtension(ext: String): Path = ( + if (extension == "") addExtension(ext) + else Path(path.stripSuffix(extension) + ext) + ) // conditionally execute def ifFile[T](f: File => T): Option[T] = if (isFile) Some(f(toFile)) else None diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala index d4ec27a6c0..9ca70bbefb 100644 --- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala +++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala @@ -116,10 +116,12 @@ abstract class RefChecks extends InfoTransform { } } } - clazz.info.decls filter (x => x.isImplicit && x.typeParams.nonEmpty) foreach { sym => - val alts = clazz.info.decl(sym.name).alternatives - if (alts.size > 1) - alts foreach (x => unit.warning(x.pos, "parameterized overloaded implicit methods are not visible as view bounds")) + if (settings.lint.value) { + clazz.info.decls filter (x => x.isImplicit && x.typeParams.nonEmpty) foreach { sym => + val alts = clazz.info.decl(sym.name).alternatives + if (alts.size > 1) + alts foreach (x => unit.warning(x.pos, "parameterized overloaded implicit methods are not visible as view bounds")) + } } } diff --git a/test/files/neg/overloaded-implicit.flags b/test/files/neg/overloaded-implicit.flags index 85d8eb2ba2..7949c2afa2 100644 --- a/test/files/neg/overloaded-implicit.flags +++ b/test/files/neg/overloaded-implicit.flags @@ -1 +1 @@ --Xfatal-warnings +-Xlint -Xfatal-warnings |