Skip to content

Commit 63b7c4c

Browse files
committed
Merge branch '2016.3' into 2017.1
2 parents ab7b1d5 + 874cc7c commit 63b7c4c

File tree

5 files changed

+39
-25
lines changed

5 files changed

+39
-25
lines changed

src/main/kotlin/com/demonwav/mcdev/platform/mixin/MixinModuleType.kt

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,42 +13,19 @@ package com.demonwav.mcdev.platform.mixin
1313
import com.demonwav.mcdev.facet.MinecraftFacet
1414
import com.demonwav.mcdev.platform.AbstractModuleType
1515
import com.demonwav.mcdev.platform.PlatformType
16-
import com.demonwav.mcdev.platform.mixin.util.MixinConstants.Annotations
1716

1817
object MixinModuleType : AbstractModuleType<MixinModule>("org.spongepowered", "mixin") {
1918

2019
const val ID = "MIXIN_MODULE_TYPE"
2120

22-
private val IGNORED_ANNOTATIONS = listOf(
23-
Annotations.DEBUG,
24-
Annotations.FINAL,
25-
Annotations.IMPLEMENTS,
26-
Annotations.INTERFACE,
27-
Annotations.INTRINSIC,
28-
Annotations.MIXIN,
29-
Annotations.MUTABLE,
30-
Annotations.OVERWRITE,
31-
Annotations.SHADOW,
32-
Annotations.SOFT_OVERRIDE,
33-
Annotations.UNIQUE,
34-
Annotations.INJECT,
35-
Annotations.MODIFY_ARG,
36-
Annotations.MODIFY_CONSTANT,
37-
Annotations.MODIFY_VARIABLE,
38-
Annotations.REDIRECT,
39-
Annotations.SURROGATE
40-
)
41-
42-
private val LISTENER_ANNOTATIONS = emptyList<String>()
43-
4421
override fun getPlatformType() = PlatformType.MIXIN
4522
override fun getIcon() = null
4623
override fun hasIcon() = false
4724

4825
override fun getId(): String = ID
4926

50-
override fun getIgnoredAnnotations() = IGNORED_ANNOTATIONS
51-
override fun getListenerAnnotations() = LISTENER_ANNOTATIONS
27+
override fun getIgnoredAnnotations() = emptyList<String>()
28+
override fun getListenerAnnotations() = emptyList<String>()
5229

5330
override fun generateModule(facet: MinecraftFacet) = MixinModule(facet)
5431
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Minecraft Dev for IntelliJ
3+
*
4+
* https://minecraftdev.org
5+
*
6+
* Copyright (c) 2017 minecraft-dev
7+
*
8+
* MIT License
9+
*/
10+
11+
package com.demonwav.mcdev.platform.mixin.insight
12+
13+
import com.demonwav.mcdev.platform.mixin.util.MixinConstants
14+
import com.demonwav.mcdev.platform.mixin.util.isShadow
15+
import com.demonwav.mcdev.util.findAnnotation
16+
import com.intellij.codeInsight.daemon.ImplicitUsageProvider
17+
import com.intellij.psi.PsiElement
18+
import com.intellij.psi.PsiField
19+
import com.intellij.psi.PsiMethod
20+
21+
class MixinImplicitUsageProvider : ImplicitUsageProvider {
22+
23+
override fun isImplicitUsage(element: PsiElement) = element is PsiMethod && MixinConstants.Annotations.ENTRY_POINTS.any {
24+
element.findAnnotation(it) != null
25+
}
26+
27+
private fun isShadow(element: PsiElement) = element is PsiField && element.isShadow
28+
29+
override fun isImplicitRead(element: PsiElement) = isShadow(element)
30+
override fun isImplicitWrite(element: PsiElement) = isShadow(element)
31+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ object MixinConstants {
5151
const val SURROGATE = "org.spongepowered.asm.mixin.injection.Surrogate"
5252

5353
@JvmField val METHOD_INJECTORS = listOf(INJECT, MODIFY_ARG, MODIFY_CONSTANT, MODIFY_VARIABLE, REDIRECT)
54+
@JvmField val ENTRY_POINTS = listOf(INJECT, MODIFY_ARG, MODIFY_CONSTANT, MODIFY_VARIABLE, REDIRECT, SURROGATE, OVERWRITE)
5455
@JvmField val MIXIN_ANNOTATIONS = setOf(
5556
ACCESSOR, AT, DEBUG, FINAL, IMPLEMENTS, INTERFACE, INTRINSIC, MIXIN, MUTABLE, OVERWRITE, SHADOW, SOFT_OVERRIDE, UNIQUE, INJECT,
5657
INVOKER, MODIFY_ARG, MODIFY_CONSTANT, MODIFY_VARIABLE, REDIRECT, SURROGATE)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ import com.intellij.psi.PsiMember
2828
import com.intellij.psi.PsiMethod
2929
import org.jetbrains.annotations.Contract
3030

31+
@get:Contract(pure = true)
32+
val PsiMember.isShadow
33+
get() = findAnnotation(SHADOW) != null
34+
3135
@Contract(pure = true)
3236
fun PsiMember.findFirstShadowTarget(): PsiMember? {
3337
val shadow = findAnnotation(SHADOW) ?: return null

src/main/resources/META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
<externalProjectDataService implementation="com.demonwav.mcdev.platform.mcp.gradle.McpDataService"/>
6666

6767
<lang.inspectionSuppressor language="JAVA" implementationClass="com.demonwav.mcdev.platform.mixin.inspection.shadow.ShadowNullableInspectionSuppressor"/>
68+
<implicitUsageProvider implementation="com.demonwav.mcdev.platform.mixin.insight.MixinImplicitUsageProvider"/>
6869

6970
<!-- Mixin completion -->
7071
<superMethodsSearch implementation="com.demonwav.mcdev.platform.mixin.search.MixinSoftImplementMethodSuperSearcher"/>

0 commit comments

Comments
 (0)