User: joe Date: 24 Nov 25 00:26 Revision: d6b0d831fc77e59fe603c4e0fbb7f1fd84ce90a8 Summary: Treat classTweaker header as v3. Fixes #2547 TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=10315&personal=false Index: src/main/kotlin/platform/mcp/ct/CtAnnotator.kt =================================================================== --- src/main/kotlin/platform/mcp/ct/CtAnnotator.kt (revision f107172f603824afa14a03ac523ab7268410f688) +++ src/main/kotlin/platform/mcp/ct/CtAnnotator.kt (revision d6b0d831fc77e59fe603c4e0fbb7f1fd84ce90a8) @@ -46,7 +46,7 @@ } if (element.accessElement.text.startsWith("transitive-") && - element.containingFile?.childOfType()?.versionString == "v1" + element.containingFile?.childOfType()?.effectiveVersion == 1 ) { holder.newAnnotation(HighlightSeverity.ERROR, "Transitive accesses were introduced in v2").create() } Index: src/main/kotlin/platform/mcp/ct/psi/mixins/CtHeaderMixin.kt =================================================================== --- src/main/kotlin/platform/mcp/ct/psi/mixins/CtHeaderMixin.kt (revision f107172f603824afa14a03ac523ab7268410f688) +++ src/main/kotlin/platform/mcp/ct/psi/mixins/CtHeaderMixin.kt (revision d6b0d831fc77e59fe603c4e0fbb7f1fd84ce90a8) @@ -24,6 +24,8 @@ interface CtHeaderMixin : CtElement { + val nameString: String val versionString: String? val namespaceString: String? + val effectiveVersion: Int? } Index: src/main/kotlin/platform/mcp/ct/psi/mixins/impl/CtHeaderImplMixin.kt =================================================================== --- src/main/kotlin/platform/mcp/ct/psi/mixins/impl/CtHeaderImplMixin.kt (revision f107172f603824afa14a03ac523ab7268410f688) +++ src/main/kotlin/platform/mcp/ct/psi/mixins/impl/CtHeaderImplMixin.kt (revision d6b0d831fc77e59fe603c4e0fbb7f1fd84ce90a8) @@ -24,13 +24,33 @@ import com.demonwav.mcdev.platform.mcp.ct.psi.mixins.CtHeaderMixin import com.intellij.extapi.psi.ASTWrapperPsiElement import com.intellij.lang.ASTNode +import com.intellij.openapi.diagnostic.logger import com.intellij.psi.PsiElement abstract class CtHeaderImplMixin(node: ASTNode) : ASTWrapperPsiElement(node), CtHeaderMixin { + companion object { + private val LOG = logger() + } + override val nameString: String + get() = findNotNullChildByType(CtTypes.HEADER_NAME).text + override val versionString: String? get() = findChildByType(CtTypes.HEADER_VERSION_ELEMENT)?.text override val namespaceString: String? get() = findChildByType(CtTypes.HEADER_NAMESPACE_ELEMENT)?.text + + override val effectiveVersion: Int? + get() { + val version = versionString?.removePrefix("v")?.toIntOrNull() ?: return null + return when (nameString) { + "accessWidener" -> version + "classTweaker" -> version + 2 + else -> { + LOG.error("Unknown header name: $nameString") + null -} + } + } + } +}