Skip to content

Commit

Permalink
Add folding to @Definition.field and method
Browse files Browse the repository at this point in the history
  • Loading branch information
Earthcomputer committed Mar 29, 2024
1 parent e81c885 commit c43ff4a
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ package com.demonwav.mcdev.platform.mixin.expression

import com.demonwav.mcdev.platform.mixin.MixinModuleType
import com.demonwav.mcdev.platform.mixin.folding.MixinFoldingSettings
import com.demonwav.mcdev.platform.mixin.reference.target.FieldDefinitionReference
import com.demonwav.mcdev.platform.mixin.reference.target.MethodDefinitionReference
import com.demonwav.mcdev.platform.mixin.util.MixinConstants
import com.demonwav.mcdev.util.MemberReference
import com.intellij.lang.ASTNode
import com.intellij.lang.folding.CustomFoldingBuilder
import com.intellij.lang.folding.FoldingDescriptor
Expand All @@ -32,6 +35,7 @@ import com.intellij.psi.JavaRecursiveElementWalkingVisitor
import com.intellij.psi.PsiAnnotation
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiJavaFile
import com.intellij.psi.PsiLiteralExpression
import com.intellij.psi.PsiModifierList
import com.intellij.psi.util.PsiTreeUtil

Expand All @@ -41,7 +45,15 @@ class MEDefinitionFoldingBuilder : CustomFoldingBuilder() {
override fun isRegionCollapsedByDefault(node: ASTNode): Boolean =
MixinFoldingSettings.instance.state.foldDefinitions

override fun getLanguagePlaceholderText(node: ASTNode, range: TextRange) = "..."
override fun getLanguagePlaceholderText(node: ASTNode, range: TextRange): String {
val psi = node.psi
if (psi is PsiLiteralExpression) {
val value = psi.value as? String ?: return "..."
val memberReference = MemberReference.parse(value) ?: return "..."
return memberReference.presentableText
}
return "..."
}

override fun buildLanguageFoldRegions(
descriptors: MutableList<FoldingDescriptor>,
Expand Down Expand Up @@ -88,6 +100,18 @@ class MEDefinitionFoldingBuilder : CustomFoldingBuilder() {
descriptors.add(FoldingDescriptor(list.node, range))
}
}

super.visitModifierList(list)
}

override fun visitLiteralExpression(expression: PsiLiteralExpression) {
if (FieldDefinitionReference.ELEMENT_PATTERN.accepts(expression) ||
MethodDefinitionReference.ELEMENT_PATTERN.accepts(expression)
) {
if (MemberReference.parse(expression.value as String) != null) {
descriptors.add(FoldingDescriptor(expression.node, expression.textRange))
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -914,7 +914,8 @@ object MEExpressionCompletionUtil {
val nameValuePair = annotation.findElementAt(foldRegion.startOffset - annotationRange.startOffset)
?.findContainingNameValuePair() ?: continue
if (nameValuePair.name == foldAttribute &&
nameValuePair.parentOfType<PsiAnnotation>()?.hasQualifiedName(MixinConstants.Annotations.AT) == true
nameValuePair.parentOfType<PsiAnnotation>()?.hasQualifiedName(MixinConstants.MixinExtras.DEFINITION)
== true
) {
regionsToFold += foldRegion
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,10 @@ class MixinFoldingOptionsProvider :
{ settings.state.foldDefinitions },
{ b -> settings.state.foldDefinitions = b },
)
checkBox(
"Fold MixinExtras expression definition fields and methods",
{ settings.state.foldDefinitionFieldsAndMethods },
{ b -> settings.state.foldDefinitionFieldsAndMethods = b },
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class MixinFoldingSettings : PersistentStateComponent<MixinFoldingSettings.State
var foldAccessorCasts: Boolean = true,
var foldAccessorMethodCalls: Boolean = false,
var foldDefinitions: Boolean = true,
var foldDefinitionFieldsAndMethods: Boolean = true,
)

private var state = State()
Expand Down

0 comments on commit c43ff4a

Please sign in to comment.