下面列出了com.intellij.psi.PsiElementVisitor#EMPTY_VISITOR 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@NotNull
@Override
public PsiElementVisitor buildVisitor(
@NotNull final ProblemsHolder holder,
final boolean isOnTheFly,
@NotNull final LocalInspectionToolSession session) {
PsiFile file = holder.getFile();
if (fileDetector.isMainOpenApiYamlFile(file)) {
return createVisitor("openapi.json", holder, session, file);
} else if (fileDetector.isMainSwaggerYamlFile(file)) {
return createVisitor("swagger.json", holder, session, file);
} else {
return PsiElementVisitor.EMPTY_VISITOR;
}
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(
@NotNull final ProblemsHolder holder,
final boolean isOnTheFly,
@NotNull final LocalInspectionToolSession session) {
PsiFile file = holder.getFile();
if (fileDetector.isMainOpenApiJsonFile(file)) {
return createVisitor("openapi.json", holder, session, file);
} else if (fileDetector.isMainSwaggerJsonFile(file)) {
return createVisitor("swagger.json", holder, session, file);
} else {
return PsiElementVisitor.EMPTY_VISITOR;
}
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(final @NotNull ProblemsHolder holder, final boolean isOnTheFly) {
if (isInspectionEnabled(holder.getProject())) {
return new PsiElementVisitor() {
@Override
public void visitElement(PsiElement element) {
if (accept(element)) {
String text = getIdeaUtils().extractTextFromElement(element, false, false, true);
if (!StringUtils.isEmpty(text)) {
validateText(element, holder, text, isOnTheFly);
}
}
}
};
} else {
return PsiElementVisitor.EMPTY_VISITOR;
}
}
private PsiElementVisitor createVisitor(
final String schemaFileName,
final ProblemsHolder holder,
final LocalInspectionToolSession session,
final PsiFile file) {
List<YAMLDocument> documents = ((YAMLFile) file).getDocuments();
if (documents.size() != 1) return PsiElementVisitor.EMPTY_VISITOR;
PsiElement root = documents.get(0).getTopLevelValue();
if (root == null) return PsiElementVisitor.EMPTY_VISITOR;
JsonSchemaService service = JsonSchemaService.Impl.get(file.getProject());
final URL url = ResourceUtil.getResource(getClass(), "schemas", schemaFileName);
final VirtualFile virtualFile = VfsUtil.findFileByURL(url);
final JsonSchemaObject schema = service.getSchemaObjectForSchemaFile(virtualFile);
return new YamlPsiElementVisitor() {
@Override
public void visitElement(PsiElement element) {
if (element != root) return;
final JsonLikePsiWalker walker = JsonLikePsiWalker.getWalker(element, schema);
if (walker == null) return;
JsonComplianceCheckerOptions options = new JsonComplianceCheckerOptions(false);
new JsonSchemaComplianceChecker(schema, holder, walker, session, options).annotate(element);
}
};
}
private PsiElementVisitor createVisitor(
final String schemaFileName,
final ProblemsHolder holder,
final LocalInspectionToolSession session,
final PsiFile file) {
JsonValue root =
file instanceof JsonFile
? ObjectUtils.tryCast(file.getFirstChild(), JsonValue.class)
: null;
if (root == null) return PsiElementVisitor.EMPTY_VISITOR;
JsonSchemaService service = JsonSchemaService.Impl.get(file.getProject());
final URL url = ResourceUtil.getResource(getClass(), "schemas", schemaFileName);
final VirtualFile virtualFile = VfsUtil.findFileByURL(url);
final JsonSchemaObject schema = service.getSchemaObjectForSchemaFile(virtualFile);
return new JsonElementVisitor() {
@Override
public void visitElement(PsiElement element) {
if (element == root) {
final JsonLikePsiWalker walker = JsonLikePsiWalker.getWalker(element, schema);
if (walker == null) return;
JsonComplianceCheckerOptions options = new JsonComplianceCheckerOptions(false);
new JsonSchemaComplianceChecker(schema, holder, walker, session, options)
.annotate(element);
}
}
};
}
@Nonnull
@Override
public PsiElementVisitor buildVisitor(@Nonnull final ProblemsHolder holder, boolean isOnTheFly)
{
if(Unity3dModuleExtensionUtil.getRootModule(holder.getProject()) == null)
{
return PsiElementVisitor.EMPTY_VISITOR;
}
return new CSharpElementVisitor()
{
@Override
@RequiredReadAction
public void visitNewExpression(CSharpNewExpression expression)
{
DotNetType newType = expression.getNewType();
if(newType == null)
{
return;
}
DotNetTypeRef typeRef = expression.toTypeRef(true);
if(CSharpTypeUtil.isInheritable(new CSharpTypeRefByQName(expression, Unity3dTypes.UnityEngine.MonoBehaviour), typeRef, expression))
{
holder.registerProblem(newType, Unity3dBundle.message("new.mono.behaviour.inspection.message"));
}
}
};
}
@Nonnull
@Override
@RequiredReadAction
public PsiElementVisitor buildVisitor(@Nonnull ProblemsHolder holder, boolean isOnTheFly, @Nonnull LocalInspectionToolSession session)
{
PsiFile file = holder.getFile();
if(!(file instanceof CSharpFile))
{
return PsiElementVisitor.EMPTY_VISITOR;
}
if(file instanceof PsiCodeFragment)
{
return PsiElementVisitor.EMPTY_VISITOR;
}
DotNetSimpleModuleExtension extension = ModuleUtilCore.getExtension(file, DotNetSimpleModuleExtension.class);
if(extension == null)
{
return PsiElementVisitor.EMPTY_VISITOR;
}
MatchNamespaceVisitor visitor = session.getUserData(KEY);
if(visitor == null)
{
session.putUserData(KEY, visitor = new MatchNamespaceVisitor(holder, extension));
}
return visitor;
}
@Nonnull
@Override
public PsiElementVisitor buildVisitor(@Nonnull ProblemsHolder holder, boolean isOnTheFly)
{
if(Unity3dModuleExtensionUtil.getRootModule(holder.getProject()) == null)
{
return PsiElementVisitor.EMPTY_VISITOR;
}
return new CSharpElementVisitor()
{
@Override
@RequiredReadAction
public void visitBinaryExpression(CSharpBinaryExpressionImpl expression)
{
IElementType operatorElementType = expression.getOperatorElement().getOperatorElementType();
if(operatorElementType == CSharpTokens.EQEQ || operatorElementType == CSharpTokens.NTEQ)
{
DotNetExpression leftExpression = expression.getLeftExpression();
DotNetExpression rightExpression = expression.getRightExpression();
if(rightExpression == null)
{
return;
}
if(leftExpression instanceof CSharpReferenceExpression)
{
String referenceName = ((CSharpReferenceExpression) leftExpression).getReferenceName();
if("tag".equals(referenceName))
{
PsiElement maybeField = ((CSharpReferenceExpression) leftExpression).resolve();
if(maybeField instanceof CSharpPropertyDeclaration)
{
DotNetExpression qualifier = ((CSharpReferenceExpression) leftExpression).getQualifier();
CSharpTypeDeclaration target = null;
if(qualifier == null)
{
target = PsiTreeUtil.getParentOfType(leftExpression, CSharpTypeDeclaration.class);
}
else if(qualifier instanceof CSharpReferenceExpression)
{
PsiElement resolveTarget = ((CSharpReferenceExpression) qualifier).resolve();
if(resolveTarget instanceof CSharpTypeDeclaration)
{
target = (CSharpTypeDeclaration) resolveTarget;
}
}
if(target == null)
{
return;
}
if(target.isInheritor(Unity3dTypes.UnityEngine.Component, true))
{
holder.registerProblem(expression, "Using CompareTag for tag comparison does not cause allocations", new ReplaceByCompareTagFix(expression));
}
}
}
}
}
}
};
}