summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/BytecodeWriters.scala6
-rw-r--r--src/compiler/scala/tools/nsc/io/Path.scala8
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala10
-rw-r--r--test/files/neg/overloaded-implicit.flags2
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