Skip to content

Commit 23c4ec8

Browse files
niktropdmitry.naydanov
authored andcommitted
number of noisy implicit parameters reduced
#SCL-11849 The ideas behind are following: - Single `ProjectContext` type for project-like parameters (Project, PsiManager, TypeSystem) and implicit conversions for it - Implicits are defined at the class level if possible - If possible, compute `ProjectContext` value from other arguments of the function, don't propagate it as implicit parameter
1 parent 22f5618 commit 23c4ec8

File tree

297 files changed

+1362
-1499
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

297 files changed

+1362
-1499
lines changed

src/org/jetbrains/plugins/dotty/lang/psi/types/ScTypePsiTypeBridge.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package org.jetbrains.plugins.dotty.lang.psi.types
22

33
import com.intellij.psi._
44
import org.jetbrains.plugins.scala.extensions.PsiClassExt
5-
import org.jetbrains.plugins.scala.lang.psi.ScalaPsiElement.ElementScope
5+
import org.jetbrains.plugins.scala.lang.psi.ElementScope
66
import org.jetbrains.plugins.scala.lang.psi.api.statements.ScTypeAliasDefinition
77
import org.jetbrains.plugins.scala.lang.psi.impl.toplevel.synthetic.ScSyntheticClass
88
import org.jetbrains.plugins.scala.lang.psi.types._

src/org/jetbrains/plugins/scala/actions/ShowImplicitParametersAction.scala

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,21 @@ import com.intellij.openapi.project.Project
1818
import com.intellij.openapi.ui.popup.{JBPopup, JBPopupFactory}
1919
import com.intellij.openapi.util.{Disposer, Ref}
2020
import com.intellij.psi.util.PsiUtilBase
21-
import com.intellij.psi.{PsiElement, PsiManager, PsiNamedElement, PsiWhiteSpace}
21+
import com.intellij.psi.{PsiElement, PsiNamedElement, PsiWhiteSpace}
2222
import com.intellij.ui.treeStructure.Tree
2323
import com.intellij.ui.{ClickListener, ScrollPaneFactory}
2424
import com.intellij.util.ArrayUtil
2525
import org.jetbrains.plugins.scala.extensions._
26-
import org.jetbrains.plugins.scala.lang.psi.ScalaPsiUtil
2726
import org.jetbrains.plugins.scala.lang.psi.api.base.ScConstructor
2827
import org.jetbrains.plugins.scala.lang.psi.api.base.types.{ScParameterizedTypeElement, ScSimpleTypeElement, ScTypeElement}
2928
import org.jetbrains.plugins.scala.lang.psi.api.expr.{ScExpression, ScNewTemplateDefinition}
30-
import org.jetbrains.plugins.scala.lang.psi.api.toplevel.templates.ScTemplateBody
31-
import org.jetbrains.plugins.scala.lang.psi.api.toplevel.{ScEarlyDefinitions, ScNamedElement}
29+
import org.jetbrains.plugins.scala.lang.psi.api.toplevel.ScNamedElement
3230
import org.jetbrains.plugins.scala.lang.psi.api.{InferUtil, ScalaFile}
3331
import org.jetbrains.plugins.scala.lang.psi.implicits.ImplicitCollector
3432
import org.jetbrains.plugins.scala.lang.psi.implicits.ImplicitCollector._
35-
import org.jetbrains.plugins.scala.lang.psi.types.api.TypeSystem
3633
import org.jetbrains.plugins.scala.lang.refactoring.util.ScalaRefactoringUtil
3734
import org.jetbrains.plugins.scala.lang.resolve.ScalaResolveResult
38-
import org.jetbrains.plugins.scala.project.ProjectExt
35+
import org.jetbrains.plugins.scala.project.ProjectContext
3936

4037
import scala.collection.mutable.ArrayBuffer
4138

@@ -105,7 +102,7 @@ class ShowImplicitParametersAction extends AnAction("Show implicit parameters ac
105102
implicitParameters match {
106103
case None | Some(Seq()) =>
107104
ScalaActionUtil.showHint(editor, "No implicit parameters")
108-
case Some(seq) => showPopup(editor, seq)(project.typeSystem)
105+
case Some(seq) => showPopup(editor, seq)
109106
}
110107
}
111108

@@ -212,9 +209,8 @@ class ShowImplicitParametersAction extends AnAction("Show implicit parameters ac
212209
succeeded.get
213210
}
214211

215-
private def showPopup(editor: Editor, results: Seq[ScalaResolveResult])
216-
(implicit typeSystem: TypeSystem) {
217-
val project = editor.getProject
212+
private def showPopup(editor: Editor, results: Seq[ScalaResolveResult]) {
213+
implicit val project = editor.getProject
218214

219215
val tree = new Tree()
220216
val structure = new ImplicitParametersTreeStructure(project, results)
@@ -273,9 +269,10 @@ class ShowImplicitParametersAction extends AnAction("Show implicit parameters ac
273269

274270
class ImplicitParametersTreeStructure(project: Project,
275271
results: Seq[ScalaResolveResult])
276-
(implicit val typeSystem: TypeSystem)
277272
extends AbstractTreeStructure {
278273

274+
implicit def ctx: ProjectContext = project
275+
279276
class ImplicitParametersNode(value: ScalaResolveResult, implicitResult: Option[ImplicitResult] = None)
280277
extends AbstractPsiBasedNode[ScalaResolveResult](project, value, ViewSettings.DEFAULT) {
281278
override def extractPsiFromValue(): PsiNamedElement = value.getElement

src/org/jetbrains/plugins/scala/actions/ShowTypeInfoAction.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ import org.jetbrains.plugins.scala.extensions._
1010
import org.jetbrains.plugins.scala.lang.lexer.ScalaTokenTypes
1111
import org.jetbrains.plugins.scala.lang.psi.api.base.patterns.ScBindingPattern
1212
import org.jetbrains.plugins.scala.lang.psi.api.expr.ScExpression
13-
import org.jetbrains.plugins.scala.lang.psi.types.api.{ScTypePresentation, TypeSystem}
13+
import org.jetbrains.plugins.scala.lang.psi.types.api.ScTypePresentation
1414
import org.jetbrains.plugins.scala.lang.psi.types.result.Typeable
1515
import org.jetbrains.plugins.scala.lang.psi.types.{ScSubstitutor, ScType, ScTypeExt}
1616
import org.jetbrains.plugins.scala.lang.refactoring.util.ScalaRefactoringUtil
17-
import org.jetbrains.plugins.scala.project.ProjectExt
17+
import org.jetbrains.plugins.scala.project.ProjectContext
1818

1919

2020
/**
@@ -45,9 +45,9 @@ class ShowTypeInfoAction extends AnAction(ScalaBundle.message("type.info")) {
4545
}
4646

4747
val project = file.getProject
48-
implicit val typeSystem = project.typeSystem
48+
implicit val ctx: ProjectContext = project
4949

50-
def hintForExpression(implicit typeSystem: TypeSystem): Option[String] = {
50+
def hintForExpression(): Option[String] = {
5151
val exprWithTypes: Option[(ScExpression, Array[ScType])] =
5252
ScalaRefactoringUtil.getExpression(project, editor, file, getSelectionStart, getSelectionEnd)
5353

src/org/jetbrains/plugins/scala/annotator/AnnotatorUtils.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import org.jetbrains.plugins.scala.annotator.quickfix.ReportHighlightingErrorQui
1010
import org.jetbrains.plugins.scala.lang.psi.api.base.types.ScTypeElement
1111
import org.jetbrains.plugins.scala.lang.psi.api.expr.{ScBlockExpr, ScExpression}
1212
import org.jetbrains.plugins.scala.lang.psi.types.ScTypeExt
13-
import org.jetbrains.plugins.scala.lang.psi.types.api.{ScTypePresentation, TypeSystem}
13+
import org.jetbrains.plugins.scala.lang.psi.types.api.ScTypePresentation
14+
import org.jetbrains.plugins.scala.project.ProjectContext
1415

1516
/**
1617
* @author Aleksander Podkhalyuzin
@@ -38,8 +39,9 @@ private[annotator] object AnnotatorUtils {
3839
for (fix <- fixes) annotation.registerFix(fix)
3940
}
4041

41-
def checkConformance(expression: ScExpression, typeElement: ScTypeElement, holder: AnnotationHolder)
42-
(implicit typeSystem: TypeSystem) {
42+
def checkConformance(expression: ScExpression, typeElement: ScTypeElement, holder: AnnotationHolder) {
43+
implicit val ctx: ProjectContext = expression
44+
4345
expression.getTypeAfterImplicitConversion().tr.foreach {actual =>
4446
val expected = typeElement.calcType
4547
if (!actual.conforms(expected)) {

src/org/jetbrains/plugins/scala/annotator/ApplicationAnnotator.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ import org.jetbrains.plugins.scala.lang.psi.api.toplevel.typedef.ScTypeDefinitio
1919
import org.jetbrains.plugins.scala.lang.psi.impl.expr.ScInterpolatedPrefixReference
2020
import org.jetbrains.plugins.scala.lang.psi.impl.toplevel.synthetic.ScSyntheticFunction
2121
import org.jetbrains.plugins.scala.lang.psi.types._
22-
import org.jetbrains.plugins.scala.lang.psi.types.api.{ScTypePresentation, TypeSystem}
22+
import org.jetbrains.plugins.scala.lang.psi.types.api.ScTypePresentation
2323
import org.jetbrains.plugins.scala.lang.psi.types.nonvalue.Parameter
2424
import org.jetbrains.plugins.scala.lang.psi.types.result.TypingContext
2525
import org.jetbrains.plugins.scala.lang.resolve.ScalaResolveResult
26+
import org.jetbrains.plugins.scala.project.ProjectContext
2627

2728
/**
2829
* Pavel.Fatin, 31.05.2010
@@ -151,8 +152,9 @@ trait ApplicationAnnotator {
151152
}
152153
}
153154

154-
def annotateMethodInvocation(call: MethodInvocation, holder: AnnotationHolder)
155-
(implicit typeSystem: TypeSystem = call.typeSystem) {
155+
def annotateMethodInvocation(call: MethodInvocation, holder: AnnotationHolder) {
156+
implicit val ctx: ProjectContext = call
157+
156158
//do we need to check it:
157159
call.getEffectiveInvokedExpr match {
158160
case ref: ScReferenceElement =>

src/org/jetbrains/plugins/scala/annotator/AssignmentAnnotator.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,19 @@ import org.jetbrains.plugins.scala.lang.psi.api.expr._
1111
import org.jetbrains.plugins.scala.lang.psi.api.statements.params.ScClassParameter
1212
import org.jetbrains.plugins.scala.lang.psi.api.statements.{ScFunction, ScValue, ScVariable}
1313
import org.jetbrains.plugins.scala.lang.psi.types._
14-
import org.jetbrains.plugins.scala.lang.psi.types.api.{ScTypePresentation, TypeSystem}
14+
import org.jetbrains.plugins.scala.lang.psi.types.api.ScTypePresentation
1515
import org.jetbrains.plugins.scala.lang.psi.types.result.TypingContext
16-
import org.jetbrains.plugins.scala.lang.resolve.ResolvableReferenceExpression
1716
import org.jetbrains.plugins.scala.lang.resolve.processor.DynamicResolveProcessor
17+
import org.jetbrains.plugins.scala.project.ProjectContext
1818

1919
/**
2020
* Pavel.Fatin, 31.05.2010
2121
*/
2222

2323
trait AssignmentAnnotator {
24-
def annotateAssignment(assignment: ScAssignStmt, holder: AnnotationHolder, advancedHighlighting: Boolean)
25-
(implicit typeSystem: TypeSystem = assignment.typeSystem) {
24+
def annotateAssignment(assignment: ScAssignStmt, holder: AnnotationHolder, advancedHighlighting: Boolean) {
25+
implicit val ctx: ProjectContext = assignment
26+
2627
val left = assignment.getLExpression
2728
val right = assignment.getRExpression
2829

src/org/jetbrains/plugins/scala/annotator/FunctionAnnotator.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@ import org.jetbrains.plugins.scala.lang.psi.api.statements.ScFunctionDefinition
1010
import org.jetbrains.plugins.scala.lang.psi.types.api._
1111
import org.jetbrains.plugins.scala.lang.psi.types.result.{TypeResult, TypingContext}
1212
import org.jetbrains.plugins.scala.lang.psi.types.{ScTypeExt, ScTypesExt}
13+
import org.jetbrains.plugins.scala.project.ProjectContext
1314

1415
/**
1516
* Pavel.Fatin, 18.05.2010
1617
*/
1718

1819
trait FunctionAnnotator {
19-
def annotateFunction(function: ScFunctionDefinition, holder: AnnotationHolder, typeAware: Boolean)
20-
(implicit typeSystem: TypeSystem = function.typeSystem) {
20+
def annotateFunction(function: ScFunctionDefinition, holder: AnnotationHolder, typeAware: Boolean) {
21+
implicit val ctx: ProjectContext = function
22+
2123
if (!function.hasExplicitType && !function.returnTypeIsDefined) {
2224
function.recursiveReferences.foreach { ref =>
2325
val message = ScalaBundle.message("function.recursive.need.result.type", function.name)

src/org/jetbrains/plugins/scala/annotator/PatternAnnotator.scala

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package annotator
33

44
import com.intellij.lang.annotation.AnnotationHolder
55
import org.jetbrains.plugins.scala.extensions.{PsiMethodExt, ResolvesTo}
6-
import org.jetbrains.plugins.scala.lang.psi.ScalaPsiElement.ElementScope
76
import org.jetbrains.plugins.scala.lang.psi.ScalaPsiUtil
87
import org.jetbrains.plugins.scala.lang.psi.api.base.ScStableCodeReferenceElement
98
import org.jetbrains.plugins.scala.lang.psi.api.base.patterns._
@@ -16,6 +15,7 @@ import org.jetbrains.plugins.scala.lang.psi.types.api.{ScTypePresentation, _}
1615
import org.jetbrains.plugins.scala.lang.psi.types.result.{Success, TypingContext}
1716
import org.jetbrains.plugins.scala.lang.psi.types.{ScAbstractType, ScParameterizedType, ScType, ScTypeExt, ScalaType}
1817
import org.jetbrains.plugins.scala.lang.resolve.ScalaResolveResult
18+
import org.jetbrains.plugins.scala.project.ProjectContext
1919

2020
import scala.annotation.tailrec
2121
import scala.collection.mutable.ArrayBuffer
@@ -35,8 +35,9 @@ trait PatternAnnotator {
3535

3636
object PatternAnnotator {
3737

38-
def checkPattern(pattern: ScPattern, holder: AnnotationHolder)
39-
(implicit typeSystem: TypeSystem = pattern.typeSystem): Unit = {
38+
def checkPattern(pattern: ScPattern, holder: AnnotationHolder): Unit = {
39+
implicit val ctx: ProjectContext = pattern
40+
4041
for {
4142
pType <- PatternAnnotatorUtil.patternType(pattern)
4243
eType <- pattern.expectedType
@@ -50,8 +51,9 @@ object PatternAnnotator {
5051
* [[scala.tools.nsc.typechecker.Infer.Inferencer]] and [[scala.tools.nsc.typechecker.Checkable]]
5152
*
5253
*/
53-
private def checkPatternType(patType: ScType, exprType: ScType, pattern: ScPattern, holder: AnnotationHolder)
54-
(implicit typeSystem: TypeSystem) = {
54+
private def checkPatternType(patType: ScType, exprType: ScType, pattern: ScPattern, holder: AnnotationHolder) = {
55+
implicit val ctx: ProjectContext = pattern
56+
5557
val exTp = widen(ScalaType.expandAliases(exprType).getOrElse(exprType))
5658
def freeTypeParams = freeTypeParamsOfTerms(exTp)
5759

@@ -180,7 +182,7 @@ object PatternAnnotator {
180182
object PatternAnnotatorUtil {
181183
@tailrec
182184
def matchesPattern(matching: ScType, matched: ScType)
183-
(implicit typeSystem: TypeSystem): Boolean = {
185+
(implicit ctx: ProjectContext): Boolean = {
184186
def abstraction(scType: ScType, visited: Set[ScType] = Set.empty): ScType = {
185187
if (visited.contains(scType)) {
186188
return scType
@@ -232,9 +234,7 @@ object PatternAnnotatorUtil {
232234
val subPat = tuple.subpatterns
233235
val subTypes = subPat.flatMap(patternType)
234236
if (subTypes.size == subPat.size) {
235-
val project = pattern.getProject
236-
implicit val elementScope = ElementScope(project)
237-
Some(TupleType(subTypes))
237+
Some(TupleType(subTypes)(pattern.elementScope))
238238
}
239239
else None
240240
case typed: ScTypedPattern =>

src/org/jetbrains/plugins/scala/annotator/PatternDefinitionAnnotator.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@ import org.jetbrains.plugins.scala.annotator.AnnotatorUtils._
66
import org.jetbrains.plugins.scala.extensions._
77
import org.jetbrains.plugins.scala.lang.psi.api.base.types.ScSimpleTypeElement
88
import org.jetbrains.plugins.scala.lang.psi.api.statements.ScPatternDefinition
9-
import org.jetbrains.plugins.scala.lang.psi.types.api.TypeSystem
9+
import org.jetbrains.plugins.scala.project.ProjectContext
1010

1111
/**
1212
* Pavel.Fatin, 18.05.2010
1313
*/
1414

1515
trait PatternDefinitionAnnotator {
16-
def annotatePatternDefinition(definition: ScPatternDefinition, holder: AnnotationHolder, highlightErrors: Boolean)
17-
(implicit typeSystem: TypeSystem = definition.typeSystem) {
16+
def annotatePatternDefinition(definition: ScPatternDefinition, holder: AnnotationHolder, highlightErrors: Boolean) {
17+
implicit val ctx: ProjectContext = definition
18+
1819
if (highlightErrors && definition.pList.simplePatterns) {
1920
for (expr <- definition.expr; element <- definition.children.findByType[ScSimpleTypeElement])
2021
checkConformance(expr, element, holder)

0 commit comments

Comments
 (0)