Skip to content

Commit ad1ef0e

Browse files
committed
improve override method completion
1 parent 9e2866f commit ad1ef0e

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

src/main/java/com/tang/intellij/lua/editor/completion/OverrideCompletionProvider.kt

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,31 +48,39 @@ class OverrideCompletionProvider : CompletionProvider<CompletionParameters>() {
4848
val classType = methodDef.getClassType(context)
4949
if (classType != null) {
5050
val sup = classType.getSuperClass(context)
51-
addOverrideMethod(completionParameters, completionResultSet, sup)
51+
val memberNameSet = mutableSetOf<String>()
52+
classType.processMembers(context, { _, m ->
53+
m.name?.let { memberNameSet.add(it) }
54+
}, false)
55+
addOverrideMethod(completionParameters, completionResultSet, memberNameSet, sup)
5256
}
5357
}
5458
}
5559

56-
private fun addOverrideMethod(completionParameters: CompletionParameters, completionResultSet: CompletionResultSet, sup: ITyClass?) {
60+
private fun addOverrideMethod(completionParameters: CompletionParameters, completionResultSet: CompletionResultSet, memberNameSet:MutableSet<String>, sup: ITyClass?) {
5761
var superCls = sup
5862
if (superCls != null) {
5963
val project = completionParameters.originalFile.project
6064
val context = SearchContext(project)
6165
val clazzName = superCls.className
6266
LuaClassMemberIndex.processAll(TyLazyClass(clazzName), context, Processor { def ->
6367
if (def is LuaClassMethod) {
64-
val elementBuilder = LookupElementBuilder.create(def.name!!)
65-
.withIcon(LuaIcons.CLASS_METHOD_OVERRIDING)
66-
.withInsertHandler(OverrideInsertHandler(def))
67-
.withTailText(def.paramSignature)
68+
def.name?.let {
69+
if (memberNameSet.add(it)) {
70+
val elementBuilder = LookupElementBuilder.create(def.name!!)
71+
.withIcon(LuaIcons.CLASS_METHOD_OVERRIDING)
72+
.withInsertHandler(OverrideInsertHandler(def))
73+
.withTailText(def.paramSignature)
6874

69-
completionResultSet.addElement(elementBuilder)
75+
completionResultSet.addElement(elementBuilder)
76+
}
77+
}
7078
}
7179
true
7280
})
7381

7482
superCls = superCls.getSuperClass(context)
75-
addOverrideMethod(completionParameters, completionResultSet, superCls)
83+
addOverrideMethod(completionParameters, completionResultSet, memberNameSet, superCls)
7684
}
7785
}
7886

src/main/java/com/tang/intellij/lua/ty/TyClass.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ interface ITyClass : ITy {
2929
var superClassName: String?
3030
var aliasName: String?
3131
fun lazyInit(searchContext: SearchContext)
32-
fun processMembers(context: SearchContext, processor: (ITyClass, LuaClassMember) -> Unit)
32+
fun processMembers(context: SearchContext, processor: (ITyClass, LuaClassMember) -> Unit, deep: Boolean = true)
33+
fun processMembers(context: SearchContext, processor: (ITyClass, LuaClassMember) -> Unit) {
34+
processMembers(context, processor, true)
35+
}
3336
fun findMember(name: String, searchContext: SearchContext): LuaClassMember?
3437
fun getSuperClass(context: SearchContext): ITyClass?
3538
}
@@ -48,7 +51,7 @@ abstract class TyClass(override val className: String, override var superClassNa
4851
return className.hashCode()
4952
}
5053

51-
override fun processMembers(context: SearchContext, processor: (ITyClass, LuaClassMember) -> Unit) {
54+
override fun processMembers(context: SearchContext, processor: (ITyClass, LuaClassMember) -> Unit, deep: Boolean) {
5255
val clazzName = className
5356
val project = context.project
5457

@@ -66,8 +69,10 @@ abstract class TyClass(override val className: String, override var superClassNa
6669
}
6770

6871
// super
69-
val superType = getSuperClass(context)
70-
superType?.processMembers(context, processor)
72+
if (deep) {
73+
val superType = getSuperClass(context)
74+
superType?.processMembers(context, processor, deep)
75+
}
7176
}
7277

7378
override fun findMember(name: String, searchContext: SearchContext): LuaClassMember? {
@@ -151,11 +156,11 @@ class TyTable(val table: LuaTableExpr) : TyClass(getTableTypeName(table)) {
151156
this.flags = TyFlags.ANONYMOUS
152157
}
153158

154-
override fun processMembers(context: SearchContext, processor: (ITyClass, LuaClassMember) -> Unit) {
159+
override fun processMembers(context: SearchContext, processor: (ITyClass, LuaClassMember) -> Unit, deep: Boolean) {
155160
for (field in table.tableFieldList) {
156161
processor(this, field)
157162
}
158-
super.processMembers(context, processor)
163+
super.processMembers(context, processor, deep)
159164
}
160165

161166
override val displayName: String

0 commit comments

Comments
 (0)