use of ool.intellij.plugin.psi.DirectiveParamFileReference in project oxy-template-support-plugin by mutant-industries.
the class IncludedFilesCollector method visitDirectiveParamFileReference.
@Override
public void visitDirectiveParamFileReference(@NotNull DirectiveParamFileReference fileReference) {
PsiFileSystemItem item;
for (PsiReference reference : fileReference.getReferences()) {
if (reference instanceof FileReference && (item = ((FileReference) reference).resolve()) != null && !(item instanceof PsiDirectory) && item.getContainingFile() != null) {
VirtualFile file = item.getContainingFile().getVirtualFile();
if (!includedFiles.containsValue(file) && !recursionGuard.contains(file)) {
recursionGuard.add(file);
item.getContainingFile().acceptChildren(this);
}
includedFiles.put(fileReference, file);
}
}
super.visitElement(fileReference);
}
use of ool.intellij.plugin.psi.DirectiveParamFileReference in project oxy-template-support-plugin by mutant-industries.
the class RedundantIncludeInspection method buildVisitor.
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
return new OxyTemplateElementVisitor() {
@Override
public void visitDirectiveParamFileReference(@NotNull DirectiveParamFileReference fileReference) {
final DirectiveStatement directiveStatement = PsiTreeUtil.getParentOfType(fileReference, DirectiveStatement.class);
assert directiveStatement != null;
if (!IncludeOnceDirective.NAME.equals(directiveStatement.getName()) || IncludeOptimizer.ignore(directiveStatement)) {
return;
}
PsiReference[] references = fileReference.getReferences();
PsiFile referencedFile = null;
for (PsiReference reference : references) {
if (reference instanceof FileReference && reference.resolve() instanceof PsiFile) {
referencedFile = (PsiFile) reference.resolve();
break;
}
}
if (referencedFile == null) {
return;
}
if (!directiveStatement.getContainingFile().getVirtualFile().getPath().equals(referencedFile.getVirtualFile().getPath())) {
for (Map.Entry<PsiElement, JSElement> entry : OxyTemplateHelper.getUsedJsMacros(fileReference.getContainingFile()).entrySet()) {
if (entry.getValue().getContainingFile().getVirtualFile().getPath().equals(referencedFile.getVirtualFile().getPath())) {
return;
}
}
}
holder.registerProblem(directiveStatement, getDisplayName(), ProblemHighlightType.LIKE_UNUSED_SYMBOL, new DeleteElementQuickFix());
}
};
}
Aggregations