diff --git a/src/main/java/cn/gudqs7/plugins/common/util/structure/BaseTypeParseUtil.java b/src/main/java/cn/gudqs7/plugins/common/util/structure/BaseTypeParseUtil.java index 98f1813..2d915b0 100644 --- a/src/main/java/cn/gudqs7/plugins/common/util/structure/BaseTypeParseUtil.java +++ b/src/main/java/cn/gudqs7/plugins/common/util/structure/BaseTypeParseUtil.java @@ -1,5 +1,13 @@ package cn.gudqs7.plugins.common.util.structure; +import com.intellij.openapi.project.Project; +import com.intellij.psi.*; +import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl; +import com.intellij.psi.search.GlobalSearchScope; +import org.jetbrains.annotations.NotNull; + +import java.lang.reflect.Field; + /** * @author wq */ @@ -21,4 +29,21 @@ public static Integer parseInt(String value, Integer defaultVal) { return defaultVal; } } + + /** + * 通过字符串常量确定值的类型是什么 + * + * @param + * @param psiReferenceExpression 字段名称 + * @return + */ + public static Integer parseInt(PsiReferenceExpression psiReferenceExpression) { + Project project = psiReferenceExpression.getProject(); + String clazzName = ((PsiReferenceExpressionImpl) (psiReferenceExpression.getFirstChild()).getReference()).getQualifiedName(); + String fieldName = psiReferenceExpression.getLastChild().getText(); + PsiClass aClass = JavaPsiFacade.getInstance(project).findClass(clazzName, GlobalSearchScope.allScope(project)); + PsiField fieldByName = aClass.findFieldByName(fieldName, false); + PsiExpression initializer = fieldByName.getInitializer(); + return Integer.parseInt( initializer.getText()); + } } diff --git a/src/main/java/cn/gudqs7/plugins/common/util/structure/PsiAnnotationUtil.java b/src/main/java/cn/gudqs7/plugins/common/util/structure/PsiAnnotationUtil.java index 684e1ec..9ba2e62 100644 --- a/src/main/java/cn/gudqs7/plugins/common/util/structure/PsiAnnotationUtil.java +++ b/src/main/java/cn/gudqs7/plugins/common/util/structure/PsiAnnotationUtil.java @@ -1,10 +1,12 @@ package cn.gudqs7.plugins.common.util.structure; import com.intellij.codeInsight.AnnotationUtil; -import com.intellij.psi.JavaPsiFacade; -import com.intellij.psi.PsiAnnotation; -import com.intellij.psi.PsiAnnotationMemberValue; -import com.intellij.psi.PsiReferenceExpression; +import com.intellij.openapi.project.Project; +import com.intellij.psi.*; +import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl; +import com.intellij.psi.search.FilenameIndex; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.util.PsiUtil; import lombok.SneakyThrows; import org.jetbrains.annotations.NotNull; @@ -13,6 +15,7 @@ import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; +import java.util.regex.Pattern; /** * 注解工具类 @@ -131,7 +134,9 @@ private static Object getValueByPsiAnnotationMemberValue(PsiAnnotationMemberValu String prefixWithRequestMethod = "RequestMethod."; if (text.startsWith(prefixWithRequestMethod)) { return text.substring(prefixWithRequestMethod.length()); - } else { + } else if(!Pattern.compile("^-?\\d+(\\.\\d+)?$").matcher(text).matches()){//有可能是自定义的常量 + return BaseTypeParseUtil.parseInt(psiReferenceExpression); + }else { return text; } } else {