IDEA-187505 Locally-referenced images are not displayed in quick doc

This commit is contained in:
Dmitry Batrak
2018-03-01 15:16:04 +03:00
parent dcdf003413
commit 1dd0a87b00
54 changed files with 103 additions and 81 deletions
@@ -1,4 +1,4 @@
// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.codeInsight.javadoc;
import com.intellij.codeInsight.AnnotationUtil;
@@ -25,6 +25,7 @@ import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.impl.JavaConstantExpressionEvaluator;
@@ -50,6 +51,7 @@ import org.jetbrains.annotations.Nullable;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.*;
import java.util.function.Supplier;
import java.util.regex.Matcher;
@@ -212,6 +214,7 @@ public class JavaDocInfoGenerator {
public String generateFileInfo() {
StringBuilder buffer = new StringBuilder();
if (myElement instanceof PsiFile) {
generatePrologue(buffer);
VirtualFile virtualFile = ((PsiFile)myElement).getVirtualFile();
if (virtualFile != null) buffer.append(virtualFile.getPresentableUrl());
@@ -354,40 +357,32 @@ public class JavaDocInfoGenerator {
return packageName;
}
/**
* To be deleted in 2018.2
*/
@Deprecated
public boolean generateDocInfoCore(StringBuilder buffer, boolean generatePrologueAndEpilogue) {
return generateDocInfoCore(buffer);
}
public boolean generateDocInfoCore(StringBuilder buffer) {
public boolean generateDocInfoCore(StringBuilder buffer, boolean generatePrologue) {
if (myElement instanceof PsiClass) {
generateClassJavaDoc(buffer, (PsiClass)myElement);
generateClassJavaDoc(buffer, (PsiClass)myElement, generatePrologue);
}
else if (myElement instanceof PsiMethod) {
generateMethodJavaDoc(buffer, (PsiMethod)myElement);
generateMethodJavaDoc(buffer, (PsiMethod)myElement, generatePrologue);
}
else if (myElement instanceof PsiParameter) {
generateMethodParameterJavaDoc(buffer, (PsiParameter)myElement);
generateMethodParameterJavaDoc(buffer, (PsiParameter)myElement, generatePrologue);
}
else if (myElement instanceof PsiField) {
generateFieldJavaDoc(buffer, (PsiField)myElement);
generateFieldJavaDoc(buffer, (PsiField)myElement, generatePrologue);
}
else if (myElement instanceof PsiVariable) {
generateVariableJavaDoc(buffer, (PsiVariable)myElement);
generateVariableJavaDoc(buffer, (PsiVariable)myElement, generatePrologue);
}
else if (myElement instanceof PsiDirectory) {
PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage((PsiDirectory)myElement);
if (aPackage == null) return false;
generatePackageJavaDoc(buffer, aPackage);
generatePackageJavaDoc(buffer, aPackage, generatePrologue);
}
else if (myElement instanceof PsiPackage) {
generatePackageJavaDoc(buffer, (PsiPackage)myElement);
generatePackageJavaDoc(buffer, (PsiPackage)myElement, generatePrologue);
}
else if (myElement instanceof PsiJavaModule) {
generateModuleJavaDoc(buffer, (PsiJavaModule)myElement);
generateModuleJavaDoc(buffer, (PsiJavaModule)myElement, generatePrologue);
}
else {
return false;
@@ -414,7 +409,7 @@ public class JavaDocInfoGenerator {
public String generateDocInfo(List<String> docURLs) {
StringBuilder buffer = new StringBuilder();
if (!generateDocInfoCore(buffer)) {
if (!generateDocInfoCore(buffer, true)) {
return null;
}
@@ -463,9 +458,11 @@ public class JavaDocInfoGenerator {
return false;
}
private void generateClassJavaDoc(StringBuilder buffer, PsiClass aClass) {
private void generateClassJavaDoc(StringBuilder buffer, PsiClass aClass, boolean generatePrologue) {
if (aClass instanceof PsiAnonymousClass) return;
if (generatePrologue) generatePrologue(buffer);
buffer.append(DocumentationMarkup.DEFINITION_START);
PsiFile file = aClass.getContainingFile();
if (file instanceof PsiJavaFile) {
@@ -626,7 +623,8 @@ public class JavaDocInfoGenerator {
return comment;
}
private void generateFieldJavaDoc(StringBuilder buffer, PsiField field) {
private void generateFieldJavaDoc(StringBuilder buffer, PsiField field, boolean generatePrologue) {
if (generatePrologue) generatePrologue(buffer);
buffer.append(DocumentationMarkup.DEFINITION_START);
generateLinkToParentIfNeeded(buffer, field);
@@ -678,7 +676,8 @@ public class JavaDocInfoGenerator {
}
// not a javadoc in fact..
private static void generateVariableJavaDoc(StringBuilder buffer, PsiVariable variable) {
private void generateVariableJavaDoc(StringBuilder buffer, PsiVariable variable, boolean generatePrologue) {
if (generatePrologue) generatePrologue(buffer);
buffer.append(DocumentationMarkup.DEFINITION_START);
String modifiers = PsiFormatUtil.formatModifiers(variable, PsiFormatUtilBase.JAVADOC_MODIFIERS_ONLY);
@@ -700,7 +699,7 @@ public class JavaDocInfoGenerator {
}
private void generatePackageJavaDoc(final StringBuilder buffer, final PsiPackage psiPackage) {
private void generatePackageJavaDoc(final StringBuilder buffer, final PsiPackage psiPackage, boolean generatePrologue) {
for (PsiDirectory directory : psiPackage.getDirectories(new EverythingGlobalScope(myProject))) {
final PsiFile packageInfoFile = directory.findFile(PsiPackage.PACKAGE_INFO_FILE);
if (packageInfoFile != null) {
@@ -708,6 +707,7 @@ public class JavaDocInfoGenerator {
if (node != null) {
final ASTNode docCommentNode = findRelevantCommentNode(node);
if (docCommentNode != null) {
if (generatePrologue) generatePrologue(buffer);
generateCommonSection(buffer, (PsiDocComment)docCommentNode.getPsi());
buffer.append(DocumentationMarkup.SECTIONS_END);
break;
@@ -716,13 +716,14 @@ public class JavaDocInfoGenerator {
}
PsiFile packageHtmlFile = directory.findFile("package.html");
if (packageHtmlFile != null) {
generatePackageHtmlJavaDoc(buffer, packageHtmlFile);
generatePackageHtmlJavaDoc(buffer, packageHtmlFile, generatePrologue);
break;
}
}
}
private void generateModuleJavaDoc(StringBuilder buffer, PsiJavaModule module) {
private void generateModuleJavaDoc(StringBuilder buffer, PsiJavaModule module, boolean generatePrologue) {
if (generatePrologue) generatePrologue(buffer);
buffer.append(DocumentationMarkup.DEFINITION_START);
generateAnnotations(buffer, module, SignaturePlace.Javadoc, true);
@@ -770,7 +771,7 @@ public class JavaDocInfoGenerator {
}
}
private void generatePackageHtmlJavaDoc(final StringBuilder buffer, final PsiFile packageHtmlFile) {
private void generatePackageHtmlJavaDoc(final StringBuilder buffer, final PsiFile packageHtmlFile, boolean generatePrologue) {
String htmlText = packageHtmlFile.getText();
try {
@@ -796,6 +797,7 @@ public class JavaDocInfoGenerator {
return;
}
if (generatePrologue) generatePrologue(buffer);
generateCommonSection(buffer, docComment);
buffer.append(DocumentationMarkup.SECTIONS_END);
}
@@ -895,9 +897,10 @@ public class JavaDocInfoGenerator {
AnnotationUtil.isAnnotated((PsiClass)annotationType, CommonClassNames.JAVA_LANG_ANNOTATION_REPEATABLE, 0);
}
private void generateMethodParameterJavaDoc(StringBuilder buffer, PsiParameter parameter) {
private void generateMethodParameterJavaDoc(StringBuilder buffer, PsiParameter parameter, boolean generatePrologue) {
String parameterName = parameter.getName();
if (generatePrologue) generatePrologue(buffer);
buffer.append(DocumentationMarkup.DEFINITION_START);
@@ -964,7 +967,8 @@ public class JavaDocInfoGenerator {
return buffer.toString();
}
private void generateMethodJavaDoc(StringBuilder buffer, PsiMethod method) {
private void generateMethodJavaDoc(StringBuilder buffer, PsiMethod method, boolean generatePrologue) {
if (generatePrologue) generatePrologue(buffer);
buffer.append(DocumentationMarkup.DEFINITION_START);
generateLinkToParentIfNeeded(buffer, method);
@@ -1182,6 +1186,24 @@ public class JavaDocInfoGenerator {
}
}
protected void generatePrologue(StringBuilder buffer) {
URL baseUrl = getBaseUrl();
if (baseUrl != null) {
buffer.append("<html><head><base href=\"").append(baseUrl).append("\"></head><body>");
}
}
private URL getBaseUrl() {
if (myElement == null) return null;
PsiElement element = myElement.getNavigationElement();
if (element == null) return null;
PsiFile file = element.getContainingFile();
if (file == null) return null;
VirtualFile vFile = file.getVirtualFile();
if (vFile == null) return null;
return VfsUtilCore.convertToURL(vFile.getUrl());
}
private void generateDescription(StringBuilder buffer, PsiDocComment comment) {
PsiElement[] elements = comment.getDescriptionElements();
generateValue(buffer, elements, ourEmptyElementsProvider);
@@ -1,3 +1,3 @@
<div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br><font color=red>@Nullable</font>&nbsp;
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br><font color=red>@Nullable</font>&nbsp;
@<a href="psi_element://java.lang.Deprecated"><code>Deprecated</code></a>&nbsp;
public <a href="psi_element://java.lang.String"><code>String</code></a> <b>field</b> = null</pre></div><table class='sections'></table>
@@ -1,2 +1,2 @@
<div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br>public&nbsp;void&nbsp;<b>foo</b>(@<a href="psi_element://java.lang.Deprecated"><code>Deprecated</code></a>&nbsp;<a href="psi_element://java.lang.String"><code>String</code></a>&nbsp;s,
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br>public&nbsp;void&nbsp;<b>foo</b>(@<a href="psi_element://java.lang.Deprecated"><code>Deprecated</code></a>&nbsp;<a href="psi_element://java.lang.String"><code>String</code></a>&nbsp;s,
@<a href="psi_element://java.lang.Deprecated"><code>Deprecated</code></a>&nbsp;<a href="psi_element://java.lang.String"><code>String</code></a>&nbsp;p)</pre></div><table class='sections'><p></table>
@@ -1,3 +1,3 @@
<div class='definition'><pre>public&nbsp;void&nbsp;<b>foo</b>()</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Description copied from interface:</td><td><p><a href="psi_element://Foo"><code>Foo</code></a><br>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>public&nbsp;void&nbsp;<b>foo</b>()</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Description copied from interface:</td><td><p><a href="psi_element://Foo"><code>Foo</code></a><br>
some javadoc
</td><tr><td valign='top' class='section'><p>Specified by:</td><td><p><a href="psi_element://Foo#foo()"><code>foo</code></a> in interface <a href="psi_element://Foo"><code>Foo</code></a></td></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br>public&nbsp;void&nbsp;<b>foo</b>()</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>apiNote:</td><td><p> my api note </td><tr><td valign='top' class='section'><p>implSpec:</td><td><p> my impl spec </td><tr><td valign='top' class='section'><p>implNote:</td><td><p> my impl note</td></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br>public&nbsp;void&nbsp;<b>foo</b>()</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>apiNote:</td><td><p> my api note </td><tr><td valign='top' class='section'><p>implSpec:</td><td><p> my impl spec </td><tr><td valign='top' class='section'><p>implNote:</td><td><p> my impl note</td></table>
@@ -1,2 +1,2 @@
<div class='definition'><pre>class <b>C</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>class <b>C</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><div class='content'> Some <a href="http://dummy.link">link</a> </div><table class='sections'><p></table>
@@ -1,3 +1,3 @@
<div class='definition'><pre>class <b>MethodTypeParam</b>&lt;T&gt;
<html><head><base href="placeholder"></head><body><div class='definition'><pre>class <b>MethodTypeParam</b>&lt;T&gt;
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><div class='content'>
</div><table class='sections'><p><tr><td valign='top' class='section'><p>Type parameters:</td><td>&lt;T&gt; &ndash; type param</td></table>
@@ -1,3 +1,3 @@
<div class='definition'><pre>@<a href="psi_element://Bar"><code>Bar</code></a>(<a href="psi_element://Baz#CONST"><code>Baz.CONST</code></a>,&nbsp;value = {<a href="psi_element://Baz#CONST"><code>Baz.CONST</code></a>})&nbsp;
<html><head><base href="placeholder"></head><body><div class='definition'><pre>@<a href="psi_element://Bar"><code>Bar</code></a>(<a href="psi_element://Baz#CONST"><code>Baz.CONST</code></a>,&nbsp;value = {<a href="psi_element://Baz#CONST"><code>Baz.CONST</code></a>})&nbsp;
class <b>Foo</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><table class='sections'></table>
@@ -1,4 +1,4 @@
<div class='definition'><pre><a href="psi_element://Foo"><code>Foo</code></a><br>int <b>foo</b></pre></div><div class='content'>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Foo"><code>Foo</code></a><br>int <b>foo</b></pre></div><div class='content'>
<pre>
<code>
class Clazzz {
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br>public <a href="psi_element://java.lang.String"><code>String</code></a> <b>field</b> = foo(&quot;&quot;, &quot;&quot;)</pre></div><table class='sections'></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br>public <a href="psi_element://java.lang.String"><code>String</code></a> <b>field</b> = foo(&quot;&quot;, &quot;&quot;)</pre></div><table class='sections'></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br>public static final int <b>field</b> = 1 + 1<span class='grayed'> = 2</span></pre></div><table class='sections'></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br>public static final int <b>field</b> = 1 + 1<span class='grayed'> = 2</span></pre></div><table class='sections'></table>
@@ -1,3 +1,3 @@
<div class='definition'><pre><a href="psi_element://FooBar"><code>FooBar</code></a><br>public&nbsp;<a href="psi_element://java.lang.String"><code>String</code></a>&nbsp;<b>getMyFoo</b>()</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Description copied from field:</td><td><p><a href="psi_element://FooBar#myFoo"><code>myFoo</code></a><br>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://FooBar"><code>FooBar</code></a><br>public&nbsp;<a href="psi_element://java.lang.String"><code>String</code></a>&nbsp;<b>getMyFoo</b>()</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Description copied from field:</td><td><p><a href="psi_element://FooBar#myFoo"><code>myFoo</code></a><br>
foo bar baz
</td></table>
@@ -1,4 +1,4 @@
<div class='definition'><pre>java.lang<br>public final class <b>String</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>java.lang<br>public final class <b>String</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a>
implements <a href="psi_element://java.io.Serializable"><code>java.io.Serializable</code></a>,&nbsp;<a href="psi_element://java.lang.Comparable"><code>Comparable</code></a>&lt;<a href="psi_element://java.lang.String"><code>String</code></a>&gt;,&nbsp;<a href="psi_element://java.lang.CharSequence"><code>CharSequence</code></a></pre></div><div class='content'>
The <code>String</code> class represents character strings. All
@@ -1,4 +1,4 @@
<div class='definition'><pre><a href="psi_element://java.util.List"><code>java.util.List&lt;E&gt;</code></a><br><i>@<a href="psi_element://org.jetbrains.annotations.Contract"><code>Contract</code></a>(pure = true)</i>&nbsp;
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://java.util.List"><code>java.util.List&lt;E&gt;</code></a><br><i>@<a href="psi_element://org.jetbrains.annotations.Contract"><code>Contract</code></a>(pure = true)</i>&nbsp;
public abstract&nbsp;boolean&nbsp;<b>contains</b>(<a href="psi_element://java.lang.Object"><code>Object</code></a>&nbsp;o)</pre></div><div class='content'>
Returns <tt>true</tt> if this list contains the specified element.
More formally, returns <tt>true</tt> if and only if this list contains
@@ -1,4 +1,4 @@
<div class='definition'><pre><a href="psi_element://My"><code>My</code></a><br><i>@<a href="psi_element://org.jetbrains.annotations.Contract"><code>Contract</code></a>(pure = true)</i>&nbsp;
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://My"><code>My</code></a><br><i>@<a href="psi_element://org.jetbrains.annotations.Contract"><code>Contract</code></a>(pure = true)</i>&nbsp;
boolean&nbsp;<b>contains</b>(<a href="psi_element://java.lang.Object"><code>Object</code></a>&nbsp;o)</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Description copied from interface:</td><td><p><a href="psi_element://java.util.Collection"><code>java.util.Collection</code></a><br>
Returns <tt>true</tt> if this collection contains the specified element.
More formally, returns <tt>true</tt> if and only if this collection
@@ -1,4 +1,4 @@
<div class='definition'><pre>class <b>C</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>class <b>C</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><div class='content'>
a &lt;&lt; b
</div><table class='sections'><p></table>
@@ -1,4 +1,4 @@
<div class='definition'><pre>class <b>C</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>class <b>C</b>
extends java.lang.Object</pre></div><div class='content'>
some text
@@ -1,2 +1,2 @@
<div class='definition'><pre><a href="psi_element://E"><code>E</code></a><br><a href="psi_element://E"><code>E</code></a> <b>A</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://E"><code>E</code></a><br><a href="psi_element://E"><code>E</code></a> <b>A</b>
Enum constant ordinal: 0</pre></div><table class='sections'></table>
@@ -1,4 +1,4 @@
<div class='definition'><pre><a href="psi_element://En"><code>En</code></a><br><i>@<a href="psi_element://org.jetbrains.annotations.Contract"><code>Contract</code></a>(pure = true)</i>&nbsp;
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://En"><code>En</code></a><br><i>@<a href="psi_element://org.jetbrains.annotations.Contract"><code>Contract</code></a>(pure = true)</i>&nbsp;
static&nbsp;int&nbsp;<b>valueOf</b>(int&nbsp;i)</pre></div><div class='content'>
myjavadoc
<p></div><table class='sections'><p><tr><td valign='top' class='section'><p>Params:</td><td>i &ndash; </td><tr><td valign='top' class='section'><p>Returns:</td><td><p></td><tr><td valign='top' class='section'><p><i>Inferred</i> annotations:</td><td><p><i>@<a href="psi_element://org.jetbrains.annotations.Contract"><code>org.jetbrains.annotations.Contract</code></a>(pure = true)</i></td></table>
@@ -1,4 +1,4 @@
<div class='definition'><pre>class <b>Pattern</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>class <b>Pattern</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><div class='content'>
\W \n
</div><table class='sections'><p></table>
@@ -1,3 +1,3 @@
<div class='definition'><pre><a href="psi_element://Foo"><code>Foo</code></a><br>int <b>foo</b></pre></div><div class='content'>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Foo"><code>Foo</code></a><br>int <b>foo</b></pre></div><div class='content'>
&amp;gt; is &gt; &amp;lt; is &lt; &amp;quot; is &quot;
</div><table class='sections'><p></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static&nbsp;void&nbsp;<b>JAVADOC_ME</b>()</pre></div><div class='content'> The value of B is <a href="psi_element://A#B">"a&lt;b"</a>. <p></div><table class='sections'><p></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static&nbsp;void&nbsp;<b>JAVADOC_ME</b>()</pre></div><div class='content'> The value of B is <a href="psi_element://A#B">"a&lt;b"</a>. <p></div><table class='sections'><p></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static int[] <b>x</b> = new int[]{1, 2, 3}</pre></div><table class='sections'></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static int[] <b>x</b> = new int[]{1, 2, 3}</pre></div><table class='sections'></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static <font color=red>java.util.function.Consumer&lt;Integer&gt;</font> <b>F</b> = i -&gt; System.out.println(i)</pre></div><table class='sections'></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static <font color=red>java.util.function.Consumer&lt;Integer&gt;</font> <b>F</b> = i -&gt; System.out.println(i)</pre></div><table class='sections'></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static int[] <b>x</b> = new int[1]</pre></div><table class='sections'></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static int[] <b>x</b> = new int[1]</pre></div><table class='sections'></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static int <b>JAVADOC_ME</b> = 23</pre></div><div class='content'> The value of the field is 23. </div><table class='sections'><p></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static int <b>JAVADOC_ME</b> = 23</pre></div><div class='content'> The value of the field is 23. </div><table class='sections'><p></table>
@@ -1,2 +1,2 @@
<div class='definition'><pre>class <b>htmlLink</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>class <b>htmlLink</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><div class='content'> <a href="psi_element://other">link</a> </div><table class='sections'><p></table>
@@ -1,2 +1,2 @@
<div class='definition'><pre>pack<br>class <b>htmlLinkDeep</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>pack<br>class <b>htmlLinkDeep</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><div class='content'> <a href="psi_element://other">link</a> </div><table class='sections'><p></table>
@@ -1,4 +1,4 @@
<div class='definition'><pre>pack<br>class <b>A</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>pack<br>class <b>A</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><div class='content'>
<a href="psi_element://pack###section2">link</a>
</div><table class='sections'><p></table>
@@ -1,4 +1,4 @@
<div class='definition'><pre>class <b>Test</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>class <b>Test</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><div class='content'>
<a name="section1">section one</a>
text
@@ -1,2 +1,2 @@
<div class='definition'><pre><a href="psi_element://Idea4780"><code>Idea4780</code></a><br>public&nbsp;<a href="psi_element://java.lang.Object"><code>Object</code></a>&nbsp;<b>read</b>()
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Idea4780"><code>Idea4780</code></a><br>public&nbsp;<a href="psi_element://java.lang.Object"><code>Object</code></a>&nbsp;<b>read</b>()
throws&nbsp;<a href="psi_element://java.io.IOException"><code>IOException</code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Throws:</td><td><p><a href="psi_element://java.io.IOException"><code>IOException</code></a> &ndash; if an I/O error occurs while reading. <p><a href="psi_element://java.io.EOFException"><code>EOFException</code></a> &ndash; if this source is already closed when the <code>read()</code> is called, or is closed during the <code>read()</code>. <p><font color=red>InterruptedIOException</font> &ndash; if the reading thread is interrupted.</td></table>
@@ -1,2 +1,2 @@
<div class='definition'><pre><a href="psi_element://InheritedDocInThrows"><code>InheritedDocInThrows</code></a><br>void&nbsp;<b>foo</b>()
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://InheritedDocInThrows"><code>InheritedDocInThrows</code></a><br>void&nbsp;<b>foo</b>()
throws&nbsp;<a href="psi_element://java.io.IOException"><code>IOException</code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td><p><a href="psi_element://A#foo()"><code>foo</code></a> in class <a href="psi_element://A"><code>A</code></a></td><tr><td valign='top' class='section'><p>Throws:</td><td><p><a href="psi_element://java.io.IOException"><code>IOException</code></a> &ndash; la-la-la</td></table>
@@ -1,2 +1,2 @@
<div class='definition'><pre><a href="psi_element://InheritedDocInThrows1"><code>InheritedDocInThrows1</code></a><br>void&nbsp;<b>foo</b>()
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://InheritedDocInThrows1"><code>InheritedDocInThrows1</code></a><br>void&nbsp;<b>foo</b>()
throws&nbsp;<a href="psi_element://java.io.IOException"><code>IOException</code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td><p><a href="psi_element://A#foo()"><code>foo</code></a> in class <a href="psi_element://A"><code>A</code></a></td><tr><td valign='top' class='section'><p>Throws:</td><td><p><a href="psi_element://java.io.IOException"><code>IOException</code></a> &ndash; comment</td></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://java.lang.String"><code>String</code></a> <b>s</b></pre></div><div class='content'>s &ndash; String parameter.</div><table class='sections'></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://java.lang.String"><code>String</code></a> <b>s</b></pre></div><div class='content'>s &ndash; String parameter.</div><table class='sections'></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public <a href="psi_element://java.lang.String"><code>String</code></a> <b>strings</b> = &quot;A&lt;BLANK&gt;B&quot;</pre></div><table class='sections'></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public <a href="psi_element://java.lang.String"><code>String</code></a> <b>strings</b> = &quot;A&lt;BLANK&gt;B&quot;</pre></div><table class='sections'></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public <a href="psi_element://java.util.List"><code>List</code></a>&lt;<a href="psi_element://java.lang.String"><code>String</code></a>&gt; <b>strings</b> = new <a href="psi_element://java.util.ArrayList"><code>ArrayList</code></a>&lt;<a href="psi_element://java.lang.String"><code>String</code></a>&gt;(new <a href="psi_element://java.util.ArrayList"><code>ArrayList</code></a>&lt;<a href="psi_element://java.lang.Integer"><code>Integer</code></a>&gt;(), Collections.singleton(new <a href="psi_element://java.util.ArrayList"><code>ArrayList</code></a>&lt;<a href="psi_element://java.lang.Double"><code>Double</code></a>&gt;()))</pre></div><table class='sections'></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public <a href="psi_element://java.util.List"><code>List</code></a>&lt;<a href="psi_element://java.lang.String"><code>String</code></a>&gt; <b>strings</b> = new <a href="psi_element://java.util.ArrayList"><code>ArrayList</code></a>&lt;<a href="psi_element://java.lang.String"><code>String</code></a>&gt;(new <a href="psi_element://java.util.ArrayList"><code>ArrayList</code></a>&lt;<a href="psi_element://java.lang.Integer"><code>Integer</code></a>&gt;(), Collections.singleton(new <a href="psi_element://java.util.ArrayList"><code>ArrayList</code></a>&lt;<a href="psi_element://java.lang.Double"><code>Double</code></a>&gt;()))</pre></div><table class='sections'></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br>public int <b>field</b> = anotherField</pre></div><table class='sections'></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br>public int <b>field</b> = anotherField</pre></div><table class='sections'></table>
@@ -1 +1 @@
<div class='definition'><pre>int <b>a</b></pre></div><table class='sections'></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>int <b>a</b></pre></div><table class='sections'></table>
@@ -1,2 +1,2 @@
<div class='definition'><pre>class <b>Test</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>class <b>Test</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><div class='content'> <pre>abc</pre> </div><table class='sections'><p></table>
@@ -1,3 +1,3 @@
<div class='definition'><pre><a href="psi_element://Foo"><code>Foo</code></a><br>int <b>foo</b></pre></div><div class='content'>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Foo"><code>Foo</code></a><br>int <b>foo</b></pre></div><div class='content'>
foo&lt;&gt;
</div><table class='sections'><p></table>
@@ -1,2 +1,2 @@
<div class='definition'><pre>class <b>Foo</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>class <b>Foo</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><table class='sections'></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://Bar"><code>Bar</code></a><br>void&nbsp;<b>m</b>(int&nbsp;bar)</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td><p><a href="psi_element://Foo#m(int)"><code>m</code></a> in class <a href="psi_element://Foo"><code>Foo</code></a></td><tr><td valign='top' class='section'><p>Params:</td><td>bar &ndash; description</td></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Bar"><code>Bar</code></a><br>void&nbsp;<b>m</b>(int&nbsp;bar)</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td><p><a href="psi_element://Foo#m(int)"><code>m</code></a> in class <a href="psi_element://Foo"><code>Foo</code></a></td><tr><td valign='top' class='section'><p>Params:</td><td>bar &ndash; description</td></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://Bar"><code>Bar</code></a><br>&lt;U&gt;&nbsp;void&nbsp;<b>m</b>(U&nbsp;u)</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td><p><a href="psi_element://Foo#m(java.lang.Object)"><code>m</code></a> in class <a href="psi_element://Foo"><code>Foo</code></a></td><tr><td valign='top' class='section'><p>Type parameters:</td><td>&lt;U&gt; &ndash; description</td></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Bar"><code>Bar</code></a><br>&lt;U&gt;&nbsp;void&nbsp;<b>m</b>(U&nbsp;u)</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td><p><a href="psi_element://Foo#m(java.lang.Object)"><code>m</code></a> in class <a href="psi_element://Foo"><code>Foo</code></a></td><tr><td valign='top' class='section'><p>Type parameters:</td><td>&lt;U&gt; &ndash; description</td></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public byte[] <b>bytes</b> = &quot;&amp;amp;&quot;.getBytes()</pre></div><table class='sections'></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public byte[] <b>bytes</b> = &quot;&amp;amp;&quot;.getBytes()</pre></div><table class='sections'></table>
@@ -1,3 +1,3 @@
<div class='definition'><pre><a href="psi_element://Producer"><code>Producer&lt;T&gt;</code></a><br>&lt;E extends <a href="psi_element://java.lang.Exception"><code>Exception</code></a>&gt;&nbsp;void&nbsp;<b>drainTo</b>(<a href="psi_element://Consumer"><code>Consumer</code></a>&lt;? super T, E&gt;&nbsp;consumer,
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Producer"><code>Producer&lt;T&gt;</code></a><br>&lt;E extends <a href="psi_element://java.lang.Exception"><code>Exception</code></a>&gt;&nbsp;void&nbsp;<b>drainTo</b>(<a href="psi_element://Consumer"><code>Consumer</code></a>&lt;? super T, E&gt;&nbsp;consumer,
<a href="psi_element://java.lang.Object"><code>Object</code></a>&nbsp;someParameter)
throws&nbsp;<a href="psi_element://E"><code>E</code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Throws:</td><td><p><a href="psi_element://E"><code>E</code></a></td></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://MethodTypeParam"><code>MethodTypeParam</code></a><br>&lt;T&gt;&nbsp;void&nbsp;<b>foo</b>(T&nbsp;t)</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Type parameters:</td><td>&lt;T&gt; &ndash; type param</td></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://MethodTypeParam"><code>MethodTypeParam</code></a><br>&lt;T&gt;&nbsp;void&nbsp;<b>foo</b>(T&nbsp;t)</pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Type parameters:</td><td>&lt;T&gt; &ndash; type param</td></table>
@@ -1,2 +1,2 @@
<div class='definition'><pre>class <b>Test</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>class <b>Test</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><div class='content'> <pre>a bc</pre> </div><table class='sections'><p></table>
@@ -1,2 +1,2 @@
<div class='definition'><pre>class <b>Foo</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>class <b>Foo</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><div class='content'> foobar </div><table class='sections'><p></table>
@@ -1,4 +1,4 @@
<div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br>public <a href="psi_element://java.lang.String"><code>String</code></a> <b>field</b> = null</pre></div><div class='content'>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://Test"><code>Test</code></a><br>public <a href="psi_element://java.lang.String"><code>String</code></a> <b>field</b> = null</pre></div><div class='content'>
<pre>
foo
<p></p>
@@ -1 +1 @@
<div class='definition'><pre>int <b>i</b></pre></div><div class='content'>i &ndash; input</div><table class='sections'></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>int <b>i</b></pre></div><div class='content'>i &ndash; input</div><table class='sections'></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static int <b>JAVADOC_ME</b></pre></div><div class='content'> Test </div><table class='sections'><p></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static int <b>JAVADOC_ME</b></pre></div><div class='content'> Test </div><table class='sections'><p></table>
@@ -1,4 +1,4 @@
<div class='definition'><pre>class <b>Test</b>
<html><head><base href="placeholder"></head><body><div class='definition'><pre>class <b>Test</b>
extends <a href="psi_element://java.lang.Object"><code>Object</code></a></pre></div><div class='content'>
a@b c@d
</div><table class='sections'><p></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static&nbsp;void&nbsp;<b>JAVADOC_ME</b>()</pre></div><div class='content'> The value of A is <a href="psi_element://A#A">23</a>. <p></div><table class='sections'><p></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static&nbsp;void&nbsp;<b>JAVADOC_ME</b>()</pre></div><div class='content'> The value of A is <a href="psi_element://A#A">23</a>. <p></div><table class='sections'><p></table>
@@ -1 +1 @@
<div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static&nbsp;void&nbsp;<b>JAVADOC_ME</b>()</pre></div><div class='content'> The value of A is <a href="psi_element://A#A">23</a>. <p></div><table class='sections'><p></table>
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://A"><code>A</code></a><br>public static&nbsp;void&nbsp;<b>JAVADOC_ME</b>()</pre></div><div class='content'> The value of A is <a href="psi_element://A#A">23</a>. <p></div><table class='sections'><p></table>