Skip to content

Commit

Permalink
set "deprecation" and "unchecked" scalac settings correctly in multi-…
Browse files Browse the repository at this point in the history
…module project
  • Loading branch information
jozic authored and mpeltonen committed Sep 6, 2012
1 parent 89e3739 commit e805f3d
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 24 deletions.
6 changes: 3 additions & 3 deletions src/main/scala/org/sbtidea/IdeaModuleDescriptor.scala
Expand Up @@ -38,12 +38,12 @@ class IdeaModuleDescriptor(val imlDir: File, projectRoot: File, val project: Sub
if (env.useProjectFsc) <option name="fsc" value="true" />
}
{
if (env.scalacOptions.contains("-deprecation")) <option name="deprecationWarnings" value="true" />
if (project.scalacOptions.contains("-deprecation")) <option name="deprecationWarnings" value="true" />
}
{
if (env.scalacOptions.contains("-unchecked")) <option name="uncheckedWarnings" value="true" />
if (project.scalacOptions.contains("-unchecked")) <option name="uncheckedWarnings" value="true" />
}
<option name="compilerOptions" value={ env.scalacOptions.mkString(" ") } />
<option name="compilerOptions" value={ project.scalacOptions.mkString(" ") } />
</configuration>
</facet>
{ if (project.webAppPath.isDefined && userEnv.webFacet == true) webFacet() else scala.xml.Null }
Expand Down
7 changes: 2 additions & 5 deletions src/main/scala/org/sbtidea/IdeaProjectDomain.scala
Expand Up @@ -31,15 +31,12 @@ case class Directories(sources: Seq[File], resources: Seq[File], outDir: File) {
case class SubProjectInfo(baseDir: File, name: String, dependencyProjects: List[String], classpathDeps: Seq[(File, Seq[File])], compileDirs: Directories,
testDirs: Directories, libraries: Seq[IdeaModuleLibRef], scalaInstance: ScalaInstance,
ideaGroup: Option[String], webAppPath: Option[File], basePackage: Option[String],
packagePrefix: Option[String],
extraFacets: NodeSeq)
packagePrefix: Option[String], extraFacets: NodeSeq, scalacOptions: Seq[String])

case class IdeaProjectInfo(baseDir: File, name: String, childProjects: List[SubProjectInfo], ideaLibs: List[IdeaLibrary])

case class IdeaUserEnvironment(webFacet: Boolean)

case class IdeaProjectEnvironment(projectJdkName :String, javaLanguageLevel: String,
includeSbtProjectDefinitionModule: Boolean, projectOutputPath: Option[String],
excludedFolders: String, compileWithIdea: Boolean, modulePath: String, useProjectFsc: Boolean,
scalacOptions: Seq[String]) {
}
excludedFolders: String, compileWithIdea: Boolean, modulePath: String, useProjectFsc: Boolean)
6 changes: 3 additions & 3 deletions src/main/scala/org/sbtidea/SbtIdeaModuleMapping.scala
Expand Up @@ -27,7 +27,7 @@ object SbtIdeaModuleMapping {
def allLibraries: Seq[IdeaModuleLibRef] = managedLibraries ++ unmanagedLibraries

/**
* Creates an IDEA library entry for each entry in `externalDependencyClasspath` in `Test` and `Compile.
* Creates an IDEA library entry for each entry in `externalDependencyClasspath` in `Test` and `Compile`.
*
* The result of `update`, `updateClassifiers`, and is used to find the location of the library,
* by default in $HOME/.ivy2/cache
Expand Down Expand Up @@ -56,7 +56,7 @@ object SbtIdeaModuleMapping {
}

/**
* Creates an IDEA library entry for each entry in `unmanagedClasspath` in `Test` and `Compile.
* Creates an IDEA library entry for each entry in `unmanagedClasspath` in `Test` and `Compile`.
*
* If the entry is both in the compile and test scopes, it is only added to the compile scope.
*
Expand Down Expand Up @@ -92,7 +92,7 @@ object SbtIdeaModuleMapping {
}

private def evaluateTask[T](taskKey: sbt.Project.ScopedKey[sbt.Task[T]]) =
EvaluateTask.evaluateTask(buildStruct, taskKey, state, projectRef, false, EvaluateTask.SystemProcessors)
EvaluateTask(buildStruct, taskKey, state, projectRef).map(_._2)
}

private def equivModule(m1: ModuleID, m2: ModuleID, scalaVersion: String) = {
Expand Down
22 changes: 13 additions & 9 deletions src/main/scala/org/sbtidea/SbtIdeaPlugin.scala
Expand Up @@ -89,11 +89,9 @@ object SbtIdeaPlugin extends Plugin {

val projectInfo = IdeaProjectInfo(buildUnit.localBase, name.getOrElse("Unknown"), subProjects, ideaLibs ::: scalaLibs)

val scalacOptions = extracted.runTask(Keys.scalacOptions in Configurations.Compile, state)._2
val env = IdeaProjectEnvironment(projectJdkName = SystemProps.jdkName, javaLanguageLevel = SystemProps.languageLevel,
includeSbtProjectDefinitionModule = true, projectOutputPath = None, excludedFolders = "target",
compileWithIdea = false, modulePath = ".idea_modules", useProjectFsc = !args.contains(NoFsc),
scalacOptions = scalacOptions)
compileWithIdea = false, modulePath = ".idea_modules", useProjectFsc = !args.contains(NoFsc))

val userEnv = IdeaUserEnvironment(false)

Expand All @@ -118,8 +116,8 @@ object SbtIdeaPlugin extends Plugin {
//
val sbtModuleSourceFiles: Seq[File] = {
val sbtLibs: Seq[IdeaLibrary] = if (args.contains(SbtClassifiers)) {
EvaluateTask.evaluateTask(buildStruct, Keys.updateSbtClassifiers, state, projectList.head._1, false, EvaluateTask.SystemProcessors) match {
case Some(Value(report)) => extractLibraries(report)
EvaluateTask(buildStruct, Keys.updateSbtClassifiers, state, projectList.head._1) match {
case Some((_, Value(report))) => extractLibraries(report)
case _ => Seq()
}
} else Seq()
Expand All @@ -145,7 +143,7 @@ object SbtIdeaPlugin extends Plugin {
def optionalSetting[A](key: ScopedSetting[A], pr: ProjectRef = projectRef) : Option[A] = key in pr get buildStruct.data

def logErrorAndFail(errorMessage: String): Nothing = {
logger(state).error(errorMessage);
logger(state).error(errorMessage)
throw new IllegalArgumentException()
}

Expand Down Expand Up @@ -174,8 +172,8 @@ object SbtIdeaPlugin extends Plugin {
setting(k.asInstanceOf[ScopedSetting[ScalaInstance]], missingScalaInstanceMessage)
case t: TaskKey[_] =>
val scalaInstanceTaskKey = t.asInstanceOf[TaskKey[ScalaInstance]]
EvaluateTask.evaluateTask(buildStruct, scalaInstanceTaskKey, state, projectRef, false, EvaluateTask.SystemProcessors) match {
case Some(Value(instance)) => instance
EvaluateTask(buildStruct, scalaInstanceTaskKey, state, projectRef) match {
case Some((_, Value(instance))) => instance
case _ => logErrorAndFail(missingScalaInstanceMessage)
}
}
Expand Down Expand Up @@ -230,7 +228,13 @@ object SbtIdeaPlugin extends Plugin {
(setting(Keys.classDirectory in scope, "Missing class directory", dep.project), setting(Keys.sourceDirectories in scope, "Missing source directory", dep.project))
}
}

val scalacOptions: Seq[String] = EvaluateTask(buildStruct, Keys.scalacOptions in Configurations.Compile, state, projectRef) match {
case Some((_, Value(options))) => options
case _ => Seq()
}

SubProjectInfo(baseDirectory, projectName, project.uses.map(_.project).filter(isAggregate).toList, classpathDeps, compileDirectories,
testDirectories, librariesExtractor.allLibraries, scalaInstance, ideaGroup, None, basePackage, packagePrefix, extraFacets)
testDirectories, librariesExtractor.allLibraries, scalaInstance, ideaGroup, None, basePackage, packagePrefix, extraFacets, scalacOptions)
}
}
Expand Up @@ -5,7 +5,8 @@
<option value="Project" name="compilerLibraryLevel"></option>
<option value="scala-2.9.1" name="compilerLibraryName"></option>
<option value="true" name="fsc"></option>
<option name="compilerOptions" value=""/>
<option value="true" name="deprecationWarnings"></option>
<option value="-deprecation" name="compilerOptions"/>
</configuration>
</facet>
</component>
Expand Down
@@ -0,0 +1,31 @@
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="scala" name="Scala">
<configuration>
<option value="Project" name="compilerLibraryLevel"></option>
<option value="scala-2.9.1" name="compilerLibraryName"></option>
<option value="true" name="fsc"></option>
<option value="true" name="uncheckedWarnings"></option>
<option value="-unchecked" name="compilerOptions"></option>
</configuration>
</facet>
</component>
<component inherit-compiler-output="false" name="NewModuleRootManager">
<output url="file://$MODULE_DIR$/../target/scala-2.9.1/classes"></output>
<output-test url="file://$MODULE_DIR$/../target/scala-2.9.1/test-classes"></output-test>
<exclude-output></exclude-output>
<content url="file:///tmp/sbt_/external-rootproject-dependency">
<sourceFolder isTestSource="false" url="file://$MODULE_DIR$/../src/main/scala" ></sourceFolder>
<sourceFolder isTestSource="false" url="file://$MODULE_DIR$/../src/main/java" ></sourceFolder>
<sourceFolder isTestSource="false" url="file://$MODULE_DIR$/../src/main/resources" ></sourceFolder>
<sourceFolder isTestSource="true" url="file://$MODULE_DIR$/../src/test/scala" ></sourceFolder>
<sourceFolder isTestSource="true" url="file://$MODULE_DIR$/../src/test/java" ></sourceFolder>
<sourceFolder isTestSource="true" url="file://$MODULE_DIR$/../src/test/resources" ></sourceFolder>
<excludeFolder url="file://$MODULE_DIR$/../target"></excludeFolder>
</content>
<orderEntry type="inheritedJdk"></orderEntry>
<orderEntry type="sourceFolder" forTests="false"></orderEntry>
<orderEntry level="project" name="org.scala-lang_scala-library_2.9.1" type="library"></orderEntry>
<orderEntry type="module" module-name="dependency-root" exported=""></orderEntry>
</component>
</module>
@@ -1,5 +1,7 @@
import sbt._
import sbt.Keys._

object SubBuild extends Build {
lazy val root = Project("dependency-root", file("."))
lazy val root = Project("dependency-root", file(".")) settings(
scalacOptions ++= Seq("-deprecation"))
}
@@ -1,8 +1,13 @@
import org.sbtidea.test.util.AbstractScriptedTestBuild
import sbt._
import Keys.libraryDependencies
import sbt.Keys._

object ScriptedTestBuild extends AbstractScriptedTestBuild("external-rootproject-dependency") {
lazy val root = Project("root-project", file("."), settings = Defaults.defaultSettings ++ scriptedTestSettings) aggregate(dependencyProject) dependsOn(dependencyProject)

lazy val mainSettings: Seq[Project.Setting[_]] = Defaults.defaultSettings ++ scriptedTestSettings ++ Seq(
scalacOptions ++= Seq("-unchecked")
)

lazy val root = Project("root-project", file("."), settings = mainSettings) aggregate(dependencyProject) dependsOn(dependencyProject)
lazy val dependencyProject = RootProject(file("dependency-project"))
}

0 comments on commit e805f3d

Please sign in to comment.