Skip to content

Commit c5db6ac

Browse files
committed
mixin: Allow overwrites with a higher visibility than the target
1 parent 8716fdb commit c5db6ac

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

src/main/kotlin/com/demonwav/mcdev/platform/mixin/inspection/overwrite/OverwriteModifiersInspection.kt

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,28 @@ class OverwriteModifiersInspection : OverwriteInspection() {
3636
val nameIdentifier = method.nameIdentifier ?: return
3737
val modifierList = method.modifierList
3838

39+
// Check access modifiers
40+
val targetAccessLevel = PsiUtil.getAccessLevel(target)
41+
val currentAccessLevel = PsiUtil.getAccessLevel(modifierList)
42+
if (currentAccessLevel < targetAccessLevel) {
43+
val targetModifier = PsiUtil.getAccessModifier(targetAccessLevel)
44+
val currentModifier = PsiUtil.getAccessModifier(currentAccessLevel)
45+
holder.registerProblem(modifierList.findKeyword(currentModifier) ?: nameIdentifier,
46+
"$currentModifier @Overwrite cannot reduce visibility of ${PsiUtil.getAccessModifier(targetAccessLevel)} target method",
47+
QuickFixFactory.getInstance().createModifierListFix(modifierList, targetModifier, true, false))
48+
}
49+
3950
for (modifier in PsiModifier.MODIFIERS) {
51+
if (isAccessModifier(modifier)) {
52+
// Access modifiers are already checked above
53+
continue
54+
}
55+
4056
val targetModifier = target.hasModifierProperty(modifier)
4157
val overwriteModifier = modifierList.hasModifierProperty(modifier)
4258
if (targetModifier != overwriteModifier) {
4359
val marker: PsiElement
44-
val message = if (isAccessModifier(modifier)) {
45-
if (!targetModifier) {
46-
// Don't attempt to remove access modifiers
47-
continue
48-
}
49-
50-
val currentModifier = PsiUtil.getAccessModifier(PsiUtil.getAccessLevel(modifierList))
51-
marker = modifierList.findKeyword(currentModifier) ?: nameIdentifier
52-
"Invalid access modifiers, has: $currentModifier, but target has: $overwriteModifier"
53-
} else if (targetModifier) {
60+
val message = if (targetModifier) {
5461
marker = nameIdentifier
5562
"Method must be '$modifier'"
5663
} else {

0 commit comments

Comments
 (0)