Skip to content

Commit 993fc22

Browse files
committed
Warn in Sponge plugins that use java.util.Logger
Closes #361
1 parent 2b92bf7 commit 993fc22

File tree

7 files changed

+95
-6
lines changed

7 files changed

+95
-6
lines changed

src/main/kotlin/com/demonwav/mcdev/platform/AbstractModule.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,7 @@ abstract class AbstractModule(protected val facet: MinecraftFacet) {
5959
open fun generateEventListenerMethod(containingClass: PsiClass,
6060
chosenClass: PsiClass,
6161
chosenName: String,
62-
data: GenerationData?): PsiMethod? {
63-
return null
64-
}
62+
data: GenerationData?): PsiMethod? = null
6563

6664
@Contract(value = "null -> false", pure = true)
6765
open fun shouldShowPluginIcon(element: PsiElement?) = false

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ abstract class MixinInspection : AbstractBaseJavaLocalInspectionTool() {
3535
return if (MixinModuleType.isInModule(file)) {
3636
super.processFile(file, manager)
3737
} else {
38-
listOf()
38+
emptyList()
3939
}
4040
}
4141
}

src/main/kotlin/com/demonwav/mcdev/platform/mixin/inspection/implements/SoftImplementOverridesInspection.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import com.intellij.psi.JavaElementVisitor
1717
import com.intellij.psi.PsiElementVisitor
1818
import com.intellij.psi.PsiMethod
1919

20-
class SoftImplementOverridesInspection : MixinInspection() {
20+
class SuSoftImplementOverridesInspection : MixinInspection() {
2121

2222
override fun getStaticDescription() = "Reports soft-implemented methods in Mixins that do not override a method in the target classes."
2323

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
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.sponge.inspection
12+
13+
import com.demonwav.mcdev.platform.sponge.SpongeModuleType
14+
import com.demonwav.mcdev.util.Constants
15+
import com.demonwav.mcdev.util.fullQualifiedName
16+
import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool
17+
import com.intellij.codeInspection.InspectionManager
18+
import com.intellij.codeInspection.ProblemDescriptor
19+
import com.intellij.codeInspection.ProblemHighlightType
20+
import com.intellij.codeInspection.ProblemsHolder
21+
import com.intellij.psi.JavaElementVisitor
22+
import com.intellij.psi.PsiClassType
23+
import com.intellij.psi.PsiElementVisitor
24+
import com.intellij.psi.PsiField
25+
import com.intellij.psi.PsiFile
26+
27+
class SpongeLoggingInspection : AbstractBaseJavaLocalInspectionTool() {
28+
29+
override fun getStaticDescription() =
30+
"Sponge provides a ${Constants.SLF4J_LOGGER} logger implementation using @Inject in your plugin class. " +
31+
"You should not use ${Constants.JAVA_UTIL_LOGGER} in your plugin."
32+
33+
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
34+
return if (SpongeModuleType.isInModule(holder.file)) {
35+
Visitor(holder)
36+
} else {
37+
PsiElementVisitor.EMPTY_VISITOR
38+
}
39+
}
40+
41+
override fun processFile(file: PsiFile, manager: InspectionManager): List<ProblemDescriptor> {
42+
return if (SpongeModuleType.isInModule(file)) {
43+
super.processFile(file, manager)
44+
} else {
45+
emptyList()
46+
}
47+
}
48+
49+
private class Visitor(private val holder: ProblemsHolder) : JavaElementVisitor() {
50+
51+
override fun visitField(field: PsiField) {
52+
val element = field.typeElement ?: return
53+
val name = (field.type as? PsiClassType)?.fullQualifiedName ?: return
54+
55+
if (name != Constants.JAVA_UTIL_LOGGER) {
56+
return
57+
}
58+
59+
holder.registerProblem(
60+
element,
61+
"Sponge plugins should use ${Constants.SLF4J_LOGGER} rather than ${Constants.JAVA_UTIL_LOGGER}.",
62+
ProblemHighlightType.GENERIC_ERROR_OR_WARNING
63+
)
64+
}
65+
}
66+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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.util
12+
13+
object Constants {
14+
15+
const val JAVA_UTIL_LOGGER = "java.util.logging.Logger"
16+
const val SLF4J_LOGGER = "org.slf4j.Logger"
17+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ val PsiClass.packageName
3333

3434
@get:Contract(pure = true)
3535
val PsiClassType.fullQualifiedName
36-
get() = resolve()!!.fullQualifiedName
36+
get() = resolve()?.fullQualifiedName // this can be null if the type import is missing
3737

3838
// Class
3939

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,14 @@
159159
<annotator language="JAVA" implementationClass="com.demonwav.mcdev.platform.sponge.color.SpongeColorAnnotator"/>
160160

161161
<library.presentationProvider implementation="com.demonwav.mcdev.platform.sponge.framework.SpongePresentationProvider" />
162+
163+
<localInspection displayName="Wrong Sponge logger implementation"
164+
groupName="Minecraft"
165+
language="JAVA"
166+
enabledByDefault="true"
167+
level="WARNING"
168+
hasStaticDescription="true"
169+
implementationClass="com.demonwav.mcdev.platform.sponge.inspection.SpongeLoggingInspection"/>
162170
<!--endregion-->
163171

164172
<!--region FORGE-->

0 commit comments

Comments
 (0)