Skip to content

Commit

Permalink
Fixed higher-kinded types in case classes #SCL-8933 Fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
Alefas committed Oct 8, 2015
1 parent 8701838 commit ef29af7
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 17 deletions.
Expand Up @@ -9,7 +9,7 @@ import com.intellij.psi.util.PsiModificationTracker
import com.intellij.psi.{PsiElement, PsiMethod}
import org.jetbrains.plugins.scala.lang.lexer.ScalaTokenTypes
import org.jetbrains.plugins.scala.lang.psi.api.base.ScPrimaryConstructor
import org.jetbrains.plugins.scala.lang.psi.api.statements.params.ScParameters
import org.jetbrains.plugins.scala.lang.psi.api.statements.params.{ScTypeParam, ScParameters}
import org.jetbrains.plugins.scala.lang.psi.api.statements.{ScFunction, ScFunctionDefinition, ScParameterOwner}
import org.jetbrains.plugins.scala.lang.psi.impl.ScalaPsiElementFactory

Expand Down Expand Up @@ -43,23 +43,30 @@ trait ScClass extends ScTypeDefinition with ScParameterOwner {
}
}

protected def typeParamString : String = if (typeParameters.nonEmpty) typeParameters.map(param => {
var paramText = param.name
param.lowerTypeElement foreach {
case tp => paramText = paramText + " >: " + tp.getText
protected def typeParamString : String = {
def typeParamString(param: ScTypeParam): String = {
var paramText = param.name
if (param.typeParameters.nonEmpty) {
paramText += param.typeParameters.map(typeParamString).mkString("[", ", ", "]")
}
param.lowerTypeElement foreach {
case tp => paramText = paramText + " >: " + tp.getText
}
param.upperTypeElement foreach {
case tp => paramText = paramText + " <: " + tp.getText
}
param.viewTypeElement foreach {
case tp => paramText = paramText + " <% " + tp.getText
}
param.contextBoundTypeElement foreach {
case tp => paramText = paramText + " : " + tp.getText
}
paramText
}
param.upperTypeElement foreach {
case tp => paramText = paramText + " <: " + tp.getText
}
param.viewTypeElement foreach {
case tp => paramText = paramText + " <% " + tp.getText
}
param.contextBoundTypeElement foreach {
case tp => paramText = paramText + " : " + tp.getText
}
paramText
}).mkString("[", ", ", "]")
else ""

if (typeParameters.nonEmpty) typeParameters.map(typeParamString).mkString("[", ", ", "]")
else ""
}

def getSyntheticMethodsText: List[String] = {
val paramString = constructor match {
Expand Down
Expand Up @@ -697,6 +697,8 @@ class TypeInferenceBugs5Test extends TypeInferenceTestBase {

def testSCL8398(): Unit = doTest()

def testSCL8933(): Unit = doTest()

def testSCL8989(): Unit = doTest()

def testSCL8995(): Unit = doTest()
Expand Down
5 changes: 5 additions & 0 deletions testdata/typeInference/bugs5/SCL8933.scala
@@ -0,0 +1,5 @@
case class R[F[_], T](f: F[T])
class B[T]
val r = R(new B[Int])
/*start*/r/*end*/
//R[B, Int]

0 comments on commit ef29af7

Please sign in to comment.