下面列出了怎么用com.intellij.psi.PsiElementVisitor的API类实例代码及写法,或者点击链接到github查看源代码。
@NotNull
public PsiElementVisitor buildVisitor(final @NotNull ProblemsHolder holder, boolean isOnTheFly) {
if(!Symfony2ProjectComponent.isEnabled(holder.getProject())) {
return super.buildVisitor(holder, isOnTheFly);
}
return new PsiElementVisitor() {
@Override
public void visitElement(PsiElement element) {
if(TwigPattern.getAutocompletableRoutePattern().accepts(element) && TwigUtil.isValidStringWithoutInterpolatedOrConcat(element)) {
invoke(element, holder);
}
super.visitElement(element);
}
};
}
@NotNull
@Override
public PsiElementVisitor buildRealVisitor(@NotNull ProblemsHolder problemsHolder, boolean b) {
return new PhpElementVisitor() {
@Override
public void visitPhpClassReference(ClassReference classReference) {
Set<String> deprecatedClassNames = getDeprecatedClassNames(classReference.getProject());
if (deprecatedClassNames.contains(classReference.getFQN())) {
problemsHolder.registerProblem(classReference, "Class scheduled for removal in upcoming TYPO3 version, consider using an alternative");
}
super.visitPhpClassReference(classReference);
}
};
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, final boolean isOnTheFly) {
return new BashVisitor() {
@Override
public void visitExpansion(BashExpansion expansion) {
if (isOnTheFly && expansion.isValidExpansion()) {
boolean bash4 = BashProjectSettings.storedSettings(holder.getProject()).isSupportBash4();
holder.registerProblem(expansion, "Evaluate expansion", new EvaluateExpansionQuickfix(expansion, bash4));
}
}
};
}
@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 visitMethodDeclaration(CSharpMethodDeclaration declaration)
{
UnityFunctionManager.FunctionInfo magicMethod = UnityEventCSharpMethodLineMarkerProvider.findMagicMethod(declaration);
if(magicMethod != null)
{
PsiElement codeBlock = declaration.getCodeBlock().getElement();
if(codeBlock == null || codeBlock instanceof CSharpBlockStatementImpl && ((CSharpBlockStatementImpl) codeBlock).getStatements().length == 0)
{
PsiElement nameIdentifier = declaration.getNameIdentifier();
assert nameIdentifier != null;
holder.registerProblem(nameIdentifier, Unity3dBundle.message("empty.magic.method.inspection.message"), new RemoveMethodFix(declaration));
}
}
}
};
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(final @NotNull ProblemsHolder holder, boolean isOnTheFly) {
return new PsiElementVisitor() {
@Override
public void visitElement(PsiElement element) {
if (element instanceof PhpDocTag && AnnotationUtil.isAnnotationPhpDocTag((PhpDocTag) element)) {
visitAnnotationDocTag((PhpDocTag) element, holder);
}
super.visitElement(element);
}
};
}
@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 visitMethodDeclaration(CSharpMethodDeclaration declaration)
{
String name = declaration.getName();
if("OnGUI".equals(name))
{
UnityFunctionManager.FunctionInfo magicMethod = UnityEventCSharpMethodLineMarkerProvider.findMagicMethod(declaration);
if(magicMethod != null)
{
PsiElement nameIdentifier = declaration.getNameIdentifier();
assert nameIdentifier != null;
holder.registerProblem(nameIdentifier, Unity3dBundle.message("ongui.method.inspection.message"), new UnityEmptyMagicMethodInspection.RemoveMethodFix(declaration));
}
}
}
};
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder problemsHolder, boolean b) {
if (!TYPO3CMSProjectSettings.getInstance(problemsHolder.getProject()).pluginEnabled) {
return new PhpElementVisitor() {
};
}
return buildRealVisitor(problemsHolder, b);
}
@NotNull
@Override
public PsiElementVisitor buildRealVisitor(@NotNull ProblemsHolder problemsHolder, boolean b) {
return new PhpElementVisitor() {
@Override
public void visitPhpConstantReference(ConstantReference reference) {
if (DeprecationUtility.isDeprecated(problemsHolder.getProject(), reference)) {
problemsHolder.registerProblem(reference, "Constant scheduled for removal in upcoming TYPO3 version, consider using an alternative");
}
super.visitPhpConstantReference(reference);
}
};
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof HaskellVisitor) accept((HaskellVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof XQueryVisitor) accept((XQueryVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof CypherVisitor) accept((CypherVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof MelVisitor) accept((MelVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof CypherVisitor) accept((CypherVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof NixVisitor) accept((NixVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof ThriftVisitor) accept((ThriftVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof WeaveVisitor) accept((WeaveVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof XQueryVisitor) accept((XQueryVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof GraphQLVisitor) accept((GraphQLVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof YangVisitor) ((YangVisitor)visitor).visitTypeBodyStmts(this);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof SQFPsiVisitor) accept((SQFPsiVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof HaskellVisitor) accept((HaskellVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof SQFPsiVisitor) accept((SQFPsiVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof WeaveVisitor) accept((WeaveVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof CypherVisitor) accept((CypherVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof YangVisitor) ((YangVisitor)visitor).visitLeafrefSpecification(this);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof WeaveVisitor) accept((WeaveVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof XQueryVisitor) accept((XQueryVisitor)visitor);
else super.accept(visitor);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof XQueryVisitor) accept((XQueryVisitor)visitor);
else super.accept(visitor);
}
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder problemsHolder, boolean b) {
if (!TYPO3CMSProjectSettings.getInstance(problemsHolder.getProject()).pluginEnabled) {
return new PhpElementVisitor() {
};
}
// the internal type was deprecated on 9 and dropped on 10
if (TYPO3Utility.compareMajorMinorVersion(problemsHolder.getProject(), "9.0") < 0) {
return new PhpElementVisitor() {
};
}
return new PhpElementVisitor() {
@Override
public void visitPhpElement(PhpPsiElement element) {
boolean isArrayStringValue = PhpElementsUtil.isStringArrayValue().accepts(element);
if (!isArrayStringValue || !insideTCAColumnDefinition(element)) {
return;
}
String arrayIndex = extractArrayIndexFromValue(element);
if (arrayIndex != null && arrayIndex.equals("internal_type")) {
if (element instanceof StringLiteralExpression) {
String internalType = ((StringLiteralExpression) element).getContents();
if (!internalType.equals("file_reference") && !internalType.equals("file")) {
return;
}
// the internal type was deprecated on 9 and dropped on 10
if (TYPO3Utility.compareMajorMinorVersion(problemsHolder.getProject(), "10.0") < 0) {
problemsHolder.registerProblem(element, String.format("Internal type '%s' is deprecated, will be removed with v10.0", internalType), ProblemHighlightType.LIKE_DEPRECATED);
return;
}
problemsHolder.registerProblem(element, String.format("Internal type '%s' was removed prior to v10.0", internalType), ProblemHighlightType.GENERIC_ERROR_OR_WARNING);
}
}
}
};
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof CypherVisitor) accept((CypherVisitor)visitor);
else super.accept(visitor);
}