Skip to content

Commit 47e508a

Browse files
author
builduser
committed
Merged branch idea251.release into idea251.x
2 parents 1e2a3a7 + bc5df37 commit 47e508a

File tree

2 files changed

+46
-3
lines changed

2 files changed

+46
-3
lines changed

scala/compiler-integration/src/org/jetbrains/plugins/scala/compiler/highlighting/UpdateCompilerGeneratedStateListener.scala

+18-3
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package org.jetbrains.plugins.scala.compiler.highlighting
22

33
import com.intellij.codeInsight.daemon.impl.HighlightInfoType
4-
import com.intellij.openapi.module.ModuleUtilCore
4+
import com.intellij.openapi.application.ReadAction
55
import com.intellij.openapi.progress.ProcessCanceledException
66
import com.intellij.openapi.project.Project
77
import com.intellij.openapi.vfs.VirtualFile
8+
import com.intellij.psi.{PsiFile, PsiManager}
9+
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
810
import org.jetbrains.jps.incremental.scala.Client.{ClientMsg, PosInfo}
911
import org.jetbrains.jps.incremental.scala.MessageKind
1012
import org.jetbrains.plugins.scala.compiler.highlighting.BackgroundExecutorService.executeOnBackgroundThreadInNotDisposed
1113
import org.jetbrains.plugins.scala.compiler.highlighting.ExternalHighlighting.RangeInfo
1214
import org.jetbrains.plugins.scala.compiler.{CompilerEvent, CompilerEventListener}
1315
import org.jetbrains.plugins.scala.extensions.PathExt
16+
import org.jetbrains.plugins.scala.project.ProjectPsiFileExt
1417
import org.jetbrains.plugins.scala.settings.ScalaProjectSettings
1518

1619
private class UpdateCompilerGeneratedStateListener(project: Project) extends CompilerEventListener {
@@ -119,10 +122,22 @@ private class UpdateCompilerGeneratedStateListener(project: Project) extends Com
119122
}
120123

121124
private def scalacOptionsForFile(virtualFile: VirtualFile): Seq[String] = {
122-
val module = ModuleUtilCore.findModuleForFile(virtualFile, project)
123-
CompilerOptions.scalacOptions(module)
125+
val psiFileOpt = findPsiFile(virtualFile)
126+
val moduleOpt = psiFileOpt.flatMap(_.module)
127+
moduleOpt match {
128+
case Some(module) => CompilerOptions.scalacOptions(module)
129+
case None => Seq.empty
130+
}
124131
}
125132

133+
@RequiresBackgroundThread
134+
private def findPsiFile(virtualFile: VirtualFile): Option[PsiFile] =
135+
ReadAction
136+
.nonBlocking[Option[PsiFile]](() => Option(PsiManager.getInstance(project).findFile(virtualFile)))
137+
.inSmartMode(project)
138+
.expireWhen(() => project.isDisposed)
139+
.executeSynchronously()
140+
126141
private def replaceOrAppendFileState(oldState: CompilerGeneratedState,
127142
file: VirtualFile,
128143
fileState: FileCompilerGeneratedState): CompilerGeneratedState = {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.jetbrains.plugins.scala.worksheet
2+
3+
import com.intellij.ide.scratch.ScratchRootType
4+
import com.intellij.lang.annotation.HighlightSeverity
5+
import com.intellij.openapi.util.TextRange
6+
import org.jetbrains.plugins.scala.ScalaVersion
7+
import org.jetbrains.plugins.scala.compiler.highlighting.ScalaCompilerHighlightingTestBase
8+
import org.jetbrains.plugins.scala.util.CompilerTestUtil.runWithErrorsFromCompiler
9+
10+
class ScratchFileCompilerHighlightingTest extends ScalaCompilerHighlightingTestBase {
11+
override protected def supportedIn(version: ScalaVersion): Boolean = version == ScalaVersion.Latest.Scala_3
12+
13+
def testSimpleError(): Unit = runWithErrorsFromCompiler(getProject) {
14+
val expected = expectedResult(
15+
ExpectedHighlighting(
16+
severity = HighlightSeverity.ERROR,
17+
range = Some(TextRange.create(16, 19)),
18+
quickFixDescriptions = Seq.empty,
19+
msgPrefix = "Found: (123 : Int)\nRequired: String"
20+
)
21+
)
22+
23+
val scratchFile =
24+
ScratchRootType.getInstance().createScratchFile(getProject, "simpleError.sc", WorksheetLanguage.INSTANCE, "val x: String = 123")
25+
waitUntilFileIsHighlighted(scratchFile)
26+
doAssertion(scratchFile, expected)
27+
}
28+
}

0 commit comments

Comments
 (0)