Skip to content

Commit

Permalink
merge: branch 'HoshinoTented-sameness'
Browse files Browse the repository at this point in the history
  • Loading branch information
ice1000 committed Oct 30, 2023
2 parents ec3d867 + 538081b commit 5268637
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 1 deletion.
47 changes: 47 additions & 0 deletions src/main/kotlin/org/ice1000/kala/SamenessInspection.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.ice1000.kala

import com.intellij.codeInspection.LocalQuickFix
import com.intellij.codeInspection.ProblemDescriptor
import com.intellij.codeInspection.ProblemHighlightType
import com.intellij.codeInspection.ProblemsHolder
import com.intellij.openapi.project.Project
import com.intellij.psi.JavaPsiFacade
import com.intellij.psi.PsiElementVisitor
import com.intellij.psi.util.InheritanceUtil
import com.siyeh.InspectionGadgetsBundle

class SamenessInspection : KalaInspection() {
companion object {
private const val METHOD_NAME: String = "sameElements"
}

private object FIX : LocalQuickFix {
override fun getFamilyName(): String = InspectionGadgetsBundle.message("constant.conditional.expression.simplify.quickfix")

override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
descriptor.psiElement.replace(JavaPsiFacade.getElementFactory(project)
.createExpressionFromText("true", descriptor.endElement))
}
}

override fun getDisplayName(): String = InspectionGadgetsBundle.message("boolean.expression.can.be.simplified.problem.descriptor", "true")

override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor = methodCallVisitor {
val args = it.argumentList.expressions
val methodExpr = it.methodExpression
val selfExpr = methodExpr.qualifierExpression ?: return@methodCallVisitor
if (args.isEmpty()) return@methodCallVisitor
if (methodExpr.referenceName != METHOD_NAME) return@methodCallVisitor
val argExpr = args.first() ?: return@methodCallVisitor

val self = selfExpr.reference?.resolve() ?: return@methodCallVisitor
val arg = argExpr.reference?.resolve() ?: return@methodCallVisitor

if (InheritanceUtil.isInheritor(selfExpr.type, "$PKG.base.Traversable")
&& self == arg) {
holder.registerProblem(holder.manager.createProblemDescriptor(
it, displayName, FIX, ProblemHighlightType.WARNING, isOnTheFly
))
}
}
}
3 changes: 2 additions & 1 deletion src/main/kotlin/org/ice1000/kala/utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ class KalaInspectionProvider : InspectionToolProvider {
ViewSizeInspection::class.java,
SizeCompareInspection::class.java,
MapPutUnetaInspection::class.java,
ViewToMapInspection::class.java
ViewToMapInspection::class.java,
SamenessInspection::class.java
)
}

Expand Down
5 changes: 5 additions & 0 deletions src/main/resources/inspectionDescriptions/Sameness.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<html>
<body>
This inspection warns about comparing an <code>Traversable</code> with itself by <code>sameElements</code>.
</body>
</html>

0 comments on commit 5268637

Please sign in to comment.