use of com.intellij.lang.javascript.psi.JSFile in project intellij-plugins by JetBrains.
the class AbstractMethodBasedInspection method createVisitor.
@NotNull
@Override
protected final JSElementVisitor createVisitor(final ProblemsHolder holder, LocalInspectionToolSession session) {
if (holder == null) {
return JSElementVisitor.NOP_ELEMENT_VISITOR;
}
Project project = holder.getProject();
if (!ApplicationManager.getApplication().isUnitTestMode()) {
if (!JstdSettingsUtil.areJstdConfigFilesInProjectCached(project)) {
return JSElementVisitor.NOP_ELEMENT_VISITOR;
}
}
return new JSElementVisitor() {
@Override
public void visitJSCallExpression(final JSCallExpression jsCallExpression) {
JSFile jsFile = null;
if (jsCallExpression != null) {
jsFile = ObjectUtils.tryCast(jsCallExpression.getContainingFile(), JSFile.class);
}
if (jsFile == null) {
return;
}
JSReferenceExpression methodExpression = ObjectUtils.tryCast(jsCallExpression.getMethodExpression(), JSReferenceExpression.class);
if (methodExpression == null) {
return;
}
boolean suitableSymbol = isSuitableElement(jsFile, jsCallExpression);
if (suitableSymbol) {
boolean resolved = isResolved(methodExpression);
if (!resolved) {
TextRange rangeInElement = TextRange.create(0, methodExpression.getTextLength());
HintWrapperQuickFix fix = new HintWrapperQuickFix(methodExpression, rangeInElement, getFix());
holder.registerProblem(methodExpression, getProblemDescription(), ProblemHighlightType.GENERIC_ERROR_OR_WARNING, rangeInElement, fix);
}
}
}
};
}
use of com.intellij.lang.javascript.psi.JSFile in project intellij-plugins by JetBrains.
the class JstdAssertionFrameworkLineMarkerProvider method getLineMarkerInfo.
@Override
public LineMarkerInfo getLineMarkerInfo(@NotNull PsiElement element) {
Project project = element.getProject();
JSFile jsFile = ObjectUtils.tryCast(element.getContainingFile(), JSFile.class);
if (jsFile == null) {
return null;
}
if (!JstdSettingsUtil.areJstdConfigFilesInProjectCached(project)) {
return null;
}
LineMarkerInfo lineMarkerInfo = getJstdLineMarkerInfo(project, jsFile, element);
if (lineMarkerInfo == null) {
lineMarkerInfo = getQUnitLineMarkerInfo(jsFile, element);
}
return lineMarkerInfo;
}
use of com.intellij.lang.javascript.psi.JSFile in project intellij-plugins by JetBrains.
the class JstdImplicitUsageProvider method isImplicitUsage.
@Override
public boolean isImplicitUsage(PsiElement element) {
JSFile jsFile = ObjectUtils.tryCast(element.getContainingFile(), JSFile.class);
if (jsFile == null) {
return false;
}
VirtualFile virtualFile = jsFile.getVirtualFile();
if (virtualFile == null) {
return false;
}
boolean isInScope = JstdLibraryUtil.isFileInJstdLibScope(element.getProject(), virtualFile);
if (!isInScope) {
return false;
}
JstdTestFileStructureBuilder builder = JstdTestFileStructureBuilder.getInstance();
JstdTestFileStructure fileStructure = builder.fetchCachedTestFileStructure(jsFile);
return fileStructure.isPrototypeTestElement(element);
}
use of com.intellij.lang.javascript.psi.JSFile in project intellij-plugins by JetBrains.
the class ActionScriptCompletionKeywordsContributor method process.
@Override
public boolean process(KeywordCompletionConsumer consumer, PsiElement context) {
if (JSCompletionContributor.getInstance().isDoingSmartCodeCompleteAction())
return false;
final PsiElement parent = context.getParent();
final PsiElement grandParent = parent != null ? parent.getParent() : null;
final PsiElement grandGrandParent = grandParent != null ? grandParent.getParent() : null;
if (parent instanceof JSReferenceExpression && ((JSReferenceExpression) parent).getQualifier() == null && (JSResolveUtil.isExprInTypeContext((JSReferenceExpression) parent) || grandParent instanceof JSExpressionStatement && (JSResolveUtil.isPlaceWhereNsCanBe(grandParent) || grandGrandParent instanceof JSFile && grandGrandParent.getContext() == null) || grandParent instanceof JSAttributeList || parent instanceof JSAttributeNameValuePair)) {
if (!(grandParent instanceof JSImportStatement) && (grandParent instanceof JSAttributeList || JSResolveUtil.isPlaceWhereNsCanBe(grandParent) || grandGrandParent instanceof JSFile) && (!(grandParent instanceof JSFunction) || ((JSFunction) grandParent).getReturnTypeElement() != parent)) {
consumer.consume(JSLookupPriority.SMART_KEYWORDS_PRIORITY, true, accessModifiers);
consumer.consume(JSLookupPriority.SMART_KEYWORDS_PRIORITY, true, "class", "function", "interface", "namespace", "package", "extends", "implements", "import", "override", "static", "dynamic", "var", "const", "use", "final");
}
return false;
}
if (JSResolveUtil.isInPlaceWhereTypeCanBeDuringCompletion(parent) && JSResolveUtil.isPlaceWhereNsCanBe(grandParent)) {
consumer.consume(JSLookupPriority.KEYWORDS_PRIORITY, false, JSKeywordsCompletionProvider.TYPE_LITERAL_VALUES);
consumer.consume(JSLookupPriority.KEYWORDS_PRIORITY, false, "function");
consumer.consume(JSLookupPriority.KEYWORDS_PRIORITY, true, accessModifiers);
consumer.consume(JSLookupPriority.KEYWORDS_PRIORITY, true, "extends", "implements", "include", "import", "static", "override", "namespace", "class", "interface", "var", "use");
return false;
}
return true;
}
use of com.intellij.lang.javascript.psi.JSFile in project intellij-plugins by JetBrains.
the class FlexCssPropertyDescriptor method getDeclarations.
@NotNull
@Override
public PsiElement[] getDeclarations(@NotNull PsiElement context) {
Map<PsiElement, PairInfo> navElement2pairInfo = new HashMap<>();
final Project project = context.getProject();
GlobalSearchScope scope = FlexCssUtil.getResolveScope(context);
Set<JSClass> visited = ContainerUtil.newLinkedHashSet();
for (String className : myClassNames) {
Collection<JSQualifiedNamedElement> candidates = StubIndex.getElements(JSQualifiedElementIndex.KEY, className.hashCode(), project, scope, JSQualifiedNamedElement.class);
findStyleAttributes(candidates, visited, navElement2pairInfo);
// search in MXML files
PsiElement jsClass = ActionScriptClassResolver.findClassByQNameStatic(className, scope);
if (jsClass instanceof JSClass) {
findStyleAttributesInClassOrSuper((JSClass) jsClass, visited, navElement2pairInfo);
}
}
Set<JSFile> visitedFiles = ContainerUtil.newLinkedHashSet();
for (String fileName : myFileNames) {
Collection<VirtualFile> files = FilenameIndex.getVirtualFilesByName(project, fileName, scope);
for (final VirtualFile file : files) {
PsiFile psiFile = ReadAction.compute(() -> PsiManager.getInstance(project).findFile(file));
if (psiFile instanceof JSFile) {
findStyleAttributesInFile((JSFile) psiFile, visitedFiles, navElement2pairInfo);
}
}
}
Set<PsiElement> navPairs = navElement2pairInfo.keySet();
Map<String, PsiElement> qName2ResultElement = new HashMap<>();
for (PsiElement navPair : navPairs) {
PairInfo pairInfo = navElement2pairInfo.get(navPair);
String jsClassQName = pairInfo.myJsClassQName;
PsiElement navPairInOtherClassWithSameQName = jsClassQName != null ? qName2ResultElement.get(jsClassQName) : null;
if (navPairInOtherClassWithSameQName == null || navPairInOtherClassWithSameQName == navElement2pairInfo.get(navPairInOtherClassWithSameQName) && pairInfo.myPair != navPair) {
qName2ResultElement.put(jsClassQName, navPair);
}
}
Collection<PsiElement> result = qName2ResultElement.values();
return PsiUtilCore.toPsiElementArray(result);
}
Aggregations