Skip to content

Commit 89ac451

Browse files
committed
mixin: Avoid looking up target for Shadows with a single alias
Fixes #367
1 parent 164117c commit 89ac451

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

src/main/kotlin/com/demonwav/mcdev/platform/mixin/util/Shadow.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.demonwav.mcdev.util.findMatchingField
1818
import com.demonwav.mcdev.util.findMatchingMethod
1919
import com.demonwav.mcdev.util.findMatchingMethods
2020
import com.demonwav.mcdev.util.ifEmpty
21+
import com.demonwav.mcdev.util.isNotEmpty
2122
import com.demonwav.mcdev.util.mapFirstNotNull
2223
import com.intellij.psi.PsiAnnotation
2324
import com.intellij.psi.PsiArrayInitializerMemberValue
@@ -69,10 +70,7 @@ fun resolveShadowTargets(shadow: PsiAnnotation, targetClasses: Collection<PsiCla
6970
}
7071
}
7172

72-
private fun hasAliases(shadow: PsiAnnotation): Boolean {
73-
val aliases = shadow.findDeclaredAttributeValue("aliases") as? PsiArrayInitializerMemberValue ?: return false
74-
return aliases.initializers.isNotEmpty()
75-
}
73+
private fun hasAliases(shadow: PsiAnnotation): Boolean = shadow.findDeclaredAttributeValue("aliases").isNotEmpty()
7674

7775
@Contract(pure = true)
7876
private fun stripPrefix(shadow: PsiAnnotation, member: PsiMember): String? {

src/main/kotlin/com/demonwav/mcdev/util/annotation-utils.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,17 @@ fun PsiAnnotationMemberValue.resolveClass(): PsiClass? {
4949
return (operand.type as PsiClassType).resolve()
5050
}
5151

52+
/**
53+
* Returns `true` if the annotation value is present (not `null`) and
54+
* initialized either to a single value or an array with at least one
55+
* element.
56+
*
57+
* @return `true` if the annotation member is not empty
58+
*/
59+
fun PsiAnnotationMemberValue?.isNotEmpty(): Boolean {
60+
return this != null && (this !is PsiArrayInitializerMemberValue || initializers.isNotEmpty())
61+
}
62+
5263
@Contract(pure = true)
5364
private inline fun <T : Any> PsiAnnotationMemberValue.parseArray(func: (PsiAnnotationMemberValue) -> T?): List<T> {
5465
return if (this is PsiArrayInitializerMemberValue) {

0 commit comments

Comments
 (0)