11package io.maliboot.www.hyperf.lombok.typeProvider
22
33import com.intellij.openapi.application.ReadAction
4+ import com.intellij.openapi.diagnostic.Logger
5+ import com.intellij.openapi.project.DumbService
46import com.intellij.openapi.project.Project
57import com.intellij.openapi.util.text.Strings
68import com.intellij.psi.PsiElement
@@ -18,17 +20,23 @@ class CustomMemberTypeProvider : PhpTypeProvider4 {
1820
1921 companion object {
2022 const val ID = ' 马'
23+
24+ private val logger: Logger = Logger .getInstance(CustomMemberTypeProvider ::class .java)
2125 }
2226
2327 override fun getKey (): Char {
2428 return ID
2529 }
2630
2731 override fun getType (p0 : PsiElement ? ): PhpType ? {
28- if (p0 == null || ! p0.containingFile.isExcludeDir()) {
32+ if (p0 == null || DumbService .getInstance(p0.project).isDumb || ! p0.containingFile.isExcludeDir()) {
2933 return null
3034 }
3135
36+ return tryType(p0)
37+ }
38+
39+ private fun tryType (p0 : PsiElement ): PhpType ? {
3240 var isFieldReference = false
3341 val reference: MemberReference = when (p0) {
3442 is FieldReference -> {
@@ -44,14 +52,20 @@ class CustomMemberTypeProvider : PhpTypeProvider4 {
4452 } ? : return null
4553
4654 val classReference = reference.classReference ? : return null
47- var classRefFQN = classReference.type.toString()
55+ val classRefType = classReference.type.toString()
56+ var classRefFQN = classRefType
4857 .removeSuffix(" |?" )
4958 .split(" |" )
5059 .last()
5160 .substringAfter(" \\ " )
5261 .replace(" )" , " " )
5362 if (classRefFQN.contains(" (" )) {
54- classRefFQN = classRefFQN.substring(classRefFQN.lastIndexOf(" (" ) + 2 )
63+ classRefFQN = classRefFQN.substring(classRefFQN.lastIndexOf(" (" ) + 1 )
64+ if (! classRefFQN.startsWith(" \\ " )) {
65+ logger.warn(" 类型解析异常:$classRefType " )
66+ return null
67+ }
68+ classRefFQN = classRefFQN.substring(1 )
5569 }
5670 when (classReference) {
5771 is Variable , is MemberReference , is FunctionReference -> {
0 commit comments