From 764fc27787ad83dec7284e44e353ea073332e6a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Szwach=C5=82a?= Date: Sat, 11 Oct 2025 20:48:50 +0200 Subject: [PATCH 1/2] [annotator] add test cases for #SCL-21400 --- .../annotator/ScEnumCaseAnnotatorTest.scala | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/scala/scala-impl/test/org/jetbrains/plugins/scala/annotator/ScEnumCaseAnnotatorTest.scala b/scala/scala-impl/test/org/jetbrains/plugins/scala/annotator/ScEnumCaseAnnotatorTest.scala index 0626ddd3bcd..bcb3a8c5df6 100644 --- a/scala/scala-impl/test/org/jetbrains/plugins/scala/annotator/ScEnumCaseAnnotatorTest.scala +++ b/scala/scala-impl/test/org/jetbrains/plugins/scala/annotator/ScEnumCaseAnnotatorTest.scala @@ -216,4 +216,22 @@ class ScEnumCaseAnnotatorTest extends ScalaHighlightingTestBase { |} |""".stripMargin )() + + def testParentHasRequiredParameter(): Unit = + doTest( + """ + |enum Color(y: Int) { + | case Green + |} + |""".stripMargin + )(Error("Green", "Explicit extends clause required because its enum class Color has required parameters")) + + def testParentHasParameterWithDefault(): Unit = + doTest( + """ + |enum Color(y: Int = 1) { + | case Green + |} + |""".stripMargin + )() } From 6f95beb3752c6b5d6e4430f41bb3cd2ee9eb5ff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Szwach=C5=82a?= Date: Sat, 11 Oct 2025 20:57:03 +0200 Subject: [PATCH 2/2] [annotator] annotate extends clause required if enum class has required parameters #SCL-21400 fixed --- scala/scala-impl/resources/messages/ScalaBundle.properties | 1 + .../scala/annotator/element/ScEnumCaseAnnotator.scala | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/scala/scala-impl/resources/messages/ScalaBundle.properties b/scala/scala-impl/resources/messages/ScalaBundle.properties index c02bb821a65..d478eae860e 100644 --- a/scala/scala-impl/resources/messages/ScalaBundle.properties +++ b/scala/scala-impl/resources/messages/ScalaBundle.properties @@ -233,6 +233,7 @@ annotator.error.cannot.apply.constructor=Cannot apply constructor {0} annotator.error.enum.nonvariant.type.param,in.enum=Cannot determine type argument for enum class parent {0}, type parameter {1} is invariant annotator.error.enum.case.must.extend.parent=Enum case must extend its enum class {0} annotator.error.enum.two.type.parameter.clauses=Explicit extends clause required because both enum case and enum class have type parameters +annotator.error.enum.parent.has.required.parameters=Explicit extends clause required because its enum class {0} has required parameters ### org/jetbrains/plugins/scala/annotator/element/ScEnumeratorsAnnotator.scala semicolon.not.allowed.here=Semicolon not allowed here diff --git a/scala/scala-impl/src/org/jetbrains/plugins/scala/annotator/element/ScEnumCaseAnnotator.scala b/scala/scala-impl/src/org/jetbrains/plugins/scala/annotator/element/ScEnumCaseAnnotator.scala index 4e5056bc53e..aa3d616ea51 100644 --- a/scala/scala-impl/src/org/jetbrains/plugins/scala/annotator/element/ScEnumCaseAnnotator.scala +++ b/scala/scala-impl/src/org/jetbrains/plugins/scala/annotator/element/ScEnumCaseAnnotator.scala @@ -63,5 +63,12 @@ object ScEnumCaseAnnotator extends ElementAnnotator[ScEnumCase] { ScalaBundle.message("annotator.error.enum.two.type.parameter.clauses") ) } + + if (enumDef.parameters.exists(!_.isDefaultParam) && parents.isEmpty) { + holder.createErrorAnnotation( + cse.nameId, + ScalaBundle.message("annotator.error.enum.parent.has.required.parameters", enumDef.name) + ) + } } }