use of com.intellij.psi.ResolveResult in project intellij-plugins by JetBrains.
the class ActionScriptResolveTest method testResolveInClassDynamic.
public void testResolveInClassDynamic() throws Exception {
String fileText = "public class T {\n" + " public function m() : String {\n" + " return \"m\";\n" + " }\n" + "\n" + " public function test() : String {\n" + " function foo():String {\n" + " return this.<ref>m();\n" + " }\n" + " return foo();\n" + " }\n" + "}\n" + "function m() {}";
JSReferenceExpression ref = (JSReferenceExpression) configureByFileText(fileText, "sample.js2");
ResolveResult[] results = ref.multiResolve(false);
assertEquals(2, results.length);
}
use of com.intellij.psi.ResolveResult in project intellij-plugins by JetBrains.
the class CfmlResolveResult method create.
public static ResolveResult[] create(Collection<? extends PsiElement> from) {
final ResolveResult[] results = from.size() > 0 ? new ResolveResult[from.size()] : EMPTY_ARRAY;
int i = 0;
for (PsiElement element : from) {
results[i++] = new CfmlResolveResult(element);
}
return results;
}
use of com.intellij.psi.ResolveResult in project intellij-plugins by JetBrains.
the class ActionScriptReferenceExpressionResolver method resolve.
@NotNull
@Override
public ResolveResult[] resolve(@NotNull JSReferenceExpressionImpl expression, boolean incompleteCode) {
if (myReferencedName == null)
return ResolveResult.EMPTY_ARRAY;
PsiElement currentParent = JSResolveUtil.getTopReferenceParent(myParent);
if (JSResolveUtil.isSelfReference(currentParent, myRef)) {
if (!(currentParent instanceof JSPackageStatement) || myParent == currentParent) {
return new ResolveResult[] { new JSResolveResult(currentParent) };
}
}
if (isConditionalVariableReference(currentParent, myRef)) {
if (ModuleUtilCore.findModuleForPsiElement(myRef) == null) {
// do not red highlight conditional compiler definitions in 3rd party library/SDK source code
return new ResolveResult[] { new JSResolveResult(myRef) };
} else {
return resolveConditionalCompilationVariable(myRef);
}
}
if (myRef.isAttributeReference()) {
return dummyResult(myRef);
}
if (JSCommonTypeNames.ANY_TYPE.equals(myReferencedName)) {
if (currentParent instanceof JSImportStatement && myQualifier instanceof JSReferenceExpression)
return ((JSReferenceExpression) myQualifier).multiResolve(false);
if (myParent instanceof JSE4XNamespaceReference)
return dummyResult(myRef);
}
// nonqualified items in implements list in mxml
if (myParent instanceof JSReferenceListMember && myParent.getParent().getNode().getElementType() == JSStubElementTypes.IMPLEMENTS_LIST && myRef.getQualifier() == null && myContainingFile instanceof JSFile && XmlBackedJSClassImpl.isImplementsAttribute((JSFile) myContainingFile)) {
PsiElement byQName = ActionScriptClassResolver.findClassByQNameStatic(myRef.getText(), myRef);
// for some reason Flex compiler allows to implement non-public interface in default package, so let's not check access type here
if (byQName != null)
return new ResolveResult[] { new JSResolveResult(byQName) };
return ResolveResult.EMPTY_ARRAY;
}
SinkResolveProcessor<ResolveResultSink> localProcessor;
if (myLocalResolve) {
final PsiElement topParent = JSResolveUtil.getTopReferenceParent(myParent);
localProcessor = new SinkResolveProcessor<ResolveResultSink>(myReferencedName, myRef, new ResolveResultSink(myRef, myReferencedName)) {
@Override
public boolean needPackages() {
if (myParent instanceof JSReferenceExpression && topParent instanceof JSImportStatement) {
return true;
}
return super.needPackages();
}
};
localProcessor.setToProcessHierarchy(true);
JSReferenceExpressionImpl.doProcessLocalDeclarations(myRef, myQualifier, localProcessor, true, false, null);
PsiElement jsElement = localProcessor.getResult();
if (myQualifier instanceof JSThisExpression && localProcessor.processingEncounteredAnyTypeAccess() && // this is from ecma script closure, proceed it in JavaScript way
jsElement != null) {
localProcessor.getResults().clear();
jsElement = null;
}
if (myQualifier == null) {
final JSReferenceExpression namespaceReference = JSReferenceExpressionImpl.getNamespaceReference(myRef);
ResolveResult[] resolveResultsAsConditionalCompilationVariable = null;
if (namespaceReference != null && (namespaceReference == myRef || namespaceReference.resolve() == namespaceReference)) {
if (jsElement == null && ModuleUtilCore.findModuleForPsiElement(myRef) == null) {
// do not red highlight conditional compiler definitions in 3rd party library/SDK source code
return new ResolveResult[] { new JSResolveResult(myRef) };
}
resolveResultsAsConditionalCompilationVariable = resolveConditionalCompilationVariable(myRef);
}
if (resolveResultsAsConditionalCompilationVariable != null && resolveResultsAsConditionalCompilationVariable.length > 0 && (jsElement == null || resolveResultsAsConditionalCompilationVariable[0].isValidResult())) {
return resolveResultsAsConditionalCompilationVariable;
}
}
if (jsElement != null || localProcessor.isEncounteredDynamicClasses() && myQualifier == null || !localProcessor.processingEncounteredAnyTypeAccess() && !localProcessor.isEncounteredDynamicClasses()) {
return localProcessor.getResultsAsResolveResults();
}
} else {
final QualifiedItemProcessor<ResolveResultSink> processor = new QualifiedItemProcessor<>(new ResolveResultSink(myRef, myReferencedName), myContainingFile);
processor.setTypeContext(JSResolveUtil.isExprInTypeContext(myRef));
JSTypeEvaluator.evaluateTypes(myQualifier, myContainingFile, processor);
if (processor.resolved == QualifiedItemProcessor.TypeResolveState.PrefixUnknown) {
return dummyResult(myRef);
}
if (processor.resolved == QualifiedItemProcessor.TypeResolveState.Resolved || processor.resolved == QualifiedItemProcessor.TypeResolveState.Undefined || processor.getResult() != null) {
return processor.getResultsAsResolveResults();
} else {
localProcessor = processor;
}
}
ResolveResult[] results = resolveFromIndices(localProcessor);
if (results.length == 0 && localProcessor.isEncounteredXmlLiteral()) {
return dummyResult(myRef);
}
return results;
}
use of com.intellij.psi.ResolveResult in project intellij-community by JetBrains.
the class MavenGroovyPomCompletionWeigher method weigh.
@Override
public Comparable weigh(@NotNull LookupElement element, @NotNull CompletionLocation location) {
PsiFile containingFile = location.getCompletionParameters().getPosition().getContainingFile();
if (!(containingFile instanceof GroovyFileBase)) {
return null;
}
if (!"pom.groovy".equals(containingFile.getName()))
return null;
Object o = element.getObject();
if (o instanceof ResolveResult) {
o = ((ResolveResult) o).getElement();
}
if (o instanceof DynamicMemberUtils.DynamicElement) {
return 1;
} else {
return -1;
}
}
use of com.intellij.psi.ResolveResult in project intellij-community by JetBrains.
the class TemplateReference method multiResolve.
@NotNull
public ResolveResult[] multiResolve(boolean incompleteCode) {
final PsiElement element = resolve();
if (element != null) {
return new ResolveResult[] { new PsiElementResolveResult(element) };
}
final XmlFile xmlFile = (XmlFile) getElement().getContainingFile();
if (xmlFile != null) {
final List<PsiElementResolveResult> targets = new SmartList<>();
XsltIncludeIndex.processBackwardDependencies(xmlFile, xmlFile1 -> {
final PsiElement e = ResolveUtil.resolve(new NamedTemplateMatcher(xmlFile1.getDocument(), myName));
if (e != null) {
targets.add(new PsiElementResolveResult(e));
}
return true;
});
return targets.toArray(new ResolveResult[targets.size()]);
} else {
return ResolveResult.EMPTY_ARRAY;
}
}
Aggregations