Skip to content

Commit

Permalink
Merge pull request #966 from Kwestor/refactor/better-error-message-on…
Browse files Browse the repository at this point in the history
…-scu-cast

Better error message in case of SCU cast failure
  • Loading branch information
kiritsuku committed Jun 1, 2015
2 parents b0eadb1 + 8cc182c commit e773514
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ class ScalaPlugin extends IScalaPlugin with PluginLogConfigurator with IResource
private val projects = new mutable.HashMap[IProject, ScalaProject]

override def scalaCompilationUnit(input: IEditorInput): Option[ScalaCompilationUnit] = {
def unitOfSourceFile = Option(documentProvider.getWorkingCopy(input).asInstanceOf[ScalaCompilationUnit])
def unitOfSourceFile = Option(documentProvider.getWorkingCopy(input)) map (ScalaCompilationUnit.castFrom)

def unitOfClassFile = input.getAdapter(classOf[IClassFile]) match {
case tr: ScalaClassFile => Some(tr)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,24 @@ import org.scalaide.core.compiler.ISourceMap
import org.eclipse.jdt.internal.corext.fix.LinkedProposalPositionGroup.PositionInformation
import org.scalaide.core.compiler.IPositionInformation

object ScalaCompilationUnit extends HasLogger {

// This method is overloaded cause we have casts from 2 unrelated types in our codebase.
def castFrom(icu: InteractiveCompilationUnit): ScalaCompilationUnit = cast(icu)
def castFrom(tr: ITypeRoot): ScalaCompilationUnit = cast(tr)

// This method provides better error message if cast fails
private def cast(a: AnyRef): ScalaCompilationUnit = a match {
case scu: ScalaCompilationUnit => scu
case other =>
val message = """Underlying compilation unit is not a Scala Compilation unit.
|This is most probably caused by disabled JDT weaving.
|Run `Scala -> Run Setup Diagnostics` to enable it.""".stripMargin
logger.error(message)
throw new RuntimeException(message)
}
}

trait ScalaCompilationUnit extends Openable
with env.ICompilationUnit
with ScalaElement
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ trait HyperlinkOpenActionStrategy {

private def withScalaCompilatioUnit[T](editor: JavaEditor)(f: ScalaCompilationUnit => T): Option[T] = {
val inputJavaElement = EditorUtility.getEditorInputJavaElement(editor, false)
Option(inputJavaElement) map (_.asInstanceOf[ScalaCompilationUnit]) map (f)
Option(inputJavaElement) map (ScalaCompilationUnit.castFrom) map (f)
}

protected def isEnabled(editor: JavaEditor): Boolean = getTextSelection(editor) map { textSelection =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ class ScalaClassFileEditor extends ClassFileEditor with ScalaCompilationUnitEdit
super.createActions()
val openAction = new Action {
override def run: Unit = {
Option(getInputJavaElement) map (_.asInstanceOf[ScalaCompilationUnit]) foreach { scu =>
scu.followDeclaration(ScalaClassFileEditor.this, getSelectionProvider.getSelection.asInstanceOf[ITextSelection])
Option(getInputJavaElement) map (ScalaCompilationUnit.castFrom) foreach { scu =>
scu.followDeclaration(ScalaClassFileEditor.this, getSelectionProvider.getSelection.asInstanceOf[ITextSelection])
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ class ScalaSourceFileEditor

val openAction = new Action {
private def scalaCompilationUnit: Option[ScalaCompilationUnit] =
Option(getInteractiveCompilationUnit) map (_.asInstanceOf[ScalaCompilationUnit])
Option(getInteractiveCompilationUnit) map (ScalaCompilationUnit.castFrom)

override def run(): Unit = {
scalaCompilationUnit foreach { scu =>
Expand Down

0 comments on commit e773514

Please sign in to comment.