diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocUtil.java b/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocUtil.java
index ad10352c9aac..f8931046108b 100644
--- a/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocUtil.java
+++ b/java/java-psi-impl/src/com/intellij/codeInsight/javadoc/JavaDocUtil.java
@@ -115,12 +115,15 @@ public final class JavaDocUtil {
PsiClass aClass = classRef.isEmpty()
? PsiTreeUtil.getParentOfType(context, PsiClass.class, false)
: findClassFromRef(manager, facade, classRef, context);
- if (aClass == null) return null;
- if (fragmentIndex >= 0) {
- return findFragmentOwner(aClass, useNavigationElement, refTextCorrected, fragmentIndex, manager);
- } else {
- return findReference(aClass, useNavigationElement, refTextCorrected, poundIndex);
+ while (aClass != null){
+ PsiElement reference = fragmentIndex >= 0
+ ? findFragmentOwner(aClass, useNavigationElement, refTextCorrected, fragmentIndex, manager)
+ : findReference(aClass, context, useNavigationElement, refTextCorrected, poundIndex);
+ if (reference != null) return reference;
+
+ aClass = PsiTreeUtil.getParentOfType(aClass, PsiClass.class, true);
}
+ return null;
}
}
@@ -141,10 +144,11 @@ public final class JavaDocUtil {
}
private static @Nullable PsiElement findReference(@NotNull PsiClass refClass,
+ PsiElement context,
boolean useNavigationElement,
String refTextCorrected,
int poundIndex) {
- PsiElement member = findReferencedMember(refClass, refTextCorrected.substring(poundIndex + 1), refClass);
+ PsiElement member = findReferencedMember(refClass, refTextCorrected.substring(poundIndex + 1), context);
return useNavigationElement && member != null ? member.getNavigationElement() : member;
}
diff --git a/java/java-tests/testData/codeInsight/javadocIG/linkNested.html b/java/java-tests/testData/codeInsight/javadocIG/linkNested.html
new file mode 100644
index 000000000000..129a56239390
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/linkNested.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/linkNested.java b/java/java-tests/testData/codeInsight/javadocIG/linkNested.java
new file mode 100644
index 000000000000..498c7540a8d6
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/javadocIG/linkNested.java
@@ -0,0 +1,8 @@
+class Outside {
+ void outside(){}
+
+ class Inside {
+ /// [#outside()]
+ void inside(){}
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/markdownReferenceLink.html b/java/java-tests/testData/codeInsight/javadocIG/markdownReferenceLink.html
index ffec93af1346..e71c87cddeae 100644
--- a/java/java-tests/testData/codeInsight/javadocIG/markdownReferenceLink.html
+++ b/java/java-tests/testData/codeInsight/javadocIG/markdownReferenceLink.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/javadocIG/markdownReferenceLink.java b/java/java-tests/testData/codeInsight/javadocIG/markdownReferenceLink.java
index b213d6657582..3f7a22656621 100644
--- a/java/java-tests/testData/codeInsight/javadocIG/markdownReferenceLink.java
+++ b/java/java-tests/testData/codeInsight/javadocIG/markdownReferenceLink.java
@@ -3,4 +3,6 @@
/// [java.util.HashMap]
///
/// [The default empty collection][java.util.Collections#EMPTY_LIST]
+///
+/// [Test for context resolution][java.util.Collection#add(Object)]
class MarkdownCodeBlock {}
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/JavaDocInfoGeneratorTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/JavaDocInfoGeneratorTest.java
index 04dba31c97f9..329b2b348a11 100644
--- a/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/JavaDocInfoGeneratorTest.java
+++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/JavaDocInfoGeneratorTest.java
@@ -125,6 +125,10 @@ public class JavaDocInfoGeneratorTest extends JavaCodeInsightTestCase {
public void testLegacySpacesInLiteral() { useJava7(); verifyJavaDoc(getTestClass()); }
public void testLinkWithModule() { doTestClass(); }
public void testLinkToModule() { doTestClass(); }
+ public void testLinkNested() {
+ configureByFile();
+ verifyJavaDoc(getTestClass().getAllInnerClasses()[0].getMethods()[0]);
+ }
public void testLinkWithLineBreak() { doTestClass(); }
public void testDocumentationForJdkClassWithReferencesToClassesFromJavaLang() { useJava7(); doTestAtCaret(); }
public void testDocumentationForUncheckedExceptionsInSupers() { useJava7(); doTestAtCaret(); }