summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McDirmid <sean.mcdirmid@gmail.com>2008-07-30 10:42:28 +0000
committerSean McDirmid <sean.mcdirmid@gmail.com>2008-07-30 10:42:28 +0000
commitf816f0a6f8108baff7e1a0ff07b781631c15be12 (patch)
tree0a8236a007c36c564748526a87bd7ef651f7cdc0
parent44f801b71b69548244fa744bf8c797fd82e69b67 (diff)
downloadscala-f816f0a6f8108baff7e1a0ff07b781631c15be12.tar.gz
scala-f816f0a6f8108baff7e1a0ff07b781631c15be12.tar.bz2
scala-f816f0a6f8108baff7e1a0ff07b781631c15be12.zip
Hardening
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/IdeSupport.scala13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/IdeSupport.scala b/src/compiler/scala/tools/nsc/typechecker/IdeSupport.scala
index 3e0f92cc9e..c436ea8670 100644
--- a/src/compiler/scala/tools/nsc/typechecker/IdeSupport.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/IdeSupport.scala
@@ -274,7 +274,11 @@ trait IdeSupport extends Analyzer {
case te : TypeError => typeError(te.getMessage)
})
if (!makeNoChanges) use.foreach{tree=>
- if (tree.symbol.isClass && tree.symbol.hasFlag(symtab.Flags.CASE) && tree.symbol.owner.rawInfo.isComplete) {
+ if (tree.symbol != null &&
+ tree.symbol.isClass &&
+ tree.symbol.hasFlag(symtab.Flags.CASE) &&
+ tree.symbol.owner != null &&
+ tree.symbol.owner.rawInfo.isComplete) {
var e = tree.symbol.owner.info.decls.lookupEntry(tree.symbol.name.toTermName)
if (e != null) e.sym.pos match { // retype the object if its in the scope.
case pos : TrackedPosition if pos.owner != null && pos.owner != MemoizedTree.this =>
@@ -299,9 +303,12 @@ trait IdeSupport extends Analyzer {
}
use.last.symbol
}
- def doTyper = if (typerTxt ne NoContext) updateTyper(newTyper(typerTxt), mode, pt)
+ def doTyper = try {
+ if (typerTxt ne NoContext) updateTyper(newTyper(typerTxt), mode, pt)
+ } catch {
+ case e => logError("doTyper crash", e)
+ }
def updateTyper(typer : Typer, mode : Int, pt : Type) : Type = {
-
val typerTxt = intern(typer.context)
val makeNoChanges = currentClient.makeNoChanges
if (!makeNoChanges && ((this.typerTxt ne typerTxt) || (this.pt != pt) || (this.mode != mode))) {