Skip to content

Commit e432f7a

Browse files
author
builduser
committed
Merged branch idea241.x-tobias/given-name-fixes into idea241.x
2 parents f54199b + 6ff2755 commit e432f7a

File tree

8 files changed

+99
-28
lines changed

8 files changed

+99
-28
lines changed

scala/scala-impl/src/org/jetbrains/plugins/scala/lang/psi/ScalaPsiUtil.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1708,6 +1708,8 @@ object ScalaPsiUtil {
17081708
case ScInfixTypeElement(_, op, _) => op.refName
17091709
case ScParameterizedTypeElement(base, args) if isRoot => (transform(isRoot)(base) +: args.map(transformInner)).mkString("_")
17101710
case ScParameterizedTypeElement(base, _) => transformInner(base)
1711+
case e: ScTypeVariableTypeElement => e.name
1712+
case e: ScAnnotTypeElement => transform(isRoot)(e.typeElement)
17111713
case ScCompoundTypeElement(tes, _) if isRoot =>
17121714
tes
17131715
.take(2) // we take two elements at most, (A with B with C) means (A with (B with C)), so C is too deep

scala/scala-impl/test/org/jetbrains/plugins/scala/lang/psi/GenerateGivenNameTest.scala

Lines changed: 74 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ import junit.framework.{Test, TestCase}
44
import org.jetbrains.plugins.scala.ScalaVersion
55
import org.jetbrains.plugins.scala.extensions.PsiElementExt
66
import org.jetbrains.plugins.scala.lang.psi.api.ScFile
7+
import org.jetbrains.plugins.scala.lang.psi.api.base.patterns.ScGivenPattern
8+
import org.jetbrains.plugins.scala.lang.psi.api.toplevel.ScNamedElement
79
import org.jetbrains.plugins.scala.lang.psi.api.toplevel.typedef.ScGiven
810
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory
11+
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory.SingleCodeTestData
912

1013
class GenerateGivenNameTest extends TestCase
1114

@@ -69,6 +72,19 @@ object GenerateGivenNameTest extends GeneratedTestSuiteFactory {
6972
|""".stripMargin,
7073
"given_Byte_Short_Int"
7174
),
75+
GivenNameTestData(
76+
"""
77+
|given [email protected] = ???
78+
|""".stripMargin,
79+
"given_Int"
80+
),
81+
GivenNameTestData(
82+
"""
83+
|trait Test[A]
84+
|given (Test[Int]@java.lang.Deprecated)@java.lang.Deprecated = ???
85+
|""".stripMargin,
86+
"given_Test_Int"
87+
),
7288

7389
//////////////////// functions /////////////////
7490
GivenNameTestData(
@@ -326,36 +342,81 @@ object GenerateGivenNameTest extends GeneratedTestSuiteFactory {
326342
|""".stripMargin,
327343
"given_Seq_T"
328344
),
345+
346+
//////////////////// patterns /////////////////
347+
GivenNameTestData.pattern(
348+
"trait Test[A]",
349+
"given Test[a]",
350+
"given_Test_a"
351+
),
329352
)
330353

331-
case class GivenNameTestData(override val testCode: String, expectedGivenName: String) extends TestData {
332-
override def testName: String = testCode.trim.linesIterator.toSeq.last.replaceAll(raw"([\s\n])+", " ")
333-
override def checkCodeFragment: String = {
334-
s"""
335-
|object GivenHolder {
336-
| ${testCode.trim.replace("\n", "\n ")}
337-
|}
338-
|println(GivenHolder.`$expectedGivenName`)
339-
|""".stripMargin
354+
abstract class GivenNameTestData extends SingleCodeTestData {
355+
def expectedGivenName: String
356+
}
357+
358+
object GivenNameTestData {
359+
def apply(testCode: String, expectedGivenName: String): GivenNameTestData = GivenDeclOrDefNameTestData(testCode, expectedGivenName)
360+
def pattern(preamble: String, pattern: String, expectedGivenName: String): GivenNameTestData = GivenPatternNameTestData(preamble, pattern, expectedGivenName)
361+
362+
private def extractTestName(code: String): String =
363+
code.trim.linesIterator.toSeq.last.replaceAll(raw"([\s\n])+", " ")
364+
365+
private case class GivenDeclOrDefNameTestData(override val testCode: String,
366+
override val expectedGivenName: String) extends GivenNameTestData {
367+
override def testName: String = extractTestName(testCode)
368+
369+
override def checkCodeFragment: String = {
370+
s"""
371+
|object GivenHolder {
372+
| ${testCode.trim.replace("\n", "\n ")}
373+
|}
374+
|println(GivenHolder.`$expectedGivenName`)
375+
|""".stripMargin
376+
}
377+
}
378+
379+
private case class GivenPatternNameTestData(preamble: String,
380+
pattern: String,
381+
override val expectedGivenName: String) extends GivenNameTestData {
382+
override def testName: String = extractTestName(pattern)
383+
384+
override val testCode: String =
385+
s"""
386+
|$preamble
387+
|
388+
|??? match {
389+
| case $pattern =>
390+
|}
391+
|""".stripMargin
392+
393+
override def checkCodeFragment: String =
394+
s"""
395+
|$preamble
396+
|
397+
|??? match {
398+
| case $pattern => println($expectedGivenName)
399+
|}
400+
|""".stripMargin
340401
}
341402
}
342403

343404
override def makeActualTest(testData: GivenNameTestData): Test =
344405
new SimpleActualTest(testData, ScalaVersion.Latest.Scala_3) {
345406
override def runActualTest(): Unit = {
346-
val GivenNameTestData(code, expectedName) = testData
347-
val tree = code.parse[ScFile]
407+
val tree = testData.testCode.parse[ScFile]
348408

349409
tree.hasParseError shouldBe false
350410

351-
val givens = tree.elements.collect {
411+
val givens: Seq[ScNamedElement] = tree.elements.collect {
352412
case given: ScGiven => given
413+
case pattern: ScGivenPattern => pattern
353414
}.toSeq
354415

355416
givens.length shouldBe 1
356417

357418
val givenElement = givens.head
358-
givenElement.name shouldBe expectedName
419+
givenElement.name shouldBe testData.expectedGivenName
359420
}
360421
}
361422
}

scala/scala-impl/test/org/jetbrains/plugins/scala/lang/typeInference/Scala2UnapplySeqTest.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.jetbrains.plugins.scala.lang.typeInference
22

33
import junit.framework.TestCase
44
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory
5+
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory.SimpleTestData
56
import org.jetbrains.plugins.scala.{ScalaVersion, TypecheckerTests}
67
import org.junit.experimental.categories.Category
78

@@ -11,7 +12,7 @@ class Scala2UnapplySeqTest extends TestCase
1112

1213
object Scala2UnapplySeqTest extends GeneratedTestSuiteFactory.withHighlightingTest(ScalaVersion.Latest.Scala_2_13) {
1314
// https://www.scala-lang.org/files/archive/spec/2.13/08-pattern-matching.html#pattern-sequences
14-
lazy val testData: Seq[TestData] = Seq(
15+
lazy val testData: Seq[SimpleTestData] = Seq(
1516
s"""
1617
|// seqWithoutExtractorType
1718
|object A {

scala/scala-impl/test/org/jetbrains/plugins/scala/lang/typeInference/Scala2UnapplyTest.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.jetbrains.plugins.scala.lang.typeInference
22

33
import junit.framework.TestCase
44
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory
5+
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory.SimpleTestData
56
import org.jetbrains.plugins.scala.{ScalaVersion, TypecheckerTests}
67
import org.junit.experimental.categories.Category
78

@@ -11,7 +12,7 @@ class Scala2UnapplyTest extends TestCase
1112

1213
object Scala2UnapplyTest extends GeneratedTestSuiteFactory.withHighlightingTest(ScalaVersion.Latest.Scala_2_13) {
1314
// See https://www.scala-lang.org/files/archive/spec/2.13/08-pattern-matching.html#constructor-patterns
14-
lazy val testData: Seq[TestData] = Seq(
15+
lazy val testData: Seq[SimpleTestData] = Seq(
1516
// ============= Boolean Match =============
1617
"""
1718
|// booleanExtractor

scala/scala-impl/test/org/jetbrains/plugins/scala/lang/typeInference/Scala3CaseClassTest.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.jetbrains.plugins.scala.lang.typeInference
22

33
import junit.framework.TestCase
44
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory
5+
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory.SimpleTestData
56
import org.jetbrains.plugins.scala.{ScalaVersion, TypecheckerTests}
67
import org.junit.experimental.categories.Category
78

@@ -10,7 +11,7 @@ import org.junit.experimental.categories.Category
1011
class Scala3CaseClassTest extends TestCase
1112

1213
object Scala3CaseClassTest extends GeneratedTestSuiteFactory.withHighlightingTest(ScalaVersion.Latest.Scala_3_3) {
13-
lazy val testData: Seq[TestData] = Seq(
14+
lazy val testData: Seq[SimpleTestData] = Seq(
1415
"""
1516
|// testUnapplyMethod0Param
1617
|case class A()

scala/scala-impl/test/org/jetbrains/plugins/scala/lang/typeInference/Scala3UnapplySeqTest.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.jetbrains.plugins.scala.lang.typeInference
22

33
import junit.framework.TestCase
44
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory
5+
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory.SimpleTestData
56
import org.jetbrains.plugins.scala.{ScalaVersion, TypecheckerTests}
67
import org.junit.experimental.categories.Category
78

@@ -11,7 +12,7 @@ class Scala3UnapplySeqTest extends TestCase
1112

1213
object Scala3UnapplySeqTest extends GeneratedTestSuiteFactory.withHighlightingTest(ScalaVersion.Latest.Scala_3_3) {
1314
// See https://docs.scala-lang.org/scala3/reference/changed-features/pattern-matching.html#
14-
lazy val testData: Seq[TestData] = Seq(
15+
lazy val testData: Seq[SimpleTestData] = Seq(
1516
// ============= Direct Sequence match =============
1617
s"""
1718
|// directSequenceMatchWithSeq

scala/scala-impl/test/org/jetbrains/plugins/scala/lang/typeInference/Scala3UnapplyTest.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.jetbrains.plugins.scala.lang.typeInference
22

33
import junit.framework.TestCase
44
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory
5+
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory.SimpleTestData
56
import org.jetbrains.plugins.scala.{ScalaVersion, TypecheckerTests}
67
import org.junit.experimental.categories.Category
78

@@ -11,7 +12,7 @@ class Scala3UnapplyTest extends TestCase
1112

1213
object Scala3UnapplyTest extends GeneratedTestSuiteFactory.withHighlightingTest(ScalaVersion.Latest.Scala_3_3) {
1314
// See https://docs.scala-lang.org/scala3/reference/changed-features/pattern-matching.html#
14-
lazy val testData: Seq[TestData] = Seq(
15+
lazy val testData: Seq[SimpleTestData] = Seq(
1516
// ============= Boolean Match =============
1617
"""
1718
|// booleanExtractor

scala/scala-impl/test/org/jetbrains/plugins/scala/util/GeneratedTestSuiteFactory.scala

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import junit.framework.{Test, TestSuite}
55
import org.jetbrains.plugins.scala.ScalaVersion
66
import org.jetbrains.plugins.scala.base.{ScalaLightCodeInsightFixtureTestCase, SharedTestProjectToken, SimpleTestCase}
77
import org.jetbrains.plugins.scala.extensions.BooleanExt
8-
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory.SimpleTestData
8+
import org.jetbrains.plugins.scala.util.GeneratedTestSuiteFactory.{SimpleTestData, SingleCodeTestData}
99
import org.jetbrains.plugins.scala.util.assertions.AssertionMatchers
1010
import org.junit.Ignore
1111

@@ -23,11 +23,11 @@ abstract class GeneratedTestSuiteFactory {
2323
testSuite
2424
}
2525

26-
protected final def testDataFromCode(code: String): TestData = SimpleTestData.fromCode(code)
26+
protected final def testDataFromCode(code: String): SimpleTestData = SimpleTestData.fromCode(code)
2727

2828
//noinspection JUnitMalformedDeclaration
2929
@Ignore
30-
protected class SimpleHighlightingActualTest(testData: TestData, minScalaVersion: ScalaVersion) extends ScalaLightCodeInsightFixtureTestCase with AssertionMatchers {
30+
protected class SimpleHighlightingActualTest(testData: SingleCodeTestData, minScalaVersion: ScalaVersion) extends ScalaLightCodeInsightFixtureTestCase with AssertionMatchers {
3131
this.setName(testData.testName)
3232

3333
override protected def sharedProjectToken: SharedTestProjectToken = SharedTestProjectToken(GeneratedTestSuiteFactory)
@@ -58,7 +58,6 @@ abstract class GeneratedTestSuiteFactory {
5858
object GeneratedTestSuiteFactory {
5959
trait TestData {
6060
def testName: String
61-
def testCode: String
6261
def checkCodeFragment: String
6362
def failureExpectation: Option[FailureExpectation] = None
6463

@@ -78,11 +77,15 @@ object GeneratedTestSuiteFactory {
7877
assert(line.nonEmpty || message.nonEmpty)
7978
}
8079

81-
case class TestDataErrorMessage(scalaPluginMessage: String, scalaCompilerMessage: String)
80+
trait SingleCodeTestData extends TestData {
81+
def testCode: String
82+
}
83+
84+
final case class TestDataErrorMessage(scalaPluginMessage: String, scalaCompilerMessage: String)
8285

83-
case class SimpleTestData(override val testName: String,
84-
override val testCode: String,
85-
override val failureExpectation: Option[FailureExpectation]) extends TestData {
86+
final case class SimpleTestData(override val testName: String,
87+
override val testCode: String,
88+
override val failureExpectation: Option[FailureExpectation]) extends SingleCodeTestData {
8689
override def checkCodeFragment: String = testCode
8790
}
8891

@@ -104,7 +107,7 @@ object GeneratedTestSuiteFactory {
104107
}
105108

106109
abstract class withHighlightingTest(minScalaVersion: ScalaVersion) extends GeneratedTestSuiteFactory {
107-
override type TD = TestData
108-
final def makeActualTest(testData: TestData): Test = new SimpleHighlightingActualTest(testData, minScalaVersion)
110+
override type TD = SingleCodeTestData
111+
final def makeActualTest(testData: SingleCodeTestData): Test = new SimpleHighlightingActualTest(testData, minScalaVersion)
109112
}
110113
}

0 commit comments

Comments
 (0)