在向PhpStorm(或其他JetBrains IDE)添加“意图”时,如何检测PsiElement
是否为字符串?我的代码基于我能找到的唯一意图。我似乎找不到合适的文档。这是我得到的:
@NonNls public class SomeIntention extends PsiElementBaseIntentionAction implements IntentionAction {
public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) {
if (element == null || !(element instanceof /* String? */) {
return false;
}
}
}
instanceof String
显然不起作用,但即使使用PsiViewer我也无法弄清楚如何测试它是否是一个字符串。
答案 0 :(得分:3)
我建议查看intellij-community源代码,记录,调试和使用PsiViewer插件,然后你会发现某种类型的PsiJavaToken包含一个String。
答案 1 :(得分:1)
以下工作检查我们当前节点是否为字符串(双引号或单引号):
ASTNode ast_node = element.getNode();
if(ast_node == null) {
return false;
}
IElementType element_type = ast_node.getElementType();
if(element_type != PhpTokenTypes.STRING_LITERAL
&& element_type != PhpTokenTypes.STRING_LITERAL_SINGLE_QUOTE) {
return false;
}
return true;
就我而言,我只想要'原始字符串',而不是带变量或连接的字符串。如果字符串中存在任何变量或连接符号,PSI会将其视为单独的兄弟。所以我可以通过排除兄弟姐妹的字符串找到原始字符串:
// Disregards strings with variables, concatenation, etc.
if (element.getPrevSibling() != null || element.getNextSibling() != null) {
return false;
}
return true;