Skip to content

Commit 25fc950

Browse files
committed
[ acore, minitt, mlpolyr, redprl, agda ] Extract folding function
1 parent 04782e1 commit 25fc950

File tree

7 files changed

+24
-43
lines changed

7 files changed

+24
-43
lines changed

res/META-INF/change-notes.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
0.5.0<br/>
22
<ul>
33
<li>IntelliJ Platform 2019.2 compatibility</li>
4+
<li>Tons of internal refactorings: generate more codes</li>
45
</ul>
56
0.4.2<br/>
67
<ul>

src/org/ice1000/tt/editing/acore/folding.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import com.intellij.lang.folding.FoldingDescriptor
66
import com.intellij.openapi.editor.Document
77
import com.intellij.openapi.project.DumbAware
88
import com.intellij.psi.PsiElement
9-
import com.intellij.psi.util.PsiTreeUtil
109
import org.ice1000.tt.ACoreFile
1110
import org.ice1000.tt.FOLDING_PLACEHOLDER
1211
import org.ice1000.tt.editing.*
@@ -33,17 +32,11 @@ class ACoreFoldingBuilder : FoldingBuilderEx(), DumbAware {
3332

3433
override fun buildFoldRegions(root: PsiElement, document: Document, quick: Boolean): Array<FoldingDescriptor> {
3534
if (root !is ACoreFile) return emptyArray()
36-
val descriptors = mutableListOf<FoldingDescriptor>()
37-
val visitor = FoldingVisitor(descriptors, document)
38-
PsiTreeUtil.processElements(root) {
39-
it.accept(visitor)
40-
true
41-
}
42-
return descriptors.toTypedArray()
35+
return collectFoldRegions(root) { FoldingVisitor(it, document) }
4336
}
4437
}
4538

46-
class FoldingVisitor(
39+
private class FoldingVisitor(
4740
private val descriptors: MutableList<FoldingDescriptor>,
4841
private val document: Document
4942
) : ACoreVisitor() {

src/org/ice1000/tt/editing/agda/folding.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import com.intellij.openapi.editor.Document
77
import com.intellij.openapi.project.DumbAware
88
import com.intellij.openapi.util.TextRange
99
import com.intellij.psi.PsiElement
10-
import com.intellij.psi.util.PsiTreeUtil
1110
import org.ice1000.tt.AgdaFile
1211
import org.ice1000.tt.FOLDING_PLACEHOLDER
12+
import org.ice1000.tt.editing.collectFoldRegions
1313
import org.ice1000.tt.psi.*
1414
import org.ice1000.tt.psi.agda.*
1515

@@ -23,17 +23,11 @@ class AgdaFoldingBuilder : FoldingBuilderEx(), DumbAware {
2323

2424
override fun buildFoldRegions(root: PsiElement, document: Document, quick: Boolean): Array<FoldingDescriptor> {
2525
if (root !is AgdaFile) return emptyArray()
26-
val descriptors = mutableListOf<FoldingDescriptor>()
27-
val visitor = FoldingVisitor(descriptors, document)
28-
PsiTreeUtil.processElements(root) {
29-
it.accept(visitor)
30-
true
31-
}
32-
return descriptors.toTypedArray()
26+
return collectFoldRegions(root) { FoldingVisitor(it, document) }
3327
}
3428
}
3529

36-
class FoldingVisitor(
30+
private class FoldingVisitor(
3731
private val descriptors: MutableList<FoldingDescriptor>,
3832
private val document: Document
3933
) : AgdaVisitor() {

src/org/ice1000/tt/editing/editing.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ package org.ice1000.tt.editing
22

33
import com.intellij.lang.Commenter
44
import com.intellij.lang.findUsages.FindUsagesProvider
5+
import com.intellij.lang.folding.FoldingDescriptor
56
import com.intellij.lang.refactoring.RefactoringSupportProvider
67
import com.intellij.psi.PsiElement
8+
import com.intellij.psi.PsiElementVisitor
79
import com.intellij.psi.PsiNameIdentifierOwner
810
import com.intellij.psi.PsiNamedElement
11+
import com.intellij.psi.util.PsiTreeUtil
912

1013
abstract class TTFindUsagesProvider : FindUsagesProvider {
1114
override fun canFindUsagesFor(element: PsiElement) = element is PsiNameIdentifierOwner
@@ -37,3 +40,13 @@ class CxxCommenter : TTCommenter() {
3740
override fun getBlockCommentPrefix() = "/*"
3841
override fun getBlockCommentSuffix() = "*/"
3942
}
43+
44+
inline fun collectFoldRegions(root: PsiElement, visitorFactory: (MutableList<FoldingDescriptor>) -> PsiElementVisitor): Array<FoldingDescriptor> {
45+
val descriptors = mutableListOf<FoldingDescriptor>()
46+
val visitor = visitorFactory(descriptors)
47+
PsiTreeUtil.processElements(root) {
48+
it.accept(visitor)
49+
true
50+
}
51+
return descriptors.toTypedArray()
52+
}

src/org/ice1000/tt/editing/minitt/folding.kt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import com.intellij.lang.folding.FoldingDescriptor
66
import com.intellij.openapi.editor.Document
77
import com.intellij.openapi.project.DumbAware
88
import com.intellij.psi.PsiElement
9-
import com.intellij.psi.util.PsiTreeUtil
109
import org.ice1000.tt.FOLDING_PLACEHOLDER
1110
import org.ice1000.tt.MiniTTFile
1211
import org.ice1000.tt.editing.*
@@ -32,15 +31,8 @@ class MiniTTFoldingBuilder : FoldingBuilderEx(), DumbAware {
3231

3332
override fun buildFoldRegions(root: PsiElement, document: Document, quick: Boolean): Array<FoldingDescriptor> {
3433
if (root !is MiniTTFile) return emptyArray()
35-
val descriptors = mutableListOf<FoldingDescriptor>()
36-
val visitor = FoldingVisitor(descriptors, document)
37-
PsiTreeUtil.processElements(root) {
38-
it.accept(visitor)
39-
true
40-
}
41-
return descriptors.toTypedArray()
34+
return collectFoldRegions(root) { FoldingVisitor(it, document) }
4235
}
43-
4436
}
4537

4638
private class FoldingVisitor(

src/org/ice1000/tt/editing/mlpolyr/folding.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ import com.intellij.openapi.project.DumbAware
88
import com.intellij.openapi.util.TextRange
99
import com.intellij.psi.PsiComment
1010
import com.intellij.psi.PsiElement
11-
import com.intellij.psi.util.PsiTreeUtil
1211
import org.ice1000.tt.FOLDING_PLACEHOLDER
1312
import org.ice1000.tt.MLPolyRFile
13+
import org.ice1000.tt.editing.collectFoldRegions
1414
import org.ice1000.tt.psi.childrenWithLeaves
1515
import org.ice1000.tt.psi.elementType
1616
import org.ice1000.tt.psi.mlpolyr.*
@@ -29,15 +29,8 @@ class MLPolyRFoldingBuilder : FoldingBuilderEx(), DumbAware {
2929

3030
override fun buildFoldRegions(root: PsiElement, document: Document, quick: Boolean): Array<FoldingDescriptor> {
3131
if (root !is MLPolyRFile) return emptyArray()
32-
val descriptors = mutableListOf<FoldingDescriptor>()
33-
val visitor = FoldingVisitor(descriptors, document)
34-
PsiTreeUtil.processElements(root) {
35-
it.accept(visitor)
36-
true
37-
}
38-
return descriptors.toTypedArray()
32+
return collectFoldRegions(root) { FoldingVisitor(it, document) }
3933
}
40-
4134
}
4235

4336
private class FoldingVisitor(

src/org/ice1000/tt/editing/redprl/folding.kt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.intellij.psi.PsiComment
1010
import com.intellij.psi.PsiElement
1111
import com.intellij.psi.util.PsiTreeUtil
1212
import org.ice1000.tt.FOLDING_PLACEHOLDER
13+
import org.ice1000.tt.editing.collectFoldRegions
1314
import org.ice1000.tt.psi.*
1415
import org.ice1000.tt.psi.redprl.*
1516

@@ -27,13 +28,7 @@ class RedPrlFoldingBuilder : FoldingBuilderEx(), DumbAware {
2728

2829
override fun buildFoldRegions(root: PsiElement, document: Document, quick: Boolean): Array<FoldingDescriptor> {
2930
if (root !is RedPrlFileImpl) return emptyArray()
30-
val descriptors = mutableListOf<FoldingDescriptor>()
31-
val visitor = FoldingVisitor(descriptors, document)
32-
PsiTreeUtil.processElements(root) {
33-
it.accept(visitor)
34-
true
35-
}
36-
return descriptors.toTypedArray()
31+
return collectFoldRegions(root) { FoldingVisitor(it, document) }
3732
}
3833
}
3934

0 commit comments

Comments
 (0)