From dd3c21e72e75f21361b39c3a536637d54edbe8d1 Mon Sep 17 00:00:00 2001 From: Katarzyna Marek Date: Fri, 19 Apr 2024 12:49:45 +0200 Subject: [PATCH] reverse moving outline from `Compat` --- .../scala/meta/internal/pc/Compat.scala | 6 +++ .../scala/meta/internal/pc/Outline.scala | 9 ----- .../scala/meta/internal/pc/Compat.scala | 37 +++++++++++++++++- .../scala/meta/internal/pc/Outline.scala | 38 ------------------- .../meta/internal/pc/Compat.scala | 34 +++++++++++++++++ .../meta/internal/pc/Compat.scala | 35 +++++++++++++++++ .../meta/internal/pc/Compat.scala | 35 +++++++++++++++++ .../scala/meta/internal/pc/Compat.scala | 35 +++++++++++++++++ .../scala/meta/internal/pc/Outline.scala | 38 ------------------- .../scala/meta/internal/pc/MetalsGlobal.scala | 3 +- 10 files changed, 182 insertions(+), 88 deletions(-) delete mode 100644 mtags/src/main/scala-2.11/scala/meta/internal/pc/Outline.scala delete mode 100644 mtags/src/main/scala-2.12/scala/meta/internal/pc/Outline.scala delete mode 100644 mtags/src/main/scala-2.13/scala/meta/internal/pc/Outline.scala diff --git a/mtags/src/main/scala-2.11/scala/meta/internal/pc/Compat.scala b/mtags/src/main/scala-2.11/scala/meta/internal/pc/Compat.scala index b3b68c9534e..e4e177109fc 100644 --- a/mtags/src/main/scala-2.11/scala/meta/internal/pc/Compat.scala +++ b/mtags/src/main/scala-2.11/scala/meta/internal/pc/Compat.scala @@ -3,6 +3,8 @@ package scala.meta.internal.pc import scala.tools.nsc.reporters.Reporter import scala.tools.nsc.reporters.StoreReporter +import scala.meta.pc.OutlineFiles + trait Compat { this: MetalsGlobal => def metalsFunctionArgTypes(tpe: Type): List[Type] = { val dealiased = tpe.dealiasWiden @@ -19,4 +21,8 @@ trait Compat { this: MetalsGlobal => def isAliasCompletion(m: Member): Boolean = false def constantType(c: ConstantType): ConstantType = c + + def runOutline(files: OutlineFiles): Unit = { + // no outline compilation for 2.11 + } } diff --git a/mtags/src/main/scala-2.11/scala/meta/internal/pc/Outline.scala b/mtags/src/main/scala-2.11/scala/meta/internal/pc/Outline.scala deleted file mode 100644 index 67d16f13761..00000000000 --- a/mtags/src/main/scala-2.11/scala/meta/internal/pc/Outline.scala +++ /dev/null @@ -1,9 +0,0 @@ -package scala.meta.internal.pc - -import scala.meta.pc.OutlineFiles - -trait Outline { this: MetalsGlobal => - def runOutline(files: OutlineFiles): Unit = { - // no outline compilation for 2.11 - } -} diff --git a/mtags/src/main/scala-2.12/scala/meta/internal/pc/Compat.scala b/mtags/src/main/scala-2.12/scala/meta/internal/pc/Compat.scala index da02d75b0f9..8532ab9e00d 100644 --- a/mtags/src/main/scala-2.12/scala/meta/internal/pc/Compat.scala +++ b/mtags/src/main/scala-2.12/scala/meta/internal/pc/Compat.scala @@ -1,8 +1,14 @@ package scala.meta.internal.pc -import scala.tools.nsc.reporters.Reporter +import java.{util => ju} + +import scala.reflect.internal.Reporter import scala.tools.nsc.reporters.StoreReporter +import scala.meta.internal.jdk.CollectionConverters._ +import scala.meta.pc.OutlineFiles +import scala.meta.pc.VirtualFileParams + trait Compat { this: MetalsGlobal => def metalsFunctionArgTypes(tpe: Type): List[Type] = definitions.functionOrSamArgTypes(tpe) @@ -16,4 +22,33 @@ trait Compat { this: MetalsGlobal => def isAliasCompletion(m: Member): Boolean = false def constantType(c: ConstantType): ConstantType = c + + def runOutline(files: OutlineFiles): Unit = { + this.settings.Youtline.value = true + runOutline(files.files) + if (files.isFirstCompileSubstitute()) { + // if first compilation substitute we compile all files twice + // first to emit symbols, second so signatures have information about those symbols + // this isn't a perfect strategy but much better than single compile + runOutline(files.files, forceNewUnit = true) + } + this.settings.Youtline.value = false + } + + private def runOutline( + files: ju.List[VirtualFileParams], + forceNewUnit: Boolean = false + ): Unit = { + files.asScala.foreach { params => + val unit = this.addCompilationUnit( + params.text(), + params.uri.toString(), + cursor = None, + isOutline = true, + forceNew = forceNewUnit + ) + this.typeCheck(unit) + this.richCompilationCache.put(params.uri().toString(), unit) + } + } } diff --git a/mtags/src/main/scala-2.12/scala/meta/internal/pc/Outline.scala b/mtags/src/main/scala-2.12/scala/meta/internal/pc/Outline.scala deleted file mode 100644 index a53f3fabe8f..00000000000 --- a/mtags/src/main/scala-2.12/scala/meta/internal/pc/Outline.scala +++ /dev/null @@ -1,38 +0,0 @@ -package scala.meta.internal.pc - -import java.{util => ju} - -import scala.meta.internal.jdk.CollectionConverters._ -import scala.meta.pc.OutlineFiles -import scala.meta.pc.VirtualFileParams - -trait Outline { this: MetalsGlobal => - def runOutline(files: OutlineFiles): Unit = { - this.settings.Youtline.value = true - runOutline(files.files) - if (files.isFirstCompileSubstitute()) { - // if first compilation substitute we compile all files twice - // first to emit symbols, second so signatures have information about those symbols - // this isn't a perfect strategy but much better than single compile - runOutline(files.files, forceNewUnit = true) - } - this.settings.Youtline.value = false - } - - private def runOutline( - files: ju.List[VirtualFileParams], - forceNewUnit: Boolean = false - ): Unit = { - files.asScala.foreach { params => - val unit = this.addCompilationUnit( - params.text(), - params.uri.toString(), - cursor = None, - isOutline = true, - forceNew = forceNewUnit - ) - this.typeCheck(unit) - this.richCompilationCache.put(params.uri().toString(), unit) - } - } -} diff --git a/mtags/src/main/scala-2.13.5/meta/internal/pc/Compat.scala b/mtags/src/main/scala-2.13.5/meta/internal/pc/Compat.scala index e492071a947..5f2527b504d 100644 --- a/mtags/src/main/scala-2.13.5/meta/internal/pc/Compat.scala +++ b/mtags/src/main/scala-2.13.5/meta/internal/pc/Compat.scala @@ -1,8 +1,14 @@ package scala.meta.internal.pc +import java.{util => ju} + import scala.reflect.internal.Reporter import scala.tools.nsc.reporters.StoreReporter +import scala.meta.internal.jdk.CollectionConverters._ +import scala.meta.pc.OutlineFiles +import scala.meta.pc.VirtualFileParams + trait Compat { this: MetalsGlobal => def metalsFunctionArgTypes(tpe: Type): List[Type] = definitions.functionOrPfOrSamArgTypes(tpe) @@ -20,4 +26,32 @@ trait Compat { this: MetalsGlobal => def constantType(c: ConstantType): ConstantType = if (c.value.isSuitableLiteralType) LiteralType(c.value) else c + def runOutline(files: OutlineFiles): Unit = { + this.settings.Youtline.value = true + runOutline(files.files) + if (files.isFirstCompileSubstitute()) { + // if first compilation substitute we compile all files twice + // first to emit symbols, second so signatures have information about those symbols + // this isn't a perfect strategy but much better than single compile + runOutline(files.files, forceNewUnit = true) + } + this.settings.Youtline.value = false + } + + private def runOutline( + files: ju.List[VirtualFileParams], + forceNewUnit: Boolean = false + ): Unit = { + files.asScala.foreach { params => + val unit = this.addCompilationUnit( + params.text(), + params.uri.toString(), + cursor = None, + isOutline = true, + forceNew = forceNewUnit + ) + this.typeCheck(unit) + this.richCompilationCache.put(params.uri().toString(), unit) + } + } } diff --git a/mtags/src/main/scala-2.13.6/meta/internal/pc/Compat.scala b/mtags/src/main/scala-2.13.6/meta/internal/pc/Compat.scala index 988bd8f2db8..5f2527b504d 100644 --- a/mtags/src/main/scala-2.13.6/meta/internal/pc/Compat.scala +++ b/mtags/src/main/scala-2.13.6/meta/internal/pc/Compat.scala @@ -1,8 +1,14 @@ package scala.meta.internal.pc +import java.{util => ju} + import scala.reflect.internal.Reporter import scala.tools.nsc.reporters.StoreReporter +import scala.meta.internal.jdk.CollectionConverters._ +import scala.meta.pc.OutlineFiles +import scala.meta.pc.VirtualFileParams + trait Compat { this: MetalsGlobal => def metalsFunctionArgTypes(tpe: Type): List[Type] = definitions.functionOrPfOrSamArgTypes(tpe) @@ -19,4 +25,33 @@ trait Compat { this: MetalsGlobal => def constantType(c: ConstantType): ConstantType = if (c.value.isSuitableLiteralType) LiteralType(c.value) else c + + def runOutline(files: OutlineFiles): Unit = { + this.settings.Youtline.value = true + runOutline(files.files) + if (files.isFirstCompileSubstitute()) { + // if first compilation substitute we compile all files twice + // first to emit symbols, second so signatures have information about those symbols + // this isn't a perfect strategy but much better than single compile + runOutline(files.files, forceNewUnit = true) + } + this.settings.Youtline.value = false + } + + private def runOutline( + files: ju.List[VirtualFileParams], + forceNewUnit: Boolean = false + ): Unit = { + files.asScala.foreach { params => + val unit = this.addCompilationUnit( + params.text(), + params.uri.toString(), + cursor = None, + isOutline = true, + forceNew = forceNewUnit + ) + this.typeCheck(unit) + this.richCompilationCache.put(params.uri().toString(), unit) + } + } } diff --git a/mtags/src/main/scala-2.13.7/meta/internal/pc/Compat.scala b/mtags/src/main/scala-2.13.7/meta/internal/pc/Compat.scala index e492071a947..1d941c7ebc2 100644 --- a/mtags/src/main/scala-2.13.7/meta/internal/pc/Compat.scala +++ b/mtags/src/main/scala-2.13.7/meta/internal/pc/Compat.scala @@ -1,8 +1,14 @@ package scala.meta.internal.pc +import java.{util => ju} + import scala.reflect.internal.Reporter import scala.tools.nsc.reporters.StoreReporter +import scala.meta.internal.jdk.CollectionConverters._ +import scala.meta.pc.OutlineFiles +import scala.meta.pc.VirtualFileParams + trait Compat { this: MetalsGlobal => def metalsFunctionArgTypes(tpe: Type): List[Type] = definitions.functionOrPfOrSamArgTypes(tpe) @@ -20,4 +26,33 @@ trait Compat { this: MetalsGlobal => def constantType(c: ConstantType): ConstantType = if (c.value.isSuitableLiteralType) LiteralType(c.value) else c + def runOutline(files: OutlineFiles): Unit = { + this.settings.Youtline.value = true + runOutline(files.files) + if (files.isFirstCompileSubstitute()) { + // if first compilation substitute we compile all files twice + // first to emit symbols, second so signatures have information about those symbols + // this isn't a perfect strategy but much better than single compile + runOutline(files.files, forceNewUnit = true) + } + this.settings.Youtline.value = false + } + + private def runOutline( + files: ju.List[VirtualFileParams], + forceNewUnit: Boolean = false + ): Unit = { + files.asScala.foreach { params => + val unit = this.addCompilationUnit( + params.text(), + params.uri.toString(), + cursor = None, + isOutline = true, + forceNew = forceNewUnit + ) + this.typeCheck(unit) + this.richCompilationCache.put(params.uri().toString(), unit) + } + } + } diff --git a/mtags/src/main/scala-2.13/scala/meta/internal/pc/Compat.scala b/mtags/src/main/scala-2.13/scala/meta/internal/pc/Compat.scala index a4eeed4b00c..0b4fe757b10 100644 --- a/mtags/src/main/scala-2.13/scala/meta/internal/pc/Compat.scala +++ b/mtags/src/main/scala-2.13/scala/meta/internal/pc/Compat.scala @@ -1,8 +1,14 @@ package scala.meta.internal.pc +import java.{util => ju} + import scala.reflect.internal.Reporter import scala.tools.nsc.reporters.StoreReporter +import scala.meta.internal.jdk.CollectionConverters._ +import scala.meta.pc.OutlineFiles +import scala.meta.pc.VirtualFileParams + trait Compat { this: MetalsGlobal => def metalsFunctionArgTypes(tpe: Type): List[Type] = definitions.functionOrPfOrSamArgTypes(tpe) @@ -23,4 +29,33 @@ trait Compat { this: MetalsGlobal => def constantType(c: ConstantType): ConstantType = if (c.value.isSuitableLiteralType) LiteralType(c.value) else c + + def runOutline(files: OutlineFiles): Unit = { + this.settings.Youtline.value = true + runOutline(files.files) + if (files.isFirstCompileSubstitute()) { + // if first compilation substitute we compile all files twice + // first to emit symbols, second so signatures have information about those symbols + // this isn't a perfect strategy but much better than single compile + runOutline(files.files, forceNewUnit = true) + } + this.settings.Youtline.value = false + } + + private def runOutline( + files: ju.List[VirtualFileParams], + forceNewUnit: Boolean = false + ): Unit = { + files.asScala.foreach { params => + val unit = this.addCompilationUnit( + params.text(), + params.uri.toString(), + cursor = None, + isOutline = true, + forceNew = forceNewUnit + ) + this.typeCheck(unit) + this.richCompilationCache.put(params.uri().toString(), unit) + } + } } diff --git a/mtags/src/main/scala-2.13/scala/meta/internal/pc/Outline.scala b/mtags/src/main/scala-2.13/scala/meta/internal/pc/Outline.scala deleted file mode 100644 index a53f3fabe8f..00000000000 --- a/mtags/src/main/scala-2.13/scala/meta/internal/pc/Outline.scala +++ /dev/null @@ -1,38 +0,0 @@ -package scala.meta.internal.pc - -import java.{util => ju} - -import scala.meta.internal.jdk.CollectionConverters._ -import scala.meta.pc.OutlineFiles -import scala.meta.pc.VirtualFileParams - -trait Outline { this: MetalsGlobal => - def runOutline(files: OutlineFiles): Unit = { - this.settings.Youtline.value = true - runOutline(files.files) - if (files.isFirstCompileSubstitute()) { - // if first compilation substitute we compile all files twice - // first to emit symbols, second so signatures have information about those symbols - // this isn't a perfect strategy but much better than single compile - runOutline(files.files, forceNewUnit = true) - } - this.settings.Youtline.value = false - } - - private def runOutline( - files: ju.List[VirtualFileParams], - forceNewUnit: Boolean = false - ): Unit = { - files.asScala.foreach { params => - val unit = this.addCompilationUnit( - params.text(), - params.uri.toString(), - cursor = None, - isOutline = true, - forceNew = forceNewUnit - ) - this.typeCheck(unit) - this.richCompilationCache.put(params.uri().toString(), unit) - } - } -} diff --git a/mtags/src/main/scala-2/scala/meta/internal/pc/MetalsGlobal.scala b/mtags/src/main/scala-2/scala/meta/internal/pc/MetalsGlobal.scala index bd3894c5980..b0a1c5c9e4d 100644 --- a/mtags/src/main/scala-2/scala/meta/internal/pc/MetalsGlobal.scala +++ b/mtags/src/main/scala-2/scala/meta/internal/pc/MetalsGlobal.scala @@ -61,8 +61,7 @@ class MetalsGlobal( with GlobalProxy with AutoImports with Keywords - with WorkspaceSymbolSearch - with Outline { compiler => + with WorkspaceSymbolSearch { compiler => hijackPresentationCompilerThread() val logger: Logger = Logger.getLogger(classOf[MetalsGlobal].getName)