@@ -34,8 +34,9 @@ import com.tang.intellij.lua.ty.*
3434 * Created by tangzx on 2016/12/25.
3535 */
3636open class ClassMemberCompletionProvider : CompletionProvider <CompletionParameters >() {
37- protected interface HandlerProcessor {
38- fun process (element : LuaLookupElement )
37+ protected abstract class HandlerProcessor {
38+ open fun processLookupString (lookupString : String ): String = lookupString
39+ abstract fun process (element : LuaLookupElement )
3940 }
4041
4142 private class InsertHandlerWrapper (val deleteLen : Int , val name : String , val base : InsertHandler <LookupElement >? ) : InsertHandler<LookupElement> {
@@ -69,7 +70,7 @@ open class ClassMemberCompletionProvider : CompletionProvider<CompletionParamete
6970 if (! Ty .isInvalid(prefixTypeSet)) {
7071 val prefixMatcher = completionResultSet.prefixMatcher
7172 val resultSet = completionResultSet.withPrefixMatcher(prefixMatcher.prefix)
72- complete(indexExpr, typeSet, resultSet, prefixMatcher, object : HandlerProcessor {
73+ complete(indexExpr, typeSet, resultSet, prefixMatcher, object : HandlerProcessor () {
7374 override fun process (element : LuaLookupElement ) {
7475 element.itemText = txt + colon + element.itemText
7576 element.handler = InsertHandlerWrapper (nameExpr.textLength + 1 , txt, element.handler)
@@ -95,18 +96,22 @@ open class ClassMemberCompletionProvider : CompletionProvider<CompletionParamete
9596 val context = SearchContext (project)
9697 luaType.lazyInit(context)
9798 luaType.processMembers(context) { curType, def ->
98- val className = curType.displayName
99- if (def is LuaClassField && ! isColon) {
100- addField(completionResultSet, prefixMatcher, curType == = luaType, className, def, handlerProcessor)
101- } else if (def is LuaClassMethod ) {
102- addMethod(completionResultSet, prefixMatcher, curType == = luaType, className, def, handlerProcessor)
99+ def.name?.let {
100+ if (prefixMatcher.prefixMatches(it)) {
101+ val className = curType.displayName
102+ if (def is LuaClassField && ! isColon) {
103+ addField(completionResultSet, curType == = luaType, className, def, handlerProcessor)
104+ } else if (def is LuaClassMethod ) {
105+ addMethod(completionResultSet, curType == = luaType, className, def, handlerProcessor)
106+ }
107+ }
103108 }
104109 }
105110 }
106111
107- private fun addField (completionResultSet : CompletionResultSet , prefixMatcher : PrefixMatcher , bold : Boolean , clazzName : String , field : LuaClassField , handlerProcessor : HandlerProcessor ? ) {
112+ protected fun addField (completionResultSet : CompletionResultSet , bold : Boolean , clazzName : String , field : LuaClassField , handlerProcessor : HandlerProcessor ? ) {
108113 val name = field.name
109- if (name != null && prefixMatcher.prefixMatches(name) ) {
114+ if (name != null ) {
110115 val elementBuilder = LuaFieldLookupElement (name, field, bold)
111116 if (! LuaRefactoringUtil .isLuaIdentifier(name)) {
112117 elementBuilder.lookupString = " ['$name ']"
@@ -123,12 +128,13 @@ open class ClassMemberCompletionProvider : CompletionProvider<CompletionParamete
123128 }
124129 }
125130
126- private fun addMethod (completionResultSet : CompletionResultSet , prefixMatcher : PrefixMatcher , bold : Boolean , clazzName : String , def : LuaClassMethod , handlerProcessor : HandlerProcessor ? ) {
131+ protected fun addMethod (completionResultSet : CompletionResultSet , bold : Boolean , clazzName : String , def : LuaClassMethod , handlerProcessor : HandlerProcessor ? ) {
127132 val methodName = def.name
128- if (methodName != null && prefixMatcher.prefixMatches(methodName) ) {
133+ if (methodName != null ) {
129134 val ty = def.asTy(SearchContext (def.project))
130135 ty.process(Processor {
131- val le = TyFunctionLookupElement (methodName, it, bold, ty, LuaIcons .CLASS_METHOD )
136+ val lookupString = handlerProcessor?.processLookupString(methodName) ? : methodName
137+ val le = TyFunctionLookupElement (lookupString, it, bold, ty, LuaIcons .CLASS_METHOD )
132138 le.handler = SignatureInsertHandler (it)
133139 if (! ty.isSelfCall) le.setItemTextUnderlined(true )
134140 le.setTailText(" [$clazzName ]" )
0 commit comments