[KAPT] KT-64301 Report invalid enum value names

Merge-request: KT-MR-13520
Merged-by: Pavel Mikhailovskii <Pavel.Mikhailovskii@jetbrains.com>
This commit is contained in:
strangepleasures
2023-12-13 17:53:52 +00:00
committed by Space Team
parent 676e350b6f
commit 1015ae858e
4 changed files with 57 additions and 8 deletions
@@ -0,0 +1,51 @@
/**
* public final annotation class Anno : kotlin/Annotation {
*
* // signature: <init>(LColor;)V
* public constructor(color: Color)
*
* // getter: color()LColor;
* public final val color: Color
* public final get
*
* // module name: main
* }
*/
@kotlin.Metadata()
@Anno(color = Color.InvalidFieldName)
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
public abstract @interface Anno {
public abstract Color color();
}
////////////////////
/**
* public final enum class Color : kotlin/Enum<Color> {
*
* // signature: <init>(Ljava/lang/String;I)V
* private constructor()
*
* BLACK,
*
* WHI-TE,
*
* // module name: main
*
* // has Enum.entries
* }
*/
@kotlin.Metadata()
public enum Color {
/*public static final*/ BLACK /* = new Color() */;
Color() {
}
@org.jetbrains.annotations.NotNull()
public static kotlin.enums.EnumEntries<Color> getEntries() {
return null;
}
}
@@ -1,4 +1,3 @@
// FIR_BLOCKED: LC don't support illegal java identifiers
enum class Color {
BLACK, `WHI-TE`
}
@@ -6,5 +5,5 @@ enum class Color {
@Anno(Color.`WHI-TE`)
annotation class Anno(val color: Color)
// EXPECTED_ERROR: (kotlin:6:1) an enum annotation value must be an enum constant
// EXPECTED_ERROR: (kotlin:5:1) an enum annotation value must be an enum constant
// EXPECTED_ERROR: (other:-1:-1) 'WHI-TE' is an invalid Java enum value name
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.psi.psiUtil.parameterIndex
import org.jetbrains.kotlin.resolve.calls.util.getCalleeExpressionIfAny
import org.jetbrains.kotlin.utils.toMetadataVersion
import org.jetbrains.kotlin.kapt3.base.KaptOptions
import org.jetbrains.kotlin.kapt3.base.javac.kaptError
import org.jetbrains.kotlin.kapt3.stubs.MembersPositionComparator
import org.jetbrains.kotlin.psi.psiUtil.children
import org.jetbrains.kotlin.utils.Printer
@@ -466,7 +467,9 @@ private class StubGenerator(
private fun convertDotQualifiedExpression(dotQualifiedExpression: KtDotQualifiedExpression): String? {
val qualifier = dotQualifiedExpression.lastChild as? KtNameReferenceExpression ?: return null
val name = qualifier.text.takeIf { isValidIdentifier(it) } ?: "InvalidFieldName"
val name = qualifier.text.takeIf { isValidIdentifier(it) } ?: "InvalidFieldName".also {
onError("'${qualifier.text.removeSurrounding("`")}' is an invalid Java enum value name")
}
val lhs = when (val left = dotQualifiedExpression.firstChild) {
is KtNameReferenceExpression -> left.getReferencedName()
is KtDotQualifiedExpression -> convertDotQualifiedExpression(left) ?: return null
@@ -85,11 +85,7 @@ private fun run(
WriterBackedKaptLogger(isVerbose = false),
)
val onError = { message: String ->
if (context.options[KaptFlag.STRICT]) {
context.reportKaptError(*message.split("\n").toTypedArray())
} else {
context.logger.warn(message)
}
context.reportKaptError(*message.split("\n").toTypedArray())
}
return context to generateStubs(module, files, options, onError, metadataRenderer = { renderMetadata(it) })
}