Added quick documentation for declarations, in addition to references.

#KT-1035 fixed
This commit is contained in:
Evgeny Gerashchenko
2012-05-08 04:05:10 +04:00
parent c9a84ee52c
commit 1c55796a92
@@ -26,6 +26,7 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.xml.util.XmlStringUtil; import com.intellij.xml.util.XmlStringUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.psi.JetDeclaration;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetReferenceExpression; import org.jetbrains.jet.lang.psi.JetReferenceExpression;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
@@ -47,16 +48,24 @@ public class JetQuickDocumentationProvider extends AbstractDocumentationProvider
else { else {
ref = PsiTreeUtil.getParentOfType(originalElement, JetReferenceExpression.class); ref = PsiTreeUtil.getParentOfType(originalElement, JetReferenceExpression.class);
} }
if (ref != null) { PsiElement declarationPsiElement = PsiTreeUtil.getParentOfType(originalElement, JetDeclaration.class);
BindingContext bindingContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile((JetFile) ref.getContainingFile()) if (ref != null || declarationPsiElement != null) {
.getBindingContext(); BindingContext bindingContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile(
DeclarationDescriptor declarationDescriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, ref); (JetFile) originalElement.getContainingFile()).getBindingContext();
if (declarationDescriptor != null) {
return render(declarationDescriptor, bindingContext, element, originalElement, mergeKotlinAndJava); if (ref != null) {
DeclarationDescriptor declarationDescriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, ref);
if (declarationDescriptor != null) {
return render(declarationDescriptor, bindingContext, element, originalElement, mergeKotlinAndJava);
}
if (declarationPsiElement != null) {
declarationPsiElement = BindingContextUtils.resolveToDeclarationPsiElement(bindingContext, ref);
}
} }
PsiElement psiElement = BindingContextUtils.resolveToDeclarationPsiElement(bindingContext, ref);
if (psiElement != null) { if (declarationPsiElement != null) {
declarationDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, psiElement); DeclarationDescriptor declarationDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR,
declarationPsiElement);
if (declarationDescriptor != null) { if (declarationDescriptor != null) {
return render(declarationDescriptor, bindingContext, element, originalElement, mergeKotlinAndJava); return render(declarationDescriptor, bindingContext, element, originalElement, mergeKotlinAndJava);
} }