Skip to content

Commit ceab5eb

Browse files
committed
Guards Scala Debug against fetching data outside of presentation compiler. Scala Model gets data eagerly.
1 parent b7339b4 commit ceab5eb

File tree

2 files changed

+29
-28
lines changed

2 files changed

+29
-28
lines changed

org.scala-ide.sdt.core/src/org/scalaide/core/internal/jdt/model/ScalaElements.scala

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.scalaide.core.internal.jdt.model
22

3-
import scala.collection.immutable.Seq
3+
import scala.tools.eclipse.contribution.weaving.jdt.IScalaElement
4+
import scala.tools.eclipse.contribution.weaving.jdt.ui.IMethodOverrideInfo
5+
import scala.tools.nsc.Global
46

57
import org.eclipse.jdt.core.IField
68
import org.eclipse.jdt.core.IJavaElement
@@ -11,6 +13,7 @@ import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants
1113
import org.eclipse.jdt.internal.core.JavaElement
1214
import org.eclipse.jdt.internal.core.JavaElementInfo
1315
import org.eclipse.jdt.internal.core.LocalVariable
16+
import org.eclipse.jdt.internal.core.OpenableElementInfo
1417
import org.eclipse.jdt.internal.core.SourceConstructorInfo
1518
import org.eclipse.jdt.internal.core.SourceField
1619
import org.eclipse.jdt.internal.core.SourceFieldElementInfo
@@ -19,15 +22,11 @@ import org.eclipse.jdt.internal.core.SourceMethodElementInfo
1922
import org.eclipse.jdt.internal.core.SourceMethodInfo
2023
import org.eclipse.jdt.internal.core.SourceType
2124
import org.eclipse.jdt.internal.core.SourceTypeElementInfo
22-
import org.eclipse.jdt.internal.core.OpenableElementInfo
2325
import org.eclipse.jdt.internal.core.TypeParameterElementInfo
2426
import org.eclipse.jface.resource.ImageDescriptor
25-
27+
import org.scalaide.core.internal.compiler.ScalaPresentationCompiler
2628
import org.scalaide.ui.ScalaImages
27-
import scala.tools.eclipse.contribution.weaving.jdt.IScalaElement
28-
import scala.tools.eclipse.contribution.weaving.jdt.ui.IMethodOverrideInfo
2929
import org.scalaide.util.internal.ReflectionUtils
30-
import scala.tools.nsc.Global
3130

3231
trait ScalaElement extends JavaElement with IScalaElement {
3332
def getElementInfo: AnyRef
@@ -56,7 +55,7 @@ trait ScalaElement extends JavaElement with IScalaElement {
5655

5756
trait ScalaFieldElement extends ScalaElement
5857

59-
class ScalaSourceTypeElement(parent: JavaElement, name: String, declaringType: Option[Global#Type])
58+
class ScalaSourceTypeElement(parent: JavaElement, name: String, declaringType: Option[Global#Type])(implicit pc: ScalaPresentationCompiler)
6059
extends SourceType(parent, name) with ScalaElement {
6160

6261
def getCorrespondingElement(element: IJavaElement): Option[IJavaElement] = {
@@ -81,42 +80,44 @@ class ScalaSourceTypeElement(parent: JavaElement, name: String, declaringType: O
8180
}
8281

8382
override def getFullyQualifiedName: String =
84-
declaringType.map { declaringType =>
85-
val pkgSym = declaringType.typeSymbol.enclosingPackage
86-
if (pkgSym.isEmptyPackage)
87-
super.getFullyQualifiedName
88-
else {
89-
val pkg = pkgSym.javaClassName
90-
pkg + "." + getTypeQualifiedName('$', /*showParameters =*/ false)
91-
}
83+
declaringType.flatMap { typ =>
84+
pc.asyncExec {
85+
val pkgSym = typ.typeSymbol.enclosingPackage
86+
if (pkgSym.isEmptyPackage)
87+
super.getFullyQualifiedName
88+
else {
89+
val pkg = pkgSym.javaClassName
90+
pkg + "." + getTypeQualifiedName('$', /*showParameters =*/ false)
91+
}
92+
}.get.left.toOption
9293
}.getOrElse(super.getFullyQualifiedName)
9394
}
9495

95-
class ScalaClassElement(parent: JavaElement, name: String, synthetic: Boolean, declaringType: Option[Global#Type])
96+
class ScalaClassElement(parent: JavaElement, name: String, synthetic: Boolean, declaringType: Option[Global#Type])(implicit pc: ScalaPresentationCompiler)
9697
extends ScalaSourceTypeElement(parent, name, declaringType) {
9798
override def getImageDescriptor = ScalaImages.SCALA_CLASS
9899
override def isVisible = !synthetic
99100
}
100101

101-
class ScalaAnonymousClassElement(parent: JavaElement, name: String, declaringType: Option[Global#Type])
102+
class ScalaAnonymousClassElement(parent: JavaElement, name: String, declaringType: Option[Global#Type])(implicit pc: ScalaPresentationCompiler)
102103
extends ScalaClassElement(parent, name, false, declaringType) {
103104
override def getLabelText(flags: Long) = if (name != null) "new " + name + " {...}" else "new {...}"
104105
}
105106

106-
class ScalaTraitElement(parent: JavaElement, name: String, declaringType: Option[Global#Type])
107+
class ScalaTraitElement(parent: JavaElement, name: String, declaringType: Option[Global#Type])(implicit pc: ScalaPresentationCompiler)
107108
extends ScalaSourceTypeElement(parent, name, declaringType) {
108109
override def getImageDescriptor = ScalaImages.SCALA_TRAIT
109110
}
110111

111-
class ScalaModuleElement(parent: JavaElement, name: String, synthetic: Boolean, declaringType: Option[Global#Type])
112+
class ScalaModuleElement(parent: JavaElement, name: String, synthetic: Boolean, declaringType: Option[Global#Type])(implicit pc: ScalaPresentationCompiler)
112113
extends ScalaSourceTypeElement(parent, name + "$", declaringType) {
113114
override def scalaName = name
114115
override def getLabelText(flags: Long) = name
115116
override def getImageDescriptor = ScalaImages.SCALA_OBJECT
116117
override def isVisible = !synthetic
117118
}
118119

119-
class ScalaPackageModuleElement(parent: JavaElement, name: String, synthetic: Boolean, declaringType: Option[Global#Type])
120+
class ScalaPackageModuleElement(parent: JavaElement, name: String, synthetic: Boolean, declaringType: Option[Global#Type])(implicit pc: ScalaPresentationCompiler)
120121
extends ScalaModuleElement(parent, name, synthetic, declaringType) {
121122
override def getImageDescriptor = ScalaImages.SCALA_PACKAGE_OBJECT
122123
}
@@ -158,7 +159,7 @@ class ScalaVarElement(parent: JavaElement, name: String, display: String)
158159
override def getLabelText(flags: Long) = display
159160
}
160161

161-
class ScalaTypeElement(parent: JavaElement, name: String, display: String, declaringType: Option[Global#Type])
162+
class ScalaTypeElement(parent: JavaElement, name: String, display: String, declaringType: Option[Global#Type])(implicit pc: ScalaPresentationCompiler)
162163
extends ScalaSourceTypeElement(parent, name, declaringType) {
163164
override def getLabelText(flags: Long) = display
164165
override def getImageDescriptor = ScalaImages.SCALA_TYPE

org.scala-ide.sdt.core/src/org/scalaide/core/internal/jdt/model/ScalaStructureBuilder.scala

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ trait ScalaStructureBuilder extends ScalaAnnotationHelper { pc: ScalaPresentatio
233233
} else {
234234
val className = m.nameString
235235

236-
val classElem = new ScalaClassElement(element, className, true, Option(m.tpe))
236+
val classElem = new ScalaClassElement(element, className, true, Option(m.tpe))(pc)
237237
resolveDuplicates(classElem)
238238
addChild(classElem)
239239

@@ -405,11 +405,11 @@ trait ScalaStructureBuilder extends ScalaAnnotationHelper { pc: ScalaPresentatio
405405

406406
val classElem =
407407
if (sym hasFlag Flags.TRAIT)
408-
new ScalaTraitElement(element, name, Option(sym.tpe))
408+
new ScalaTraitElement(element, name, Option(sym.tpe))(pc)
409409
else if (isAnon) {
410-
new ScalaAnonymousClassElement(element, superName, Option(sym.tpe))
410+
new ScalaAnonymousClassElement(element, superName, Option(sym.tpe))(pc)
411411
} else
412-
new ScalaClassElement(element, name, false, Option(sym.tpe))
412+
new ScalaClassElement(element, name, false, Option(sym.tpe))(pc)
413413

414414
resolveDuplicates(classElem)
415415
addChild(classElem)
@@ -490,9 +490,9 @@ trait ScalaStructureBuilder extends ScalaAnnotationHelper { pc: ScalaPresentatio
490490
val isSynthetic = sym.hasFlag(Flags.SYNTHETIC)
491491
val moduleElem =
492492
if (sym.isPackageObject)
493-
new ScalaPackageModuleElement(element, m.name.toString, isSynthetic, Option(sym.tpe))
493+
new ScalaPackageModuleElement(element, m.name.toString, isSynthetic, Option(sym.tpe))(pc)
494494
else
495-
new ScalaModuleElement(element, m.name.toString, isSynthetic, Option(sym.tpe))
495+
new ScalaModuleElement(element, m.name.toString, isSynthetic, Option(sym.tpe))(pc)
496496
resolveDuplicates(moduleElem)
497497
addChild(moduleElem)
498498

@@ -617,7 +617,7 @@ trait ScalaStructureBuilder extends ScalaAnnotationHelper { pc: ScalaPresentatio
617617

618618
val (typeElem, typeElemInfo) = {
619619
if (!asField) {
620-
new ScalaTypeElement(element, name, name, None) -> new ScalaElementInfo
620+
new ScalaTypeElement(element, name, name, None)(pc) -> new ScalaElementInfo
621621
} else {
622622
new ScalaTypeFieldElement(element, name, name) -> {
623623
val info = new ScalaSourceFieldElementInfo

0 commit comments

Comments
 (0)