mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[quickdoc] Second interation of quick doc syntax highlighting for JVM lanugages
- Added setting to turn off highlighting in documentation components - Fixed some bugs for Java, changed alignment a bit - Implemented highlighting for Groovy GitOrigin-RevId: 844fb1510a0df2aeb5c6535d1cf8d826646d7e2f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
95f48018ad
commit
e8ad465859
+2
-1
@@ -13,6 +13,7 @@ import com.intellij.codeInsight.intention.impl.AnnotateIntentionAction;
|
||||
import com.intellij.codeInsight.intention.impl.DeannotateIntentionAction;
|
||||
import com.intellij.codeInsight.javadoc.AnnotationDocGenerator;
|
||||
import com.intellij.codeInsight.javadoc.JavaDocInfoGenerator;
|
||||
import com.intellij.codeInsight.javadoc.JavaDocInfoGeneratorFactory;
|
||||
import com.intellij.codeInsight.javadoc.NonCodeAnnotationGenerator;
|
||||
import com.intellij.codeInspection.dataFlow.EditContractIntention;
|
||||
import com.intellij.icons.AllIcons;
|
||||
@@ -92,7 +93,7 @@ public abstract class NonCodeAnnotationsLineMarkerProvider extends LineMarkerPro
|
||||
|
||||
String tooltip = XmlStringUtil.wrapInHtml(
|
||||
NonCodeAnnotationGenerator.getNonCodeHeaderAvalable(nonCodeAnnotations) + CommonXmlStrings.NBSP + JavaBundle.message("non.code.annotations.explanation.full.signature") + "<p>\n" +
|
||||
new JavaDocInfoGenerator(owner.getProject(), owner, false).generateSignature(owner));
|
||||
JavaDocInfoGeneratorFactory.create(owner.getProject(), owner).generateSignature(owner));
|
||||
return new LineMarkerInfo<>(element, element.getTextRange(), AllIcons.Gutter.ExtAnnotation, __ -> tooltip, MyIconGutterHandler.INSTANCE,
|
||||
GutterIconRenderer.Alignment.RIGHT);
|
||||
}
|
||||
|
||||
+2
-1
@@ -11,6 +11,7 @@ import com.intellij.codeInsight.daemon.impl.ParameterHintsPresentationManager;
|
||||
import com.intellij.codeInsight.hint.ParameterInfoControllerBase;
|
||||
import com.intellij.codeInsight.hints.ParameterHintsPass;
|
||||
import com.intellij.codeInsight.javadoc.JavaDocInfoGenerator;
|
||||
import com.intellij.codeInsight.javadoc.JavaDocInfoGeneratorFactory;
|
||||
import com.intellij.injected.editor.EditorWindow;
|
||||
import com.intellij.lang.parameterInfo.*;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
@@ -710,7 +711,7 @@ public class MethodParameterInfoHandler implements ParameterInfoHandlerWithTabAc
|
||||
}
|
||||
|
||||
if (context.isSingleParameterInfo()) {
|
||||
String javaDoc = new JavaDocInfoGenerator(param.getProject(), param).generateMethodParameterJavaDoc();
|
||||
String javaDoc = JavaDocInfoGeneratorFactory.create(param.getProject(), param).generateMethodParameterJavaDoc();
|
||||
if (javaDoc != null) {
|
||||
javaDoc = removeHyperlinks(javaDoc);
|
||||
if (javaDoc.length() < 100) {
|
||||
|
||||
@@ -4,9 +4,12 @@ package com.intellij.codeInsight.javadoc;
|
||||
import com.intellij.codeInsight.AnnotationTargetUtil;
|
||||
import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.ide.highlighter.JavaHighlightingColors;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||
import com.intellij.openapi.editor.richcopy.HtmlSyntaxInfoUtil;
|
||||
import com.intellij.openapi.project.IndexNotReadyException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
@@ -19,8 +22,6 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.intellij.openapi.editor.richcopy.HtmlSyntaxInfoUtil.appendStyledSpan;
|
||||
import static com.intellij.openapi.editor.richcopy.HtmlSyntaxInfoUtil.getStyledSpan;
|
||||
|
||||
public final class AnnotationDocGenerator {
|
||||
private static final Logger LOG = Logger.getInstance(AnnotationDocGenerator.class);
|
||||
@@ -46,8 +47,8 @@ public final class AnnotationDocGenerator {
|
||||
LOG.debug(e);
|
||||
indexNotReady = true;
|
||||
}
|
||||
myTargetClass = ObjectUtils.tryCast(target, PsiClass.class);
|
||||
myResolveNotPossible = indexNotReady;
|
||||
myTargetClass = ObjectUtils.tryCast(target, PsiClass.class);
|
||||
myResolveNotPossible = indexNotReady;
|
||||
}
|
||||
|
||||
boolean isNonDocumentedAnnotation() {
|
||||
@@ -72,7 +73,42 @@ public final class AnnotationDocGenerator {
|
||||
return AnnotationUtil.isInferredAnnotation(myAnnotation);
|
||||
}
|
||||
|
||||
void generateAnnotation(StringBuilder buffer, AnnotationFormat format) {
|
||||
private static void appendStyledSpan(
|
||||
boolean doSyntaxHighlighting,
|
||||
@NotNull StringBuilder buffer,
|
||||
@NotNull TextAttributesKey attributesKey,
|
||||
@Nullable String value
|
||||
) {
|
||||
if (doSyntaxHighlighting) {
|
||||
HtmlSyntaxInfoUtil.appendStyledSpan(buffer, attributesKey, value);
|
||||
}
|
||||
else {
|
||||
buffer.append(value);
|
||||
}
|
||||
}
|
||||
|
||||
private static void appendHighlightedByLexerAndEncodedAsHtmlCodeSnippet(
|
||||
boolean doSyntaxHighlighting,
|
||||
@NotNull StringBuilder buffer,
|
||||
@NotNull Project project,
|
||||
@NotNull Language language,
|
||||
@Nullable String codeSnippet
|
||||
) {
|
||||
if (doSyntaxHighlighting) {
|
||||
HtmlSyntaxInfoUtil.appendHighlightedByLexerAndEncodedAsHtmlCodeSnippet(buffer, project, language, codeSnippet);
|
||||
}
|
||||
else {
|
||||
buffer.append(codeSnippet);
|
||||
}
|
||||
}
|
||||
|
||||
void generateAnnotation(
|
||||
StringBuilder buffer,
|
||||
AnnotationFormat format,
|
||||
boolean generateLink,
|
||||
boolean isForRenderedDoc,
|
||||
boolean doSyntaxHighlighting
|
||||
) {
|
||||
String qualifiedName = myAnnotation.getQualifiedName();
|
||||
PsiClassType type = myTargetClass != null && qualifiedName != null &&
|
||||
JavaDocUtil.findReferenceTarget(myContext.getManager(), qualifiedName, myContext) != null
|
||||
@@ -86,74 +122,96 @@ public final class AnnotationDocGenerator {
|
||||
if (isInferred()) buffer.append("<i>");
|
||||
if (red) buffer.append("<font color=red>");
|
||||
|
||||
boolean generateLink = format != AnnotationFormat.ToolTip;
|
||||
boolean forceShortNames = format != AnnotationFormat.JavaDocComplete;
|
||||
|
||||
if (red) {
|
||||
buffer.append("@");
|
||||
} else {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.ANNOTATION_NAME_ATTRIBUTES, "@");
|
||||
}
|
||||
else {
|
||||
appendStyledSpan(doSyntaxHighlighting, buffer, JavaHighlightingColors.ANNOTATION_NAME_ATTRIBUTES, "@");
|
||||
}
|
||||
String name = forceShortNames ? myNameReference.getReferenceName() : myNameReference.getText();
|
||||
if (type != null && generateLink) {
|
||||
String styledName = getStyledSpan(JavaHighlightingColors.ANNOTATION_NAME_ATTRIBUTES, name);
|
||||
new JavaDocInfoGenerator(myContext.getProject(), null, format != AnnotationFormat.JavaDocComplete)
|
||||
.generateLink(buffer, myTargetClass, styledName, format == AnnotationFormat.JavaDocComplete);
|
||||
StringBuilder styledNameBuilder = new StringBuilder();
|
||||
appendStyledSpan(doSyntaxHighlighting, styledNameBuilder, JavaHighlightingColors.ANNOTATION_NAME_ATTRIBUTES, name);
|
||||
String styledName = styledNameBuilder.toString();
|
||||
JavaDocInfoGeneratorFactory.create(
|
||||
myContext.getProject(),
|
||||
null,
|
||||
JavaDocHighlightingManagerImpl.getInstance(),
|
||||
isForRenderedDoc,
|
||||
doSyntaxHighlighting
|
||||
).generateLink(buffer, myTargetClass, styledName, format == AnnotationFormat.JavaDocComplete);
|
||||
}
|
||||
else if (!red && name != null) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.ANNOTATION_NAME_ATTRIBUTES, name);
|
||||
appendStyledSpan(doSyntaxHighlighting, buffer, JavaHighlightingColors.ANNOTATION_NAME_ATTRIBUTES, name);
|
||||
}
|
||||
if (red) buffer.append("</font>");
|
||||
|
||||
generateAnnotationAttributes(buffer, generateLink);
|
||||
generateAnnotationAttributes(buffer, generateLink, isForRenderedDoc, doSyntaxHighlighting);
|
||||
if (isInferred()) buffer.append("</i>");
|
||||
if (highlightNonCodeAnnotations) buffer.append("</b>");
|
||||
}
|
||||
|
||||
private void generateAnnotationAttributes(StringBuilder buffer, boolean generateLink) {
|
||||
private void generateAnnotationAttributes(
|
||||
StringBuilder buffer,
|
||||
boolean generateLink,
|
||||
boolean isForRenderedDoc,
|
||||
boolean doSyntaxHighlighting
|
||||
) {
|
||||
final PsiNameValuePair[] attributes = myAnnotation.getParameterList().getAttributes();
|
||||
if (attributes.length > 0) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.PARENTHESES, "(");
|
||||
appendStyledSpan(doSyntaxHighlighting, buffer, JavaHighlightingColors.PARENTHESES, "(");
|
||||
boolean first = true;
|
||||
for (PsiNameValuePair pair : attributes) {
|
||||
if (!first) appendStyledSpan(buffer, JavaHighlightingColors.COMMA, ", ");
|
||||
if (!first) appendStyledSpan(doSyntaxHighlighting, buffer, JavaHighlightingColors.COMMA, ", ");
|
||||
first = false;
|
||||
generateAnnotationAttribute(buffer, generateLink, pair);
|
||||
generateAnnotationAttribute(buffer, generateLink, pair, isForRenderedDoc, doSyntaxHighlighting);
|
||||
}
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.PARENTHESES, ")");
|
||||
appendStyledSpan(doSyntaxHighlighting, buffer, JavaHighlightingColors.PARENTHESES, ")");
|
||||
}
|
||||
}
|
||||
|
||||
private static void generateAnnotationAttribute(StringBuilder buffer, boolean generateLink, PsiNameValuePair pair) {
|
||||
private static void generateAnnotationAttribute(
|
||||
StringBuilder buffer,
|
||||
boolean generateLink,
|
||||
PsiNameValuePair pair,
|
||||
boolean isForRenderedDoc,
|
||||
boolean doSyntaxHighlighting
|
||||
) {
|
||||
final String name = pair.getName();
|
||||
if (name != null) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.ANNOTATION_ATTRIBUTE_NAME_ATTRIBUTES, name);
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.OPERATION_SIGN, " = ");
|
||||
appendStyledSpan(doSyntaxHighlighting, buffer, JavaHighlightingColors.ANNOTATION_ATTRIBUTE_NAME_ATTRIBUTES, name);
|
||||
appendStyledSpan(doSyntaxHighlighting, buffer, JavaHighlightingColors.OPERATION_SIGN, " = ");
|
||||
}
|
||||
final PsiAnnotationMemberValue value = pair.getValue();
|
||||
if (value != null) {
|
||||
if (value instanceof PsiArrayInitializerMemberValue) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.BRACES, "{");
|
||||
appendStyledSpan(doSyntaxHighlighting, buffer, JavaHighlightingColors.BRACES, "{");
|
||||
boolean firstMember = true;
|
||||
for(PsiAnnotationMemberValue memberValue:((PsiArrayInitializerMemberValue)value).getInitializers()) {
|
||||
for (PsiAnnotationMemberValue memberValue : ((PsiArrayInitializerMemberValue)value).getInitializers()) {
|
||||
if (!firstMember) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.COMMA, ",");
|
||||
appendStyledSpan(doSyntaxHighlighting, buffer, JavaHighlightingColors.COMMA, ",");
|
||||
}
|
||||
firstMember = false;
|
||||
appendLinkOrText(buffer, memberValue, generateLink);
|
||||
appendLinkOrText(buffer, memberValue, generateLink, isForRenderedDoc, doSyntaxHighlighting);
|
||||
}
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.BRACES, "}");
|
||||
appendStyledSpan(doSyntaxHighlighting, buffer, JavaHighlightingColors.BRACES, "}");
|
||||
}
|
||||
else {
|
||||
appendLinkOrText(buffer, value, generateLink);
|
||||
appendLinkOrText(buffer, value, generateLink, isForRenderedDoc, doSyntaxHighlighting);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void appendLinkOrText(StringBuilder buffer,
|
||||
PsiAnnotationMemberValue memberValue,
|
||||
boolean generateLink) {
|
||||
if (generateLink && memberValue instanceof PsiQualifiedReferenceElement) {
|
||||
private static void appendLinkOrText(
|
||||
StringBuilder buffer,
|
||||
PsiAnnotationMemberValue memberValue,
|
||||
boolean generateLink,
|
||||
boolean isForRenderedDoc,
|
||||
boolean doSyntaxHighlighting
|
||||
) {
|
||||
if (memberValue instanceof PsiQualifiedReferenceElement) {
|
||||
String text = ((PsiQualifiedReferenceElement)memberValue).getCanonicalText();
|
||||
PsiElement resolve = null;
|
||||
try {
|
||||
@@ -166,21 +224,33 @@ public final class AnnotationDocGenerator {
|
||||
if (resolve instanceof PsiField) {
|
||||
PsiField field = (PsiField)resolve;
|
||||
PsiClass aClass = field.getContainingClass();
|
||||
int startOfPropertyNamePosition = text.lastIndexOf('.');
|
||||
|
||||
if (startOfPropertyNamePosition != -1) {
|
||||
text = text.substring(0, startOfPropertyNamePosition) + '#' + text.substring(startOfPropertyNamePosition + 1);
|
||||
if (generateLink) {
|
||||
int startOfPropertyNamePosition = text.lastIndexOf('.');
|
||||
if (startOfPropertyNamePosition != -1) {
|
||||
text = text.substring(0, startOfPropertyNamePosition) + '#' + text.substring(startOfPropertyNamePosition + 1);
|
||||
}
|
||||
else {
|
||||
if (aClass != null) text = aClass.getQualifiedName() + '#' + field.getName();
|
||||
}
|
||||
JavaDocInfoGeneratorFactory.create(
|
||||
field.getProject(), null, JavaDocHighlightingManagerImpl.getInstance(), isForRenderedDoc, doSyntaxHighlighting)
|
||||
.generateLink(buffer, text, aClass != null ? aClass.getName() + '.' + field.getName() : null, memberValue, false);
|
||||
}
|
||||
else {
|
||||
if (aClass != null) text = aClass.getQualifiedName() + '#' + field.getName();
|
||||
appendHighlightedByLexerAndEncodedAsHtmlCodeSnippet(
|
||||
doSyntaxHighlighting,
|
||||
buffer,
|
||||
memberValue.getProject(),
|
||||
memberValue.getLanguage(),
|
||||
aClass != null ? aClass.getName() + '.' + field.getName() : memberValue.getText());
|
||||
}
|
||||
new JavaDocInfoGenerator(field.getProject(), null, true)
|
||||
.generateLink(buffer, text, aClass != null? aClass.getName() + '.' + field.getName():null, memberValue, false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
HtmlSyntaxInfoUtil.appendHighlightedByLexerAndEncodedAsHtmlCodeSnippet(
|
||||
appendHighlightedByLexerAndEncodedAsHtmlCodeSnippet(
|
||||
doSyntaxHighlighting,
|
||||
buffer,
|
||||
memberValue.getProject(),
|
||||
memberValue.getLanguage(),
|
||||
@@ -200,8 +270,8 @@ public final class AnnotationDocGenerator {
|
||||
Set<String> shownAnnotations = new HashSet<>();
|
||||
return StreamEx.of(AnnotationUtil.getAllAnnotations(owner, false, null))
|
||||
.filter(owner instanceof PsiClass || owner instanceof PsiJavaModule ? anno -> true
|
||||
: anno -> !AnnotationTargetUtil.isTypeAnnotation(anno) ||
|
||||
AnnotationUtil.isInferredAnnotation(anno) ||
|
||||
: anno -> !AnnotationTargetUtil.isTypeAnnotation(anno) ||
|
||||
AnnotationUtil.isInferredAnnotation(anno) ||
|
||||
AnnotationUtil.isExternalAnnotation(anno))
|
||||
.map(annotation -> forAnnotation(owner, shownAnnotations, annotation))
|
||||
.nonNull()
|
||||
@@ -217,7 +287,10 @@ public final class AnnotationDocGenerator {
|
||||
AnnotationDocGenerator anno = new AnnotationDocGenerator(annotation, nameReferenceElement, context);
|
||||
if (anno.isNonDocumentedAnnotation()) return null;
|
||||
|
||||
if (!(shownAnnotations.add(annotation.getQualifiedName()) || JavaDocInfoGenerator.isRepeatableAnnotationType(nameReferenceElement.resolve()))) return null;
|
||||
if (!(shownAnnotations.add(annotation.getQualifiedName()) ||
|
||||
JavaDocInfoGenerator.isRepeatableAnnotationType(nameReferenceElement.resolve()))) {
|
||||
return null;
|
||||
}
|
||||
return anno;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,8 +116,8 @@ public class JavaDocExternalFilter extends AbstractExternalFilter {
|
||||
PsiClass aClass = ((PsiMethod)element).getContainingClass();
|
||||
if (aClass != null) {
|
||||
String qName = aClass.getQualifiedName();
|
||||
return pair(qName, qName + new JavaDocInfoGenerator(aClass.getProject(), null, false)
|
||||
.generateTypeParameters(aClass, true));
|
||||
String typeParameters = JavaDocInfoGeneratorFactory.create(aClass.getProject(), null).generateTypeParameters(aClass, true);
|
||||
return pair(qName, qName + typeParameters);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
// Copyright 2000-2021 JetBrains s.r.o. and contributors. 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.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiField;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
||||
public interface JavaDocHighlightingManager {
|
||||
|
||||
@NotNull TextAttributes getKeywordAttributes();
|
||||
|
||||
@NotNull TextAttributes getCommaAttributes();
|
||||
|
||||
@NotNull TextAttributes getParenthesesAttributes();
|
||||
|
||||
@NotNull TextAttributes getDotAttributes();
|
||||
|
||||
@NotNull TextAttributes getBracketsAttributes();
|
||||
|
||||
@NotNull TextAttributes getOperationSignAttributes();
|
||||
|
||||
@NotNull TextAttributes getClassNameAttributes();
|
||||
|
||||
@NotNull TextAttributes getClassDeclarationAttributes(@NotNull PsiClass aClass);
|
||||
|
||||
@NotNull TextAttributes getMethodDeclarationAttributes(@NotNull PsiMethod method);
|
||||
|
||||
@NotNull TextAttributes getFieldDeclarationAttributes(@NotNull PsiField field);
|
||||
|
||||
@NotNull TextAttributes getParameterAttributes();
|
||||
|
||||
@NotNull TextAttributes getTypeParameterNameAttributes();
|
||||
|
||||
@NotNull TextAttributes getLocalVariableAttributes();
|
||||
|
||||
@NotNull TextAttributes getMethodCallAttributes();
|
||||
}
|
||||
+162
@@ -0,0 +1,162 @@
|
||||
// Copyright 2000-2021 JetBrains s.r.o. and contributors. 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.daemon.impl.analysis.HighlightNamesUtil;
|
||||
import com.intellij.ide.highlighter.JavaHighlightingColors;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||
import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.psi.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
||||
public class JavaDocHighlightingManagerImpl implements JavaDocHighlightingManager {
|
||||
|
||||
private static final @NotNull JavaDocHighlightingManagerImpl INSTANCE = new JavaDocHighlightingManagerImpl();
|
||||
|
||||
public static @NotNull JavaDocHighlightingManagerImpl getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
private static @NotNull TextAttributes resolveAttributes(@NotNull TextAttributesKey attributesKey) {
|
||||
return EditorColorsManager.getInstance().getGlobalScheme().getAttributes(attributesKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getClassDeclarationAttributes(@NotNull PsiClass aClass) {
|
||||
if (aClass.isInterface()) return getInterfaceNameAttributes();
|
||||
if (aClass.isEnum()) return getEnumNameAttributes();
|
||||
if (aClass instanceof PsiAnonymousClass) return getAnonymousClassNameAttributes();
|
||||
if (aClass.hasModifierProperty(PsiModifier.ABSTRACT)) return getAbstractClassNameAttributes();
|
||||
return getClassNameAttributes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getMethodDeclarationAttributes(@NotNull PsiMethod method) {
|
||||
return method.isConstructor()
|
||||
? getConstructorDeclarationAttributes()
|
||||
: getMethodDeclarationAttributes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getFieldDeclarationAttributes(@NotNull PsiField field) {
|
||||
boolean isFinal = field.hasModifierProperty(PsiModifier.FINAL);
|
||||
boolean isStatic = field.hasModifierProperty(PsiModifier.STATIC);
|
||||
boolean isImported = HighlightNamesUtil.isStaticallyImported(field);
|
||||
if (isImported) {
|
||||
return isFinal ? getStaticFinalFieldImportedAttributes()
|
||||
: getStaticFieldImportedAttributes();
|
||||
}
|
||||
else if (isStatic) {
|
||||
return isFinal ? getStaticFinalFieldAttributes()
|
||||
: getStaticFieldAttributes();
|
||||
}
|
||||
else {
|
||||
return isFinal ? getInstanceFinalFieldAttributes()
|
||||
: getInstanceFieldAttributes();
|
||||
}
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getInterfaceNameAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.INTERFACE_NAME_ATTRIBUTES);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getEnumNameAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.ENUM_NAME_ATTRIBUTES);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getAnonymousClassNameAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.ANONYMOUS_CLASS_NAME_ATTRIBUTES);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getAbstractClassNameAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.ABSTRACT_CLASS_NAME_ATTRIBUTES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getClassNameAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.CLASS_NAME_ATTRIBUTES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getKeywordAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.KEYWORD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getCommaAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.COMMA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getParameterAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.PARAMETER_ATTRIBUTES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getTypeParameterNameAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.TYPE_PARAMETER_NAME_ATTRIBUTES);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getStaticFinalFieldImportedAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.STATIC_FINAL_FIELD_IMPORTED_ATTRIBUTES);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getStaticFieldImportedAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.STATIC_FIELD_IMPORTED_ATTRIBUTES);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getStaticFinalFieldAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.STATIC_FINAL_FIELD_ATTRIBUTES);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getStaticFieldAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.STATIC_FIELD_ATTRIBUTES);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getInstanceFinalFieldAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.INSTANCE_FINAL_FIELD_ATTRIBUTES);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getInstanceFieldAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.INSTANCE_FIELD_ATTRIBUTES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getOperationSignAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.OPERATION_SIGN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getLocalVariableAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.LOCAL_VARIABLE_ATTRIBUTES);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getConstructorDeclarationAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.CONSTRUCTOR_DECLARATION_ATTRIBUTES);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getMethodDeclarationAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.METHOD_DECLARATION_ATTRIBUTES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getParenthesesAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.PARENTHESES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getDotAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.DOT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getBracketsAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.BRACKETS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getMethodCallAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.METHOD_CALL_ATTRIBUTES);
|
||||
}
|
||||
}
|
||||
@@ -2,23 +2,23 @@
|
||||
package com.intellij.codeInsight.javadoc;
|
||||
|
||||
import com.intellij.CommonBundle;
|
||||
import com.intellij.application.options.CodeStyle;
|
||||
import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.codeInsight.ExceptionUtil;
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightNamesUtil;
|
||||
import com.intellij.codeInsight.documentation.DocumentationManagerProtocol;
|
||||
import com.intellij.codeInsight.documentation.DocumentationManagerUtil;
|
||||
import com.intellij.ide.highlighter.JavaHighlightingColors;
|
||||
import com.intellij.java.JavaBundle;
|
||||
import com.intellij.javadoc.JavadocGeneratorRunProfile;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.lang.documentation.DocumentationMarkup;
|
||||
import com.intellij.lang.java.JavaDocumentationProvider;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.HighlighterColors;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||
import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.openapi.editor.richcopy.HtmlSyntaxInfoUtil;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.IndexNotReadyException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -62,8 +62,6 @@ import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.intellij.openapi.editor.richcopy.HtmlSyntaxInfoUtil.*;
|
||||
|
||||
|
||||
public class JavaDocInfoGenerator {
|
||||
private static final Logger LOG = Logger.getInstance(JavaDocInfoGenerator.class);
|
||||
@@ -111,17 +109,28 @@ public class JavaDocInfoGenerator {
|
||||
|
||||
private final @NotNull Project myProject;
|
||||
private final @Nullable PsiElement myElement;
|
||||
private final boolean myIsRendered;
|
||||
private final @NotNull JavaDocHighlightingManager myHighlightingManager;
|
||||
private final @Nullable JavaSdkVersion mySdkVersion;
|
||||
|
||||
private final boolean myIsRendered;
|
||||
private final boolean myDoSyntaxHighlighting;
|
||||
|
||||
public JavaDocInfoGenerator(@NotNull Project project, @Nullable PsiElement element) {
|
||||
this(project, element, false);
|
||||
this(project, element, new JavaDocHighlightingManagerImpl(), false, true);
|
||||
}
|
||||
|
||||
public JavaDocInfoGenerator(@NotNull Project project, @Nullable PsiElement element, boolean isGenerationForRenderedDoc) {
|
||||
public JavaDocInfoGenerator(
|
||||
@NotNull Project project,
|
||||
@Nullable PsiElement element,
|
||||
@NotNull JavaDocHighlightingManager highlightingManager,
|
||||
boolean isGenerationForRenderedDoc,
|
||||
boolean doSyntaxHighlighting
|
||||
) {
|
||||
myProject = project;
|
||||
myElement = element;
|
||||
myIsRendered = isGenerationForRenderedDoc;
|
||||
myDoSyntaxHighlighting = doSyntaxHighlighting;
|
||||
myHighlightingManager = highlightingManager;
|
||||
|
||||
Sdk jdk = JavadocGeneratorRunProfile.getSdk(myProject);
|
||||
mySdkVersion = jdk == null ? null : JavaSdk.getInstance().getVersion(jdk);
|
||||
@@ -130,7 +139,56 @@ public class JavaDocInfoGenerator {
|
||||
public boolean isRendered() {
|
||||
return myIsRendered;
|
||||
}
|
||||
|
||||
|
||||
public boolean doSyntaxHighlighting() {
|
||||
return myDoSyntaxHighlighting;
|
||||
}
|
||||
|
||||
public @NotNull JavaDocHighlightingManager getHighlightingManager() {
|
||||
return myHighlightingManager;
|
||||
}
|
||||
|
||||
protected @NotNull StringBuilder appendStyledSpan(
|
||||
@NotNull StringBuilder buffer,
|
||||
@NotNull TextAttributes attributes,
|
||||
@Nullable String value
|
||||
) {
|
||||
if (doSyntaxHighlighting()) {
|
||||
HtmlSyntaxInfoUtil.appendStyledSpan(buffer, attributes, value);
|
||||
}
|
||||
else {
|
||||
buffer.append(value);
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
protected @NotNull StringBuilder appendHighlightedByLexerAndEncodedAsHtmlCodeSnippet(
|
||||
@NotNull StringBuilder buffer,
|
||||
@NotNull Project project,
|
||||
@NotNull Language language,
|
||||
@Nullable String codeSnippet
|
||||
) {
|
||||
if (doSyntaxHighlighting()) {
|
||||
HtmlSyntaxInfoUtil.appendHighlightedByLexerAndEncodedAsHtmlCodeSnippet(buffer, project, language, codeSnippet);
|
||||
}
|
||||
else {
|
||||
buffer.append(codeSnippet);
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public @NotNull String getStyledSpan(@NotNull TextAttributes attributes, @Nullable String value) {
|
||||
return appendStyledSpan(new StringBuilder(), attributes, value).toString();
|
||||
}
|
||||
|
||||
public @NotNull String getHighlightedByLexerAndEncodedAsHtmlCodeSnippet(
|
||||
@NotNull Project project,
|
||||
@NotNull Language language,
|
||||
@Nullable String codeSnippet
|
||||
) {
|
||||
return appendHighlightedByLexerAndEncodedAsHtmlCodeSnippet(new StringBuilder(), project, language, codeSnippet).toString();
|
||||
}
|
||||
|
||||
private static InheritDocProvider<PsiElement[]> mapProvider(InheritDocProvider<PsiDocTag> i, boolean dropFirst) {
|
||||
return new InheritDocProvider<>() {
|
||||
@Override
|
||||
@@ -490,16 +548,6 @@ public class JavaDocInfoGenerator {
|
||||
if (!isRendered()) {
|
||||
buffer.append(DocumentationMarkup.DEFINITION_START);
|
||||
if (generateClassSignature(buffer, aClass, SignaturePlace.Javadoc)) return;
|
||||
|
||||
PsiFile file = aClass.getContainingFile();
|
||||
if (file instanceof PsiJavaFile) {
|
||||
String packageName = ((PsiJavaFile)file).getPackageName();
|
||||
if (!packageName.isEmpty()) {
|
||||
appendDefinedInClause(buffer);
|
||||
PsiPackage aPackage = JavaPsiFacade.getInstance(file.getProject()).findPackage(packageName);
|
||||
appendMaybeUnresolvedLink(buffer, aPackage, packageName, file.getProject(), false);
|
||||
}
|
||||
}
|
||||
buffer.append(DocumentationMarkup.DEFINITION_END);
|
||||
}
|
||||
|
||||
@@ -517,7 +565,7 @@ public class JavaDocInfoGenerator {
|
||||
}
|
||||
|
||||
if (!isRendered()) {
|
||||
new NonCodeAnnotationGenerator(aClass, buffer).explainAnnotations();
|
||||
new NonCodeAnnotationGenerator(aClass, buffer).explainAnnotations(isRendered(), doSyntaxHighlighting());
|
||||
}
|
||||
buffer.append(DocumentationMarkup.SECTIONS_END);
|
||||
}
|
||||
@@ -536,14 +584,6 @@ public class JavaDocInfoGenerator {
|
||||
generateParametersSection(buffer, CodeInsightBundle.message("javadoc.parameters"), collectedTags);
|
||||
}
|
||||
|
||||
public static TextAttributesKey getClassTextAttributes(PsiClass aClass) {
|
||||
if (aClass.isInterface()) return JavaHighlightingColors.INTERFACE_NAME_ATTRIBUTES;
|
||||
if (aClass.isEnum()) return JavaHighlightingColors.ENUM_NAME_ATTRIBUTES;
|
||||
if (aClass instanceof PsiAnonymousClass) return JavaHighlightingColors.ANONYMOUS_CLASS_NAME_ATTRIBUTES;
|
||||
if (aClass.hasModifierProperty(PsiModifier.ABSTRACT)) return JavaHighlightingColors.ABSTRACT_CLASS_NAME_ATTRIBUTES;
|
||||
return JavaHighlightingColors.CLASS_NAME_ATTRIBUTES;
|
||||
}
|
||||
|
||||
private boolean generateClassSignature(StringBuilder buffer, PsiClass aClass, SignaturePlace place) {
|
||||
boolean generateLink = place == SignaturePlace.Javadoc;
|
||||
String classKeyword =
|
||||
@@ -551,9 +591,9 @@ public class JavaDocInfoGenerator {
|
||||
aClass.isEnum() ? PsiKeyword.ENUM :
|
||||
aClass.isRecord() ? PsiKeyword.RECORD : PsiKeyword.CLASS;
|
||||
|
||||
generateAnnotations(buffer, aClass, place, true, false);
|
||||
generateAnnotations(buffer, aClass, place, true, false, true);
|
||||
generateModifiers(buffer, aClass, false);
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, classKeyword);
|
||||
appendStyledSpan(buffer, getHighlightingManager().getKeywordAttributes(), classKeyword);
|
||||
buffer.append(' ');
|
||||
String refText = JavaDocUtil.getReferenceText(aClass.getProject(), aClass);
|
||||
if (refText == null) {
|
||||
@@ -561,28 +601,29 @@ public class JavaDocInfoGenerator {
|
||||
return true;
|
||||
}
|
||||
String className = JavaDocUtil.getLabelText(aClass.getProject(), aClass.getManager(), refText, aClass);
|
||||
appendStyledSpan(buffer, getClassTextAttributes(aClass), className);
|
||||
appendStyledSpan(buffer, getHighlightingManager().getClassDeclarationAttributes(aClass), className);
|
||||
|
||||
buffer.append(generateTypeParameters(aClass, false));
|
||||
|
||||
buffer.append('\n');
|
||||
|
||||
PsiClassType[] refs = aClass.getExtendsListTypes();
|
||||
if (refs.length > 0 || !aClass.isInterface() && !CommonClassNames.JAVA_LANG_OBJECT.equals(aClass.getQualifiedName())) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, "extends ");
|
||||
if (refs.length == 0) {
|
||||
generateLink(buffer, CommonClassNames.JAVA_LANG_OBJECT, null, aClass, false);
|
||||
}
|
||||
else {
|
||||
generateRefList(buffer, aClass, generateLink, refs);
|
||||
}
|
||||
if (aClass.isEnum()) {
|
||||
refs = Arrays.stream(refs)
|
||||
.filter(it -> {
|
||||
PsiClass resolved = it.resolve();
|
||||
return resolved == null || !"java.lang.Enum".equals(resolved.getQualifiedName());
|
||||
})
|
||||
.toArray(PsiClassType[]::new);
|
||||
}
|
||||
if (refs.length > 0) {
|
||||
generateRefList(buffer, aClass, generateLink, refs, "extends");
|
||||
buffer.append('\n');
|
||||
}
|
||||
|
||||
refs = aClass.getImplementsListTypes();
|
||||
if (refs.length > 0) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, "implements ");
|
||||
generateRefList(buffer, aClass, generateLink, refs);
|
||||
generateRefList(buffer, aClass, generateLink, refs, "implements");
|
||||
buffer.append('\n');
|
||||
}
|
||||
if (buffer.charAt(buffer.length() - 1) == '\n') {
|
||||
@@ -591,12 +632,20 @@ public class JavaDocInfoGenerator {
|
||||
return false;
|
||||
}
|
||||
|
||||
private void generateRefList(StringBuilder buffer, PsiClass aClass, boolean generateLink, PsiClassType[] refs) {
|
||||
private void generateRefList(StringBuilder buffer, PsiClass aClass, boolean generateLink, PsiClassType[] refs, String keyword) {
|
||||
appendStyledSpan(buffer, getHighlightingManager().getKeywordAttributes(), keyword);
|
||||
buffer.append(" ");
|
||||
for (int i = 0; i < refs.length; i++) {
|
||||
generateType(buffer, refs[i], aClass, generateLink);
|
||||
if (i < refs.length - 1) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.COMMA, ",");
|
||||
buffer.append(NBSP);
|
||||
appendStyledSpan(buffer, getHighlightingManager().getCommaAttributes(), ",");
|
||||
if (refs.length <= 3) {
|
||||
buffer.append(NBSP);
|
||||
}
|
||||
else {
|
||||
buffer.append('\n');
|
||||
buffer.append(NBSP.repeat(keyword.length() + 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -623,22 +672,22 @@ public class JavaDocInfoGenerator {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static String generateOneParameterPresentableName(PsiNamedElement parameter) {
|
||||
private String generateOneParameterPresentableName(PsiNamedElement parameter) {
|
||||
StringBuilder paramName = new StringBuilder();
|
||||
appendStyledSpan(
|
||||
paramName,
|
||||
JavaHighlightingColors.PARAMETER_ATTRIBUTES,
|
||||
getHighlightingManager().getParameterAttributes(),
|
||||
Objects.requireNonNullElse(parameter.getName(), CommonBundle.getErrorTitle()));
|
||||
return paramName.toString();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static String generateOneTypeParameterPresentableName(PsiTypeParameter typeParameter) {
|
||||
private String generateOneTypeParameterPresentableName(PsiTypeParameter typeParameter) {
|
||||
StringBuilder paramName = new StringBuilder();
|
||||
paramName.append(LT);
|
||||
appendStyledSpan(
|
||||
paramName,
|
||||
JavaHighlightingColors.TYPE_PARAMETER_NAME_ATTRIBUTES,
|
||||
getHighlightingManager().getTypeParameterNameAttributes(),
|
||||
Objects.requireNonNullElse(typeParameter.getName(), CommonBundle.getErrorTitle()));
|
||||
paramName.append(GT);
|
||||
return paramName.toString();
|
||||
@@ -702,7 +751,6 @@ public class JavaDocInfoGenerator {
|
||||
if (!isRendered()) {
|
||||
buffer.append(DocumentationMarkup.DEFINITION_START);
|
||||
generateFieldSignature(buffer, field, SignaturePlace.Javadoc);
|
||||
generateLinkToParentIfNeeded(buffer, field);
|
||||
enumConstantOrdinal(buffer, field, field.getContainingClass(), "\n");
|
||||
buffer.append(DocumentationMarkup.DEFINITION_END);
|
||||
}
|
||||
@@ -720,37 +768,21 @@ public class JavaDocInfoGenerator {
|
||||
|
||||
if (!isRendered()) {
|
||||
JavaDocColorUtil.appendColorPreview(field, buffer);
|
||||
new NonCodeAnnotationGenerator(field, buffer).explainAnnotations();
|
||||
new NonCodeAnnotationGenerator(field, buffer).explainAnnotations(isRendered(), doSyntaxHighlighting());
|
||||
}
|
||||
|
||||
buffer.append(DocumentationMarkup.SECTIONS_END);
|
||||
}
|
||||
|
||||
public static TextAttributesKey getFieldTextAttributes(PsiField field) {
|
||||
boolean isFinal = field.hasModifierProperty(PsiModifier.FINAL);
|
||||
boolean isStatic = field.hasModifierProperty(PsiModifier.STATIC);
|
||||
boolean isImported = HighlightNamesUtil.isStaticallyImported(field);
|
||||
if (isImported) {
|
||||
return isFinal ? JavaHighlightingColors.STATIC_FINAL_FIELD_IMPORTED_ATTRIBUTES
|
||||
: JavaHighlightingColors.STATIC_FIELD_IMPORTED_ATTRIBUTES;
|
||||
}
|
||||
else if (isStatic) {
|
||||
return isFinal ? JavaHighlightingColors.STATIC_FINAL_FIELD_ATTRIBUTES
|
||||
: JavaHighlightingColors.STATIC_FIELD_ATTRIBUTES;
|
||||
}
|
||||
else {
|
||||
return isFinal ? JavaHighlightingColors.INSTANCE_FINAL_FIELD_ATTRIBUTES
|
||||
: JavaHighlightingColors.INSTANCE_FIELD_ATTRIBUTES;
|
||||
}
|
||||
}
|
||||
|
||||
private void generateFieldSignature(StringBuilder buffer, PsiField field, SignaturePlace place) {
|
||||
generateAnnotations(buffer, field, place, true, false);
|
||||
generateModifiers(buffer, field, false);
|
||||
generateType(buffer, field.getType(), field, place == SignaturePlace.Javadoc);
|
||||
buffer.append(" ");
|
||||
appendStyledSpan(buffer, getFieldTextAttributes(field), field.getName());
|
||||
appendInitializer(buffer, field);
|
||||
StringBuilder signatureBuffer = new StringBuilder();
|
||||
generateAnnotations(signatureBuffer, field, place, true, false, true);
|
||||
generateModifiers(signatureBuffer, field, false);
|
||||
generateType(signatureBuffer, field.getType(), field, place == SignaturePlace.Javadoc);
|
||||
signatureBuffer.append(" ");
|
||||
appendStyledSpan(signatureBuffer, getHighlightingManager().getFieldDeclarationAttributes(field), field.getName());
|
||||
buffer.append(signatureBuffer);
|
||||
appendInitializer(buffer, field, StringUtil.removeHtmlTags(signatureBuffer.toString()).length());
|
||||
}
|
||||
|
||||
public static void enumConstantOrdinal(@Nls StringBuilder buffer, PsiField field, PsiClass parentClass, String newLine) {
|
||||
@@ -760,6 +792,7 @@ public class JavaDocInfoGenerator {
|
||||
if (idx >= 0) {
|
||||
buffer.append(newLine);
|
||||
buffer.append(DocumentationMarkup.GRAYED_START);
|
||||
buffer.append("// ");
|
||||
buffer.append(JavaBundle.message("enum.constant.ordinal"));
|
||||
buffer.append(idx);
|
||||
buffer.append(DocumentationMarkup.GRAYED_END);
|
||||
@@ -810,9 +843,9 @@ public class JavaDocInfoGenerator {
|
||||
|
||||
if (!isRendered()) {
|
||||
buffer.append(DocumentationMarkup.DEFINITION_START);
|
||||
generateAnnotations(buffer, module, SignaturePlace.Javadoc, true, false);
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, "module ");
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.CLASS_NAME_ATTRIBUTES, module.getName());
|
||||
generateAnnotations(buffer, module, SignaturePlace.Javadoc, true, false, true);
|
||||
appendStyledSpan(buffer, getHighlightingManager().getKeywordAttributes(), "module ");
|
||||
appendStyledSpan(buffer, getHighlightingManager().getClassNameAttributes(), module.getName());
|
||||
buffer.append(DocumentationMarkup.DEFINITION_END);
|
||||
}
|
||||
|
||||
@@ -923,8 +956,8 @@ public class JavaDocInfoGenerator {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void appendExpressionValue(StringBuilder buffer, PsiExpression initializer) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.OPERATION_SIGN, " = ");
|
||||
public void appendExpressionValue(StringBuilder buffer, PsiExpression initializer) {
|
||||
appendStyledSpan(buffer, getHighlightingManager().getOperationSignAttributes(), " = ");
|
||||
String text = initializer.getText().trim();
|
||||
int index = newLineIndex(text);
|
||||
boolean trunc = index < text.length();
|
||||
@@ -937,26 +970,36 @@ public class JavaDocInfoGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
private void appendInitializer(StringBuilder buffer, PsiVariable variable) {
|
||||
private void appendInitializer(StringBuilder buffer, PsiVariable variable, int variableSignatureLength) {
|
||||
PsiExpression initializer = variable.getInitializer();
|
||||
if (initializer != null) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.OPERATION_SIGN, " = ");
|
||||
String text = initializer.getText().trim();
|
||||
int index = newLineIndex(text);
|
||||
if (index < text.length()) {
|
||||
text = text.substring(0, index);
|
||||
buffer.append(StringUtil.escapeXmlEntities(text));
|
||||
buffer.append("...");
|
||||
}
|
||||
else {
|
||||
initializer.accept(new MyVisitor(buffer));
|
||||
}
|
||||
PsiExpression constantInitializer = calcInitializerExpression(variable);
|
||||
if (constantInitializer != null) {
|
||||
buffer.append(DocumentationMarkup.GRAYED_START);
|
||||
appendExpressionValue(buffer, constantInitializer);
|
||||
buffer.append(DocumentationMarkup.GRAYED_END);
|
||||
}
|
||||
if (initializer == null) return;
|
||||
|
||||
String initializerText = initializer.getText().trim();
|
||||
if (variableSignatureLength + initializerText.length() < 80) {
|
||||
// initializer should be printed on the same line
|
||||
buffer.append(" ");
|
||||
}
|
||||
else {
|
||||
// initializer should be printed on the new line
|
||||
buffer.append("\n");
|
||||
buffer.append(NBSP.repeat(CodeStyle.getIndentSize(variable.getContainingFile())));
|
||||
}
|
||||
appendStyledSpan(buffer, getHighlightingManager().getOperationSignAttributes(), "= ");
|
||||
|
||||
int index = newLineIndex(initializerText);
|
||||
if (index < initializerText.length()) {
|
||||
initializerText = initializerText.substring(0, index);
|
||||
buffer.append(StringUtil.escapeXmlEntities(initializerText));
|
||||
buffer.append("...");
|
||||
}
|
||||
else {
|
||||
initializer.accept(new MyVisitor(buffer));
|
||||
}
|
||||
PsiExpression constantInitializer = calcInitializerExpression(variable);
|
||||
if (constantInitializer != null) {
|
||||
buffer.append(DocumentationMarkup.GRAYED_START);
|
||||
appendExpressionValue(buffer, constantInitializer);
|
||||
buffer.append(DocumentationMarkup.GRAYED_END);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -968,16 +1011,22 @@ public class JavaDocInfoGenerator {
|
||||
return Math.min(index1, index2);
|
||||
}
|
||||
|
||||
public static int generateModifiers(StringBuilder buffer, PsiModifierListOwner owner, boolean nbsp) {
|
||||
public int generateModifiers(StringBuilder buffer, PsiModifierListOwner owner, boolean nbsp) {
|
||||
String modifiers = PsiFormatUtil.formatModifiers(owner, PsiFormatUtilBase.JAVADOC_MODIFIERS_ONLY);
|
||||
if (!modifiers.isEmpty()) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, modifiers);
|
||||
appendStyledSpan(buffer, getHighlightingManager().getKeywordAttributes(), modifiers);
|
||||
buffer.append(nbsp ? NBSP : ' ');
|
||||
}
|
||||
return modifiers.length();
|
||||
}
|
||||
|
||||
private static int generateTypeAnnotations(StringBuilder buffer, PsiAnnotationOwner owner, PsiElement context, boolean leadingSpace) {
|
||||
private int generateTypeAnnotations(
|
||||
StringBuilder buffer,
|
||||
PsiAnnotationOwner owner,
|
||||
PsiElement context,
|
||||
boolean generateLink,
|
||||
boolean leadingSpace
|
||||
) {
|
||||
int len = 0;
|
||||
List<AnnotationDocGenerator> generators = AnnotationDocGenerator.getAnnotationsToShow(owner, context);
|
||||
if (leadingSpace && !generators.isEmpty()) {
|
||||
@@ -986,7 +1035,7 @@ public class JavaDocInfoGenerator {
|
||||
}
|
||||
for (AnnotationDocGenerator anno : generators) {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
anno.generateAnnotation(buf, AnnotationFormat.JavaDocShort);
|
||||
anno.generateAnnotation(buf, AnnotationFormat.JavaDocShort, generateLink, isRendered(), doSyntaxHighlighting());
|
||||
len += StringUtil.unescapeXmlEntities(StringUtil.stripHtml(buf.toString(), true)).length() + 1;
|
||||
buffer.append(buf);
|
||||
buffer.append(NBSP);
|
||||
@@ -994,15 +1043,18 @@ public class JavaDocInfoGenerator {
|
||||
return len;
|
||||
}
|
||||
|
||||
private static void generateAnnotations(StringBuilder buffer,
|
||||
PsiModifierListOwner owner,
|
||||
SignaturePlace place,
|
||||
boolean splitAnnotations,
|
||||
boolean ignoreNonSourceAnnotations) {
|
||||
private void generateAnnotations(
|
||||
StringBuilder buffer,
|
||||
PsiModifierListOwner owner,
|
||||
SignaturePlace place,
|
||||
boolean splitAnnotations,
|
||||
boolean ignoreNonSourceAnnotations,
|
||||
boolean generateLink
|
||||
) {
|
||||
AnnotationFormat format = place == SignaturePlace.Javadoc ? AnnotationFormat.JavaDocShort : AnnotationFormat.ToolTip;
|
||||
for (AnnotationDocGenerator anno : AnnotationDocGenerator.getAnnotationsToShow(owner)) {
|
||||
if (ignoreNonSourceAnnotations && (anno.isInferred() || anno.isExternal())) continue;
|
||||
anno.generateAnnotation(buffer, format);
|
||||
anno.generateAnnotation(buffer, format, generateLink, isRendered(), doSyntaxHighlighting());
|
||||
|
||||
buffer.append(NBSP);
|
||||
if (splitAnnotations) buffer.append('\n');
|
||||
@@ -1020,14 +1072,20 @@ public class JavaDocInfoGenerator {
|
||||
|
||||
private void generateVariableDefinition(StringBuilder buffer, PsiVariable variable, boolean annotations) {
|
||||
buffer.append(DocumentationMarkup.DEFINITION_START);
|
||||
generateModifiers(buffer, variable, false);
|
||||
|
||||
StringBuilder signatureBuffer = new StringBuilder();
|
||||
generateModifiers(signatureBuffer, variable, false);
|
||||
if (annotations) {
|
||||
generateAnnotations(buffer, variable, SignaturePlace.Javadoc, true, false);
|
||||
generateAnnotations(signatureBuffer, variable, SignaturePlace.Javadoc, true, false, true);
|
||||
}
|
||||
generateType(buffer, variable.getType(), variable);
|
||||
buffer.append(" ");
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.LOCAL_VARIABLE_ATTRIBUTES, variable.getName());
|
||||
appendInitializer(buffer, variable);
|
||||
generateType(signatureBuffer, variable.getType(), variable);
|
||||
signatureBuffer.append(" ");
|
||||
appendStyledSpan(signatureBuffer, getHighlightingManager().getLocalVariableAttributes(), variable.getName());
|
||||
|
||||
buffer.append(signatureBuffer);
|
||||
|
||||
appendInitializer(buffer, variable, StringUtil.removeHtmlTags(signatureBuffer.toString()).length());
|
||||
|
||||
buffer.append(DocumentationMarkup.DEFINITION_END);
|
||||
}
|
||||
|
||||
@@ -1051,7 +1109,7 @@ public class JavaDocInfoGenerator {
|
||||
}
|
||||
|
||||
buffer.append(DocumentationMarkup.SECTIONS_START);
|
||||
new NonCodeAnnotationGenerator(parameter, buffer).explainAnnotations();
|
||||
new NonCodeAnnotationGenerator(parameter, buffer).explainAnnotations(isRendered(), doSyntaxHighlighting());
|
||||
buffer.append(DocumentationMarkup.SECTIONS_END);
|
||||
}
|
||||
|
||||
@@ -1091,8 +1149,6 @@ public class JavaDocInfoGenerator {
|
||||
if (!isRendered()) {
|
||||
buffer.append(DocumentationMarkup.DEFINITION_START);
|
||||
generateMethodSignature(buffer, method, SignaturePlace.Javadoc);
|
||||
|
||||
generateLinkToParentIfNeeded(buffer, method);
|
||||
buffer.append(DocumentationMarkup.DEFINITION_END);
|
||||
}
|
||||
|
||||
@@ -1129,7 +1185,8 @@ public class JavaDocInfoGenerator {
|
||||
startHeaderSection(buffer, JavaBundle.message(aClass.isInterface() ? "javadoc.description.copied.from.interface"
|
||||
: "javadoc.description.copied.from.class"))
|
||||
.append("<p>");
|
||||
generateLink(buffer, aClass, getStyledSpan(getClassTextAttributes(aClass), JavaDocUtil.getShortestClassName(aClass, method)),
|
||||
generateLink(buffer, aClass, getStyledSpan(getHighlightingManager().getClassDeclarationAttributes(aClass),
|
||||
JavaDocUtil.getShortestClassName(aClass, method)),
|
||||
false);
|
||||
buffer.append(BR_TAG);
|
||||
generateValue(buffer, elements, pair.second);
|
||||
@@ -1147,7 +1204,8 @@ public class JavaDocInfoGenerator {
|
||||
if (fieldDocComment != null && !isEmptyDescription(fieldDocComment)) {
|
||||
startHeaderSection(buffer, JavaBundle.message("javadoc.description.copied.from.field"))
|
||||
.append("<p>");
|
||||
generateLink(buffer, field, getStyledSpan(getFieldTextAttributes(field), field.getName()), false);
|
||||
generateLink(buffer, field, getStyledSpan(getHighlightingManager().getFieldDeclarationAttributes(field), field.getName()),
|
||||
false);
|
||||
buffer.append(BR_TAG);
|
||||
generateValue(buffer, fieldDocComment.getDescriptionElements(), ourEmptyElementsProvider);
|
||||
buffer.append(DocumentationMarkup.SECTION_END);
|
||||
@@ -1181,7 +1239,7 @@ public class JavaDocInfoGenerator {
|
||||
}
|
||||
|
||||
if (!isRendered()) {
|
||||
new NonCodeAnnotationGenerator(method, buffer).explainAnnotations();
|
||||
new NonCodeAnnotationGenerator(method, buffer).explainAnnotations(isRendered(), doSyntaxHighlighting());
|
||||
}
|
||||
|
||||
buffer.append(DocumentationMarkup.SECTIONS_END);
|
||||
@@ -1193,83 +1251,64 @@ public class JavaDocInfoGenerator {
|
||||
.append(DocumentationMarkup.SECTION_SEPARATOR);
|
||||
}
|
||||
|
||||
private void generateLinkToParentIfNeeded(StringBuilder buffer, PsiMember member) {
|
||||
PsiClass parentClass = member.getContainingClass();
|
||||
if (parentClass != null && !PsiUtil.isArrayClass(parentClass)) {
|
||||
String qName = parentClass.getQualifiedName();
|
||||
if (qName != null) {
|
||||
appendDefinedInClause(buffer);
|
||||
generateLink(buffer, qName, qName + generateTypeParameters(parentClass, true), member, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void appendDefinedInClause(StringBuilder buffer) {
|
||||
buffer.append(BR_TAG);
|
||||
buffer.append(DocumentationMarkup.GRAYED_START);
|
||||
buffer.append(JavaBundle.message("javadoc.generate.defined.in"));
|
||||
buffer.append(" ");
|
||||
buffer.append(DocumentationMarkup.GRAYED_END);
|
||||
}
|
||||
|
||||
public static @NotNull TextAttributesKey getMethodDeclarationTextAttributes(PsiMethod method) {
|
||||
return method.isConstructor()
|
||||
? JavaHighlightingColors.CONSTRUCTOR_DECLARATION_ATTRIBUTES
|
||||
: JavaHighlightingColors.METHOD_DECLARATION_ATTRIBUTES;
|
||||
}
|
||||
|
||||
private void generateMethodSignature(StringBuilder buffer, PsiMethod method, SignaturePlace place) {
|
||||
boolean isTooltip = place == SignaturePlace.ToolTip;
|
||||
boolean generateLink = place == SignaturePlace.Javadoc;
|
||||
|
||||
generateAnnotations(buffer, method, place, true, false);
|
||||
generateAnnotations(buffer, method, place, true, false, true);
|
||||
|
||||
int modLength = isTooltip ? 0 : generateModifiers(buffer, method, true);
|
||||
int indent = modLength == 0 ? 0 : modLength + 1;
|
||||
if (!isTooltip) {
|
||||
generateModifiers(buffer, method, true);
|
||||
}
|
||||
|
||||
String typeParamsString = generateTypeParameters(method, isTooltip);
|
||||
indent += StringUtil.unescapeXmlEntities(StringUtil.stripHtml(typeParamsString, true)).length();
|
||||
if (!typeParamsString.isEmpty()) {
|
||||
buffer.append(typeParamsString);
|
||||
buffer.append(NBSP);
|
||||
indent++;
|
||||
}
|
||||
|
||||
if (method.getReturnType() != null) {
|
||||
indent += generateType(buffer, method.getReturnType(), method, generateLink, isTooltip);
|
||||
generateType(buffer, method.getReturnType(), method, generateLink, isTooltip);
|
||||
buffer.append(NBSP);
|
||||
indent++;
|
||||
}
|
||||
String name = method.getName();
|
||||
appendStyledSpan(buffer, getMethodDeclarationTextAttributes(method), name);
|
||||
indent += name.length();
|
||||
appendStyledSpan(buffer, getHighlightingManager().getMethodDeclarationAttributes(method), name);
|
||||
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.PARENTHESES, "(");
|
||||
appendStyledSpan(buffer, getHighlightingManager().getParenthesesAttributes(), "(");
|
||||
PsiParameter[] parameters = method.getParameterList().getParameters();
|
||||
PsiFile file = method.getContainingFile();
|
||||
int indent = isTooltip ? 0 : file != null ? CodeStyle.getIndentSize(file) : 4;
|
||||
if (parameters.length > 0 && !isTooltip) {
|
||||
buffer.append(BR_TAG);
|
||||
}
|
||||
for (int i = 0; i < parameters.length; i++) {
|
||||
buffer.append(StringUtil.repeatSymbol(' ', indent));
|
||||
PsiParameter parm = parameters[i];
|
||||
generateAnnotations(buffer, parm, place, false, false);
|
||||
generateAnnotations(buffer, parm, place, false, false, true);
|
||||
generateType(buffer, parm.getType(), method, generateLink, isTooltip);
|
||||
if (!isTooltip) {
|
||||
buffer.append(NBSP);
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.PARAMETER_ATTRIBUTES, parm.getName());
|
||||
appendStyledSpan(buffer, getHighlightingManager().getParameterAttributes(), parm.getName());
|
||||
}
|
||||
if (i < parameters.length - 1) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.COMMA, ",\n ");
|
||||
buffer.append(StringUtil.repeatSymbol(' ', indent));
|
||||
appendStyledSpan(buffer, getHighlightingManager().getCommaAttributes(), ",");
|
||||
buffer.append("\n");
|
||||
}
|
||||
}
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.PARENTHESES, ")");
|
||||
if (parameters.length > 0 && !isTooltip) {
|
||||
buffer.append(BR_TAG);
|
||||
}
|
||||
appendStyledSpan(buffer, getHighlightingManager().getParenthesesAttributes(), ")");
|
||||
|
||||
PsiClassType[] refs = method.getThrowsList().getReferencedTypes();
|
||||
if (refs.length > 0) {
|
||||
buffer.append('\n');
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, "throws");
|
||||
appendStyledSpan(buffer, getHighlightingManager().getKeywordAttributes(), "throws");
|
||||
buffer.append(NBSP);
|
||||
for (int i = 0; i < refs.length; i++) {
|
||||
generateLink(buffer, isTooltip ? refs[i].getPresentableText() : refs[i].getCanonicalText(), null, method, false);
|
||||
if (i < refs.length - 1) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.COMMA, ",");
|
||||
appendStyledSpan(buffer, getHighlightingManager().getCommaAttributes(), ",");
|
||||
buffer.append(NBSP);
|
||||
}
|
||||
}
|
||||
@@ -1741,8 +1780,12 @@ public class JavaDocInfoGenerator {
|
||||
String text = elements[0].getText();
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
buffer.append(tag.presentableName);
|
||||
buffer.append(" – ");
|
||||
generateValue(buffer, tag, elements, text);
|
||||
StringBuilder descriptionBuffer = new StringBuilder();
|
||||
generateValue(descriptionBuffer, tag, elements, text);
|
||||
if (!StringUtil.isEmptyOrSpaces(descriptionBuffer)) {
|
||||
buffer.append(" – ");
|
||||
buffer.append(descriptionBuffer);
|
||||
}
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
@@ -1814,7 +1857,7 @@ public class JavaDocInfoGenerator {
|
||||
|
||||
LinkedList<Pair<PsiDocTag, InheritDocProvider<PsiDocTag>>> collectedTags = new LinkedList<>();
|
||||
List<PsiClassType> declaredThrows = isRendered() ? Collections.emptyList()
|
||||
: new ArrayList<>(Arrays.asList(method.getThrowsList().getReferencedTypes()));
|
||||
: new ArrayList<>(Arrays.asList(method.getThrowsList().getReferencedTypes()));
|
||||
|
||||
for (int i = thrownTags.length - 1; i > -1; i--) {
|
||||
PsiDocTagValue valueElement = thrownTags[i].getValueElement();
|
||||
@@ -1830,7 +1873,8 @@ public class JavaDocInfoGenerator {
|
||||
}
|
||||
|
||||
Pair<PsiDocTag, InheritDocProvider<PsiDocTag>> tag = isRendered() ? null
|
||||
: findInheritDocTag(method, exceptionLocator(valueElement.getText()));
|
||||
: findInheritDocTag(method,
|
||||
exceptionLocator(valueElement.getText()));
|
||||
collectedTags.addFirst(new Pair<>(thrownTags[i], new InheritDocProvider<>() {
|
||||
@Override
|
||||
public Pair<PsiDocTag, InheritDocProvider<PsiDocTag>> getInheritDoc() {
|
||||
@@ -1931,9 +1975,11 @@ public class JavaDocInfoGenerator {
|
||||
|
||||
StringBuilder methodBuffer = new StringBuilder();
|
||||
generateLink(
|
||||
methodBuffer, superMethod, getStyledSpan(JavaHighlightingColors.METHOD_DECLARATION_ATTRIBUTES, superMethod.getName()), false);
|
||||
methodBuffer, superMethod,
|
||||
getStyledSpan(getHighlightingManager().getMethodDeclarationAttributes(superMethod), superMethod.getName()), false);
|
||||
StringBuilder classBuffer = new StringBuilder();
|
||||
generateLink(classBuffer, superClass, getStyledSpan(getClassTextAttributes(superClass), superClass.getName()), false);
|
||||
generateLink(classBuffer, superClass,
|
||||
getStyledSpan(getHighlightingManager().getClassDeclarationAttributes(superClass), superClass.getName()), false);
|
||||
if (superClass.isInterface()) {
|
||||
buffer.append(JavaBundle.message("javadoc.method.in.interface", methodBuffer.toString(), classBuffer.toString()));
|
||||
}
|
||||
@@ -1980,7 +2026,7 @@ public class JavaDocInfoGenerator {
|
||||
return StringUtil.stripHtml(label, true).length();
|
||||
}
|
||||
|
||||
private void appendMaybeUnresolvedLink(
|
||||
public void appendMaybeUnresolvedLink(
|
||||
StringBuilder buffer,
|
||||
@Nullable PsiElement target,
|
||||
String label,
|
||||
@@ -1998,27 +2044,29 @@ public class JavaDocInfoGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
private static @NotNull String tryHighlightLinkLabel(@NotNull PsiElement element, @NotNull String label) {
|
||||
private @NotNull String tryHighlightLinkLabel(@NotNull PsiElement element, @NotNull String label) {
|
||||
if (element instanceof PsiClass) {
|
||||
return getStyledSpan(getClassTextAttributes((PsiClass)element), label);
|
||||
return getStyledSpan(getHighlightingManager().getClassDeclarationAttributes((PsiClass)element), label);
|
||||
}
|
||||
if (element instanceof PsiPackage) {
|
||||
return getStyledSpan(JavaHighlightingColors.CLASS_NAME_ATTRIBUTES, label);
|
||||
return getStyledSpan(getHighlightingManager().getClassNameAttributes(), label);
|
||||
}
|
||||
else if (element instanceof PsiMethod) {
|
||||
return tryHighlightLinkOnClassMember((PsiMember)element, getMethodDeclarationTextAttributes((PsiMethod)element), label);
|
||||
return tryHighlightLinkOnClassMember((PsiMember)element, getHighlightingManager().getMethodDeclarationAttributes((PsiMethod)element),
|
||||
label);
|
||||
}
|
||||
else if (element instanceof PsiField) {
|
||||
return tryHighlightLinkOnClassMember((PsiField)element, getFieldTextAttributes((PsiField)element), label);
|
||||
return tryHighlightLinkOnClassMember((PsiField)element, getHighlightingManager().getFieldDeclarationAttributes((PsiField)element),
|
||||
label);
|
||||
}
|
||||
else {
|
||||
return getHighlightedByLexerAndEncodedAsHtmlCodeSnippet(element.getProject(), element.getLanguage(), label);
|
||||
}
|
||||
}
|
||||
|
||||
private static @NotNull String tryHighlightLinkOnClassMember(
|
||||
private @NotNull String tryHighlightLinkOnClassMember(
|
||||
@NotNull PsiMember member,
|
||||
@NotNull TextAttributesKey attributesKey,
|
||||
@NotNull TextAttributes labelAttributes,
|
||||
@NotNull String label
|
||||
) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
@@ -2027,13 +2075,14 @@ public class JavaDocInfoGenerator {
|
||||
int classNameIndex = label.substring(0, openParenIndex).lastIndexOf(".");
|
||||
if (classNameIndex != -1) {
|
||||
PsiClass containingClass = member.getContainingClass();
|
||||
TextAttributesKey containingClassAttributes =
|
||||
containingClass != null ? getClassTextAttributes(containingClass) : JavaHighlightingColors.CLASS_NAME_ATTRIBUTES;
|
||||
TextAttributes containingClassAttributes =
|
||||
containingClass != null ? getHighlightingManager().getClassDeclarationAttributes(containingClass)
|
||||
: getHighlightingManager().getClassNameAttributes();
|
||||
appendStyledSpan(buffer, containingClassAttributes, label.substring(0, classNameIndex));
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.DOT, ".");
|
||||
appendStyledSpan(buffer, getHighlightingManager().getDotAttributes(), ".");
|
||||
}
|
||||
classNameIndex++;
|
||||
appendStyledSpan(buffer, attributesKey, label.substring(classNameIndex, openParenIndex));
|
||||
appendStyledSpan(buffer, labelAttributes, label.substring(classNameIndex, openParenIndex));
|
||||
if (openParenIndex == label.length()) return buffer.toString();
|
||||
appendHighlightedByLexerAndEncodedAsHtmlCodeSnippet(
|
||||
buffer, member.getProject(), member.getLanguage(), label.substring(openParenIndex));
|
||||
@@ -2061,22 +2110,22 @@ public class JavaDocInfoGenerator {
|
||||
if (type instanceof PsiArrayType) {
|
||||
int rest = generateType(buffer, ((PsiArrayType)type).getComponentType(), context, generateLink, useShortNames);
|
||||
|
||||
int len = generateTypeAnnotations(buffer, type, context, true);
|
||||
int len = generateTypeAnnotations(buffer, type, context, generateLink, true);
|
||||
if (type instanceof PsiEllipsisType) {
|
||||
buffer.append("...");
|
||||
return len + rest + 3;
|
||||
}
|
||||
else {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.BRACKETS, "[]");
|
||||
appendStyledSpan(buffer, getHighlightingManager().getBracketsAttributes(), "[]");
|
||||
return len + rest + 2;
|
||||
}
|
||||
}
|
||||
|
||||
int typAnnoLength = generateTypeAnnotations(buffer, type, context, false);
|
||||
int typAnnoLength = generateTypeAnnotations(buffer, type, context, generateLink, false);
|
||||
|
||||
if (type instanceof PsiPrimitiveType) {
|
||||
String text = type.getCanonicalText();
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, StringUtil.escapeXmlEntities(text));
|
||||
appendStyledSpan(buffer, getHighlightingManager().getKeywordAttributes(), StringUtil.escapeXmlEntities(text));
|
||||
return typAnnoLength + text.length();
|
||||
}
|
||||
|
||||
@@ -2086,11 +2135,11 @@ public class JavaDocInfoGenerator {
|
||||
|
||||
if (type instanceof PsiWildcardType) {
|
||||
PsiWildcardType wt = (PsiWildcardType)type;
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.OPERATION_SIGN, "?");
|
||||
appendStyledSpan(buffer, getHighlightingManager().getOperationSignAttributes(), "?");
|
||||
PsiType bound = wt.getBound();
|
||||
if (bound != null) {
|
||||
String keyword = wt.isExtends() ? " extends " : " super ";
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, keyword);
|
||||
appendStyledSpan(buffer, getHighlightingManager().getKeywordAttributes(), keyword);
|
||||
return typAnnoLength + generateType(buffer, bound, context, generateLink, useShortNames) + 1 + keyword.length();
|
||||
}
|
||||
else {
|
||||
@@ -2127,7 +2176,7 @@ public class JavaDocInfoGenerator {
|
||||
if (qName == null || psiClass instanceof PsiTypeParameter) {
|
||||
String typeText = useShortNames ? type.getPresentableText() : type.getCanonicalText();
|
||||
appendStyledSpan(
|
||||
buffer, JavaHighlightingColors.TYPE_PARAMETER_NAME_ATTRIBUTES, StringUtil.escapeXmlEntities(typeText));
|
||||
buffer, getHighlightingManager().getTypeParameterNameAttributes(), StringUtil.escapeXmlEntities(typeText));
|
||||
return typAnnoLength + typeText.length();
|
||||
}
|
||||
|
||||
@@ -2138,7 +2187,7 @@ public class JavaDocInfoGenerator {
|
||||
length += generateLink(buffer, name, null, context, false);
|
||||
}
|
||||
else {
|
||||
appendStyledSpan(buffer, getClassTextAttributes(psiClass), name);
|
||||
appendStyledSpan(buffer, getHighlightingManager().getClassDeclarationAttributes(psiClass), name);
|
||||
length += name.length();
|
||||
}
|
||||
|
||||
@@ -2147,7 +2196,7 @@ public class JavaDocInfoGenerator {
|
||||
|
||||
PsiTypeParameter[] params = psiClass.getTypeParameters();
|
||||
|
||||
appendStyledSpan(subst, JavaHighlightingColors.OPERATION_SIGN, LT);
|
||||
appendStyledSpan(subst, getHighlightingManager().getOperationSignAttributes(), LT);
|
||||
length += 1;
|
||||
boolean goodSubst = true;
|
||||
for (int i = 0; i < params.length; i++) {
|
||||
@@ -2161,12 +2210,12 @@ public class JavaDocInfoGenerator {
|
||||
length += generateType(subst, t, context, generateLink, useShortNames);
|
||||
|
||||
if (i < params.length - 1) {
|
||||
appendStyledSpan(subst, JavaHighlightingColors.COMMA, ", ");
|
||||
appendStyledSpan(subst, getHighlightingManager().getCommaAttributes(), ", ");
|
||||
length += 2;
|
||||
}
|
||||
}
|
||||
|
||||
appendStyledSpan(subst, JavaHighlightingColors.OPERATION_SIGN, GT);
|
||||
appendStyledSpan(subst, getHighlightingManager().getOperationSignAttributes(), GT);
|
||||
length++;
|
||||
if (goodSubst) {
|
||||
buffer.append(subst);
|
||||
@@ -2194,7 +2243,7 @@ public class JavaDocInfoGenerator {
|
||||
int length = typAnnoLength;
|
||||
for (PsiType psiType : componentTypes) {
|
||||
if (length > 0) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.OPERATION_SIGN, separator);
|
||||
appendStyledSpan(buffer, getHighlightingManager().getOperationSignAttributes(), separator);
|
||||
length += 3;
|
||||
}
|
||||
length += generateType(buffer, psiType, context, true, useShortNames);
|
||||
@@ -2222,35 +2271,35 @@ public class JavaDocInfoGenerator {
|
||||
PsiTypeParameter[] parameters = owner.getTypeParameters();
|
||||
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.OPERATION_SIGN, LT);
|
||||
appendStyledSpan(buffer, getHighlightingManager().getOperationSignAttributes(), LT);
|
||||
|
||||
for (int i = 0; i < parameters.length; i++) {
|
||||
PsiTypeParameter p = parameters[i];
|
||||
|
||||
generateTypeAnnotations(buffer, p, p, false);
|
||||
generateTypeAnnotations(buffer, p, p, true, false);
|
||||
|
||||
appendStyledSpan(
|
||||
buffer,
|
||||
JavaHighlightingColors.TYPE_PARAMETER_NAME_ATTRIBUTES,
|
||||
getHighlightingManager().getTypeParameterNameAttributes(),
|
||||
Objects.requireNonNullElse(p.getName(), CommonBundle.getErrorTitle()));
|
||||
|
||||
PsiClassType[] refs = JavaDocUtil.getExtendsList(p);
|
||||
if (refs.length > 0) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, " extends ");
|
||||
appendStyledSpan(buffer, getHighlightingManager().getKeywordAttributes(), " extends ");
|
||||
for (int j = 0; j < refs.length; j++) {
|
||||
generateType(buffer, refs[j], owner, true, useShortNames);
|
||||
if (j < refs.length - 1) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.OPERATION_SIGN, " & ");
|
||||
appendStyledSpan(buffer, getHighlightingManager().getOperationSignAttributes(), " & ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (i < parameters.length - 1) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.COMMA, ", ");
|
||||
appendStyledSpan(buffer, getHighlightingManager().getCommaAttributes(), ", ");
|
||||
}
|
||||
}
|
||||
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.OPERATION_SIGN, GT);
|
||||
appendStyledSpan(buffer, getHighlightingManager().getOperationSignAttributes(), GT);
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
@@ -2429,7 +2478,7 @@ public class JavaDocInfoGenerator {
|
||||
|
||||
@Override
|
||||
public void visitNewExpression(PsiNewExpression expression) {
|
||||
appendStyledSpan(myBuffer, JavaHighlightingColors.KEYWORD, "new ");
|
||||
appendStyledSpan(myBuffer, getHighlightingManager().getKeywordAttributes(), "new ");
|
||||
PsiType type = expression.getType();
|
||||
if (type != null) {
|
||||
generateType(myBuffer, type, expression);
|
||||
@@ -2443,9 +2492,9 @@ public class JavaDocInfoGenerator {
|
||||
for (int i = 0; i < dimensions.length; i++) {
|
||||
PsiExpression dimension = dimensions[i];
|
||||
dimension.accept(this);
|
||||
if (i + 1 != dimensions.length) appendStyledSpan(myBuffer, JavaHighlightingColors.COMMA, ", ");
|
||||
if (i + 1 != dimensions.length) appendStyledSpan(myBuffer, getHighlightingManager().getCommaAttributes(), ", ");
|
||||
}
|
||||
appendStyledSpan(myBuffer, JavaHighlightingColors.BRACKETS, "]");
|
||||
appendStyledSpan(myBuffer, getHighlightingManager().getBracketsAttributes(), "]");
|
||||
}
|
||||
else {
|
||||
expression.acceptChildren(this);
|
||||
@@ -2454,22 +2503,22 @@ public class JavaDocInfoGenerator {
|
||||
|
||||
@Override
|
||||
public void visitExpressionList(PsiExpressionList list) {
|
||||
appendStyledSpan(myBuffer, JavaHighlightingColors.PARENTHESES, "(");
|
||||
appendStyledSpan(myBuffer, getHighlightingManager().getParenthesesAttributes(), "(");
|
||||
String separator = ", ";
|
||||
PsiExpression[] expressions = list.getExpressions();
|
||||
for (int i = 0; i < expressions.length; i++) {
|
||||
PsiExpression expression = expressions[i];
|
||||
expression.accept(this);
|
||||
if (i + 1 != expressions.length) appendStyledSpan(myBuffer, JavaHighlightingColors.COMMA, separator);
|
||||
if (i + 1 != expressions.length) appendStyledSpan(myBuffer, getHighlightingManager().getCommaAttributes(), separator);
|
||||
}
|
||||
appendStyledSpan(myBuffer, JavaHighlightingColors.PARENTHESES, ")");
|
||||
appendStyledSpan(myBuffer, getHighlightingManager().getParenthesesAttributes(), ")");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodCallExpression(PsiMethodCallExpression expression) {
|
||||
appendStyledSpan(
|
||||
myBuffer,
|
||||
JavaHighlightingColors.METHOD_CALL_ATTRIBUTES,
|
||||
getHighlightingManager().getMethodCallAttributes(),
|
||||
StringUtil.escapeXmlEntities(expression.getMethodExpression().getText()));
|
||||
expression.getArgumentList().accept(this);
|
||||
}
|
||||
@@ -2487,8 +2536,8 @@ public class JavaDocInfoGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
public static void generateTooltipAnnotations(PsiModifierListOwner owner, @Nls StringBuilder buffer) {
|
||||
generateAnnotations(buffer, owner, SignaturePlace.ToolTip, true, true);
|
||||
public void generateTooltipAnnotations(PsiModifierListOwner owner, @Nls StringBuilder buffer) {
|
||||
generateAnnotations(buffer, owner, SignaturePlace.ToolTip, true, true, false);
|
||||
}
|
||||
|
||||
private enum SignaturePlace {
|
||||
|
||||
+24
-6
@@ -2,6 +2,7 @@
|
||||
package com.intellij.codeInsight.javadoc;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -13,20 +14,37 @@ public class JavaDocInfoGeneratorFactory {
|
||||
}
|
||||
|
||||
protected JavaDocInfoGenerator createImpl(@NotNull Project project, @Nullable PsiElement element) {
|
||||
return new JavaDocInfoGenerator(project, element, false);
|
||||
return new JavaDocInfoGenerator(
|
||||
project,
|
||||
element,
|
||||
JavaDocHighlightingManagerImpl.getInstance(),
|
||||
false,
|
||||
EditorSettingsExternalizable.getInstance().isDocSyntaxHighlightingEnabled());
|
||||
}
|
||||
|
||||
protected JavaDocInfoGenerator createImpl(@NotNull Project project, @Nullable PsiElement element, boolean isGenerationForRenderedDoc) {
|
||||
return new JavaDocInfoGenerator(project, element, isGenerationForRenderedDoc);
|
||||
protected JavaDocInfoGenerator createImpl(
|
||||
@NotNull Project project,
|
||||
@Nullable PsiElement element,
|
||||
@NotNull JavaDocHighlightingManager highlightingManager,
|
||||
boolean isGenerationForRenderedDoc,
|
||||
boolean doSyntaxHighlighting
|
||||
) {
|
||||
return new JavaDocInfoGenerator(project, element, highlightingManager, isGenerationForRenderedDoc, doSyntaxHighlighting);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JavaDocInfoGenerator create(@NotNull Project project, @Nullable PsiElement element) {
|
||||
return getInstance().createImpl(project, element, false);
|
||||
return getInstance().createImpl(project, element);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JavaDocInfoGenerator create(@NotNull Project project, @Nullable PsiElement element, boolean isGenerationForRenderedDoc) {
|
||||
return getInstance().createImpl(project, element, isGenerationForRenderedDoc);
|
||||
public static JavaDocInfoGenerator create(
|
||||
@NotNull Project project,
|
||||
@Nullable PsiElement element,
|
||||
@NotNull JavaDocHighlightingManager highlightingManager,
|
||||
boolean isGenerationForRenderedDoc,
|
||||
boolean doSyntaxHighlighting
|
||||
) {
|
||||
return getInstance().createImpl(project, element, highlightingManager, isGenerationForRenderedDoc, doSyntaxHighlighting);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ public class NonCodeAnnotationGenerator {
|
||||
myOutput = output;
|
||||
}
|
||||
|
||||
void explainAnnotations() {
|
||||
void explainAnnotations(boolean isForRenderedFoc, boolean doSyntaxHighlighting) {
|
||||
MultiMap<PsiModifierListOwner, AnnotationDocGenerator> generators = getSignatureNonCodeAnnotations(myOwner);
|
||||
if (generators.isEmpty()) return;
|
||||
|
||||
@@ -38,12 +38,12 @@ public class NonCodeAnnotationGenerator {
|
||||
generators.keySet().forEach(owner -> {
|
||||
myOutput.append("<p>");
|
||||
if (generators.size() > 1) {
|
||||
myOutput.append(getKind(owner)).append(" <code>").append(((PsiNamedElement)owner).getName()).append("</code>: ");
|
||||
myOutput.append(getKind(owner)).append(" <code>").append(((PsiNamedElement)owner).getName()).append("</code>: ").append("<br>");
|
||||
}
|
||||
List<AnnotationDocGenerator> annotations = new ArrayList<>(generators.get(owner));
|
||||
for (int i = 0; i < annotations.size(); i++) {
|
||||
if (i > 0) myOutput.append(" ");
|
||||
annotations.get(i).generateAnnotation(myOutput, AnnotationFormat.JavaDocComplete);
|
||||
if (i > 0) myOutput.append("<br>");
|
||||
annotations.get(i).generateAnnotation(myOutput, AnnotationFormat.JavaDocComplete, true, isForRenderedFoc, doSyntaxHighlighting);
|
||||
}
|
||||
});
|
||||
myOutput.append(DocumentationMarkup.SECTION_END);
|
||||
|
||||
@@ -6,24 +6,23 @@ import com.intellij.codeInsight.CodeInsightSettings;
|
||||
import com.intellij.codeInsight.completion.CompletionMemory;
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.JavaModuleGraphUtil;
|
||||
import com.intellij.codeInsight.documentation.DocumentationManagerProtocol;
|
||||
import com.intellij.codeInsight.documentation.DocumentationManagerUtil;
|
||||
import com.intellij.codeInsight.documentation.PlatformDocumentationUtil;
|
||||
import com.intellij.codeInsight.documentation.QuickDocUtil;
|
||||
import com.intellij.codeInsight.editorActions.CodeDocumentationUtil;
|
||||
import com.intellij.codeInsight.javadoc.JavaDocExternalFilter;
|
||||
import com.intellij.codeInsight.javadoc.JavaDocInfoGenerator;
|
||||
import com.intellij.codeInsight.javadoc.JavaDocInfoGeneratorFactory;
|
||||
import com.intellij.codeInsight.javadoc.JavaDocUtil;
|
||||
import com.intellij.ide.highlighter.JavaHighlightingColors;
|
||||
import com.intellij.codeInsight.javadoc.*;
|
||||
import com.intellij.ide.util.PackageUtil;
|
||||
import com.intellij.java.JavaBundle;
|
||||
import com.intellij.lang.CodeDocumentationAwareCommenter;
|
||||
import com.intellij.lang.LanguageCommenters;
|
||||
import com.intellij.lang.documentation.CodeDocumentationProvider;
|
||||
import com.intellij.lang.documentation.CompositeDocumentationProvider;
|
||||
import com.intellij.lang.documentation.DocumentationMarkup;
|
||||
import com.intellij.lang.documentation.DocumentationProviderEx;
|
||||
import com.intellij.lang.documentation.ExternalDocumentationProvider;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
|
||||
import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.openapi.editor.richcopy.HtmlSyntaxInfoUtil;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
@@ -35,6 +34,7 @@ import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.util.NlsSafe;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.HtmlChunk;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.JarFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -61,7 +61,6 @@ import org.jetbrains.builtInWebServer.BuiltInWebBrowserUrlProviderKt;
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static com.intellij.openapi.editor.richcopy.HtmlSyntaxInfoUtil.*;
|
||||
import static com.intellij.util.ObjectUtils.notNull;
|
||||
|
||||
/**
|
||||
@@ -78,6 +77,37 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
public static final String HTML_EXTENSION = ".html";
|
||||
public static final String PACKAGE_SUMMARY_FILE = "package-summary.html";
|
||||
|
||||
protected static @NotNull StringBuilder appendStyledSpan(
|
||||
@NotNull StringBuilder buffer,
|
||||
@NotNull TextAttributes attributes,
|
||||
@Nullable String value
|
||||
) {
|
||||
if (doSyntaxHighlighting()) {
|
||||
HtmlSyntaxInfoUtil.appendStyledSpan(buffer, attributes, value);
|
||||
}
|
||||
else {
|
||||
buffer.append(value);
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
private static void appendStyledSpan(
|
||||
@NotNull StringBuilder buffer,
|
||||
@Nullable String value,
|
||||
String @NotNull ... properties
|
||||
) {
|
||||
if (doSyntaxHighlighting()) {
|
||||
HtmlSyntaxInfoUtil.appendStyledSpan(buffer, value, properties);
|
||||
}
|
||||
else {
|
||||
buffer.append(value);
|
||||
}
|
||||
}
|
||||
|
||||
protected static boolean doSyntaxHighlighting() {
|
||||
return EditorSettingsExternalizable.getInstance().isDocSyntaxHighlightingEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nls String getQuickNavigateInfo(PsiElement element, PsiElement originalElement) {
|
||||
return QuickDocUtil.inferLinkFromFullDocumentation(this, element, originalElement,
|
||||
@@ -119,6 +149,65 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
return substitutor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable HtmlChunk getLocationInfo(@Nullable PsiElement element) {
|
||||
if (element == null) return null;
|
||||
|
||||
HtmlChunk baseInfo = DocumentationProviderEx.getDefaultLocationInfo(element);
|
||||
JavaDocHighlightingManager highlightingManager = JavaDocHighlightingManagerImpl.getInstance();
|
||||
|
||||
@NlsSafe String ownerLink = null;
|
||||
String ownerIcon = null;
|
||||
|
||||
if (element instanceof PsiClass) {
|
||||
PsiFile file = element.getContainingFile();
|
||||
if (file instanceof PsiJavaFile) {
|
||||
String packageName = ((PsiJavaFile)file).getPackageName();
|
||||
if (!packageName.isEmpty()) {
|
||||
PsiPackage aPackage = JavaPsiFacade.getInstance(file.getProject()).findPackage(packageName);
|
||||
StringBuilder packageFqnBuilder = new StringBuilder();
|
||||
appendStyledSpan(packageFqnBuilder, highlightingManager.getClassNameAttributes(), packageName);
|
||||
ownerLink = generateLink(aPackage, packageFqnBuilder.toString(), false, false);
|
||||
ownerIcon = "AllIcons.Nodes.Package";
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (element instanceof PsiMember) {
|
||||
PsiClass parentClass = ((PsiMember)element).getContainingClass();
|
||||
if (parentClass != null && !PsiUtil.isArrayClass(parentClass)) {
|
||||
String qName = parentClass.getQualifiedName();
|
||||
if (qName != null) {
|
||||
StringBuilder classFqnBuilder = new StringBuilder();
|
||||
appendStyledSpan(classFqnBuilder, highlightingManager.getClassNameAttributes(), qName);
|
||||
generateTypeParameters(parentClass, classFqnBuilder, highlightingManager);
|
||||
ownerLink = generateLink(parentClass, classFqnBuilder.toString(), false, false);
|
||||
ownerIcon = "AllIcons.Nodes.Class";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ownerLink != null) {
|
||||
return HtmlChunk.fragment(
|
||||
HtmlChunk.tag("icon").attr("src", ownerIcon),
|
||||
HtmlChunk.nbsp(),
|
||||
HtmlChunk.raw(ownerLink),
|
||||
HtmlChunk.br(),
|
||||
baseInfo != null ? baseInfo : HtmlChunk.empty()
|
||||
);
|
||||
}
|
||||
return baseInfo;
|
||||
}
|
||||
|
||||
private static String generateLink(PsiElement element, String label, boolean plainLink, boolean isRenderedDoc) {
|
||||
String refText = JavaDocUtil.getReferenceText(element.getProject(), element);
|
||||
if (refText != null) {
|
||||
StringBuilder linkBuilder = new StringBuilder();
|
||||
DocumentationManagerUtil.createHyperlink(linkBuilder, element, refText, label, plainLink, isRenderedDoc);
|
||||
return linkBuilder.toString();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getUrlFor(final PsiElement element, final PsiElement originalElement) {
|
||||
return getExternalJavaDocUrl(element);
|
||||
@@ -132,16 +221,17 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
private static void generateInitializer(StringBuilder buffer, PsiVariable variable) {
|
||||
PsiExpression initializer = variable.getInitializer();
|
||||
if (initializer != null) {
|
||||
JavaDocInfoGenerator.appendExpressionValue(buffer, initializer);
|
||||
JavaDocInfoGenerator generator = JavaDocInfoGeneratorFactory.create(variable.getProject(), null);
|
||||
generator.appendExpressionValue(buffer, initializer);
|
||||
PsiExpression constantInitializer = JavaDocInfoGenerator.calcInitializerExpression(variable);
|
||||
if (constantInitializer != null) {
|
||||
JavaDocInfoGenerator.appendExpressionValue(buffer, constantInitializer);
|
||||
generator.appendExpressionValue(buffer, constantInitializer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void generateModifiers(StringBuilder buffer, PsiModifierListOwner element) {
|
||||
JavaDocInfoGenerator.generateModifiers(buffer, element, false);
|
||||
JavaDocInfoGeneratorFactory.create(element.getProject(), null).generateModifiers(buffer, element, false);
|
||||
}
|
||||
|
||||
private static @NlsSafe String generatePackageInfo(PsiPackage aPackage) {
|
||||
@@ -170,12 +260,13 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
if (index.isInLibrary(file)) {
|
||||
index.getOrderEntriesForFile(file).stream()
|
||||
.filter(LibraryOrSdkOrderEntry.class::isInstance).findFirst()
|
||||
.ifPresent(entry -> buffer.append('[').append(StringUtil.escapeXmlEntities(entry.getPresentableName())).append("] "));
|
||||
.ifPresent(
|
||||
entry -> appendStyledSpan(buffer, "[" + StringUtil.escapeXmlEntities(entry.getPresentableName()) + "] ", "color: #909090"));
|
||||
}
|
||||
else {
|
||||
Module module = index.getModuleForFile(file);
|
||||
if (module != null) {
|
||||
buffer.append('[').append(module.getName()).append("] ");
|
||||
appendStyledSpan(buffer, "[" + module.getName() + "] ", "color: #909090");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -186,94 +277,121 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
|
||||
if (aClass instanceof PsiAnonymousClass) return JavaElementKind.ANONYMOUS_CLASS.subject();
|
||||
|
||||
JavaDocInfoGenerator docInfoGenerator = JavaDocInfoGeneratorFactory.create(
|
||||
aClass.getProject(), null, JavaDocHighlightingManagerImpl.getInstance(), false, doSyntaxHighlighting());
|
||||
|
||||
generateOrderEntryAndPackageInfo(buffer, aClass);
|
||||
JavaDocInfoGenerator.generateTooltipAnnotations(aClass, buffer);
|
||||
docInfoGenerator.generateTooltipAnnotations(aClass, buffer);
|
||||
generateModifiers(buffer, aClass);
|
||||
|
||||
JavaDocHighlightingManagerImpl highlightingManager = JavaDocHighlightingManagerImpl.getInstance();
|
||||
|
||||
final String classString = aClass.isAnnotationType() ? '@' + PsiKeyword.INTERFACE :
|
||||
aClass.isInterface() ? PsiKeyword.INTERFACE :
|
||||
aClass instanceof PsiTypeParameter ? JavaBundle.message("java.terms.type.parameter") :
|
||||
aClass.isEnum() ? PsiKeyword.ENUM :
|
||||
aClass.isRecord() ? PsiKeyword.RECORD :
|
||||
PsiKeyword.CLASS;
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, classString).append(" ");
|
||||
appendStyledSpan(buffer, highlightingManager.getKeywordAttributes(), classString).append(" ");
|
||||
|
||||
appendStyledSpan(buffer, JavaDocInfoGenerator.getClassTextAttributes(aClass), JavaDocUtil.getShortestClassName(aClass, aClass));
|
||||
appendStyledSpan(
|
||||
buffer,
|
||||
highlightingManager.getClassDeclarationAttributes(aClass),
|
||||
JavaDocUtil.getShortestClassName(aClass, aClass));
|
||||
|
||||
generateTypeParameters(aClass, buffer);
|
||||
generateTypeParameters(aClass, buffer, highlightingManager);
|
||||
|
||||
if (!aClass.isEnum() && !aClass.isAnnotationType()) {
|
||||
PsiReferenceList extendsList = aClass.getExtendsList();
|
||||
writeExtends(aClass, buffer, extendsList == null ? PsiClassType.EMPTY_ARRAY : extendsList.getReferencedTypes());
|
||||
writeExtends(aClass, buffer, extendsList == null ? PsiClassType.EMPTY_ARRAY : extendsList.getReferencedTypes(), highlightingManager);
|
||||
}
|
||||
|
||||
writeImplements(aClass, buffer, aClass.getImplementsListTypes());
|
||||
writeImplements(aClass, buffer, aClass.getImplementsListTypes(), highlightingManager);
|
||||
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public static void writeImplements(PsiClass aClass, StringBuilder buffer, PsiClassType[] refs) {
|
||||
public static void writeImplements(
|
||||
PsiClass aClass,
|
||||
StringBuilder buffer,
|
||||
PsiClassType[] refs,
|
||||
JavaDocHighlightingManager highlightingManager
|
||||
) {
|
||||
if (refs.length > 0) {
|
||||
newLine(buffer);
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, "implements "); // <- Groovy keyword
|
||||
writeTypeRefs(aClass, buffer, refs);
|
||||
appendStyledSpan(buffer, highlightingManager.getKeywordAttributes(), "implements "); // <- Groovy keyword
|
||||
writeTypeRefs(aClass, buffer, refs, highlightingManager);
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeExtends(PsiClass aClass, StringBuilder buffer, PsiClassType[] refs) {
|
||||
public static void writeExtends(
|
||||
PsiClass aClass,
|
||||
StringBuilder buffer,
|
||||
PsiClassType[] refs,
|
||||
JavaDocHighlightingManager highlightingManager
|
||||
) {
|
||||
if (refs.length > 0 || !aClass.isInterface() && !CommonClassNames.JAVA_LANG_OBJECT.equals(aClass.getQualifiedName())) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, " extends "); // <- Groovy keyword
|
||||
appendStyledSpan(buffer, highlightingManager.getKeywordAttributes(), " extends "); // <- Groovy keyword
|
||||
if (refs.length == 0) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.CLASS_NAME_ATTRIBUTES, "Object");
|
||||
appendStyledSpan(buffer, highlightingManager.getClassNameAttributes(), "Object");
|
||||
}
|
||||
else {
|
||||
writeTypeRefs(aClass, buffer, refs);
|
||||
writeTypeRefs(aClass, buffer, refs, highlightingManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void writeTypeRefs(PsiClass aClass, StringBuilder buffer, PsiClassType[] refs) {
|
||||
private static void writeTypeRefs(
|
||||
PsiClass aClass,
|
||||
StringBuilder buffer,
|
||||
PsiClassType[] refs,
|
||||
JavaDocHighlightingManager highlightingManager
|
||||
) {
|
||||
for (int i = 0; i < refs.length; i++) {
|
||||
new JavaDocInfoGenerator(aClass.getProject(), null, false)
|
||||
JavaDocInfoGeneratorFactory.create(aClass.getProject(), null, highlightingManager, false, doSyntaxHighlighting())
|
||||
.generateType(buffer, refs[i], aClass, false, true);
|
||||
|
||||
if (i < refs.length - 1) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.COMMA, ", ");
|
||||
appendStyledSpan(buffer, highlightingManager.getCommaAttributes(), ", ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void generateTypeParameters(PsiTypeParameterListOwner typeParameterOwner, StringBuilder buffer) {
|
||||
public static void generateTypeParameters(
|
||||
PsiTypeParameterListOwner typeParameterOwner,
|
||||
StringBuilder buffer,
|
||||
JavaDocHighlightingManager highlightingManager
|
||||
) {
|
||||
if (typeParameterOwner.hasTypeParameters()) {
|
||||
PsiTypeParameter[] params = typeParameterOwner.getTypeParameters();
|
||||
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.OPERATION_SIGN, "<");
|
||||
appendStyledSpan(buffer, highlightingManager.getOperationSignAttributes(), "<");
|
||||
|
||||
for (int i = 0; i < params.length; i++) {
|
||||
PsiTypeParameter p = params[i];
|
||||
|
||||
buffer.append(p.getName());
|
||||
appendStyledSpan(buffer, highlightingManager.getTypeParameterNameAttributes(), p.getName());
|
||||
PsiClassType[] refs = p.getExtendsList().getReferencedTypes();
|
||||
|
||||
if (refs.length > 0) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, " extends "); // <- Groovy keyword
|
||||
appendStyledSpan(buffer, highlightingManager.getKeywordAttributes(), " extends "); // <- Groovy keyword
|
||||
|
||||
for (int j = 0; j < refs.length; j++) {
|
||||
new JavaDocInfoGenerator(typeParameterOwner.getProject(), null, false)
|
||||
JavaDocInfoGeneratorFactory.create(typeParameterOwner.getProject(), null)
|
||||
.generateType(buffer, refs[j], typeParameterOwner, false, true);
|
||||
|
||||
if (j < refs.length - 1) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.OPERATION_SIGN, " & ");
|
||||
appendStyledSpan(buffer, highlightingManager.getOperationSignAttributes(), " & ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (i < params.length - 1) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.COMMA, ", ");
|
||||
appendStyledSpan(buffer, highlightingManager.getCommaAttributes(), ", ");
|
||||
}
|
||||
}
|
||||
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.OPERATION_SIGN, ">");
|
||||
appendStyledSpan(buffer, highlightingManager.getOperationSignAttributes(), ">");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -282,53 +400,62 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
|
||||
PsiClass parentClass = method.getContainingClass();
|
||||
|
||||
JavaDocInfoGenerator docInfoGenerator = JavaDocInfoGeneratorFactory.create(
|
||||
method.getProject(), null, JavaDocHighlightingManagerImpl.getInstance(), false, doSyntaxHighlighting());
|
||||
|
||||
JavaDocHighlightingManagerImpl highlightingManager = JavaDocHighlightingManagerImpl.getInstance();
|
||||
|
||||
if (parentClass != null && !(parentClass instanceof PsiAnonymousClass)) {
|
||||
if (method.isConstructor()) {
|
||||
generateOrderEntryAndPackageInfo(buffer, parentClass);
|
||||
}
|
||||
|
||||
appendStyledSpan(
|
||||
buffer, JavaDocInfoGenerator.getClassTextAttributes(parentClass), JavaDocUtil.getShortestClassName(parentClass, method));
|
||||
buffer,
|
||||
highlightingManager.getClassDeclarationAttributes(parentClass),
|
||||
JavaDocUtil.getShortestClassName(parentClass, method)
|
||||
);
|
||||
newLine(buffer);
|
||||
}
|
||||
|
||||
JavaDocInfoGenerator.generateTooltipAnnotations(method, buffer);
|
||||
docInfoGenerator.generateTooltipAnnotations(method, buffer);
|
||||
generateModifiers(buffer, method);
|
||||
|
||||
generateTypeParameters(method, buffer);
|
||||
|
||||
if (method.getReturnType() != null) {
|
||||
new JavaDocInfoGenerator(method.getProject(), null, false)
|
||||
.generateType(buffer, substitutor.substitute(method.getReturnType()), method, false, true);
|
||||
generateTypeParameters(method, buffer, highlightingManager);
|
||||
if (method.hasTypeParameters()) {
|
||||
buffer.append(" ");
|
||||
}
|
||||
|
||||
appendStyledSpan(buffer, JavaDocInfoGenerator.getMethodDeclarationTextAttributes(method), method.getName());
|
||||
if (method.getReturnType() != null) {
|
||||
docInfoGenerator.generateType(buffer, substitutor.substitute(method.getReturnType()), method, false, true);
|
||||
buffer.append(" ");
|
||||
}
|
||||
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.PARENTHESES, "(");
|
||||
appendStyledSpan(buffer, highlightingManager.getMethodDeclarationAttributes(method), method.getName());
|
||||
|
||||
appendStyledSpan(buffer, highlightingManager.getParenthesesAttributes(), "(");
|
||||
PsiParameter[] params = method.getParameterList().getParameters();
|
||||
for (int i = 0; i < params.length; i++) {
|
||||
PsiParameter param = params[i];
|
||||
new JavaDocInfoGenerator(method.getProject(), null, false)
|
||||
.generateType(buffer, substitutor.substitute(param.getType()), method, false, true);
|
||||
docInfoGenerator.generateType(buffer, substitutor.substitute(param.getType()), method, false, true);
|
||||
buffer.append(" ");
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.PARAMETER_ATTRIBUTES, param.getName());
|
||||
appendStyledSpan(buffer, highlightingManager.getParameterAttributes(), param.getName());
|
||||
if (i < params.length - 1) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.COMMA, ", ");
|
||||
appendStyledSpan(buffer, highlightingManager.getCommaAttributes(), ", ");
|
||||
}
|
||||
}
|
||||
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.PARENTHESES, ")");
|
||||
appendStyledSpan(buffer, highlightingManager.getParenthesesAttributes(), ")");
|
||||
|
||||
PsiClassType[] refs = method.getThrowsList().getReferencedTypes();
|
||||
if (refs.length > 0) {
|
||||
newLine(buffer);
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.KEYWORD, " throws ");
|
||||
appendStyledSpan(buffer, highlightingManager.getKeywordAttributes(), " throws ");
|
||||
for (int i = 0; i < refs.length; i++) {
|
||||
PsiClass throwsClass = refs[i].resolve();
|
||||
|
||||
if (throwsClass != null) {
|
||||
appendStyledSpan(buffer, JavaDocInfoGenerator.getClassTextAttributes(throwsClass),
|
||||
appendStyledSpan(buffer, highlightingManager.getClassDeclarationAttributes(throwsClass),
|
||||
JavaDocUtil.getShortestClassName(throwsClass, method));
|
||||
}
|
||||
else {
|
||||
@@ -336,7 +463,7 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
}
|
||||
|
||||
if (i < refs.length - 1) {
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.COMMA, ", ");
|
||||
appendStyledSpan(buffer, highlightingManager.getCommaAttributes(), ", ");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -350,17 +477,22 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
|
||||
if (parentClass != null && !(parentClass instanceof PsiAnonymousClass)) {
|
||||
appendStyledSpan(
|
||||
buffer, JavaDocInfoGenerator.getClassTextAttributes(parentClass), JavaDocUtil.getShortestClassName(parentClass, field));
|
||||
buffer,
|
||||
JavaDocHighlightingManagerImpl.getInstance().getClassDeclarationAttributes(parentClass),
|
||||
JavaDocUtil.getShortestClassName(parentClass, field)
|
||||
);
|
||||
newLine(buffer);
|
||||
}
|
||||
|
||||
JavaDocInfoGenerator.generateTooltipAnnotations(field, buffer);
|
||||
JavaDocInfoGenerator docInfoGenerator = JavaDocInfoGeneratorFactory.create(
|
||||
field.getProject(), null, JavaDocHighlightingManagerImpl.getInstance(), false, doSyntaxHighlighting());
|
||||
|
||||
docInfoGenerator.generateTooltipAnnotations(field, buffer);
|
||||
generateModifiers(buffer, field);
|
||||
|
||||
new JavaDocInfoGenerator(field.getProject(), null, false)
|
||||
.generateType(buffer, substitutor.substitute(field.getType()), field, false, true);
|
||||
docInfoGenerator.generateType(buffer, substitutor.substitute(field.getType()), field, false, true);
|
||||
buffer.append(" ");
|
||||
appendStyledSpan(buffer, JavaDocInfoGenerator.getFieldTextAttributes(field), field.getName());
|
||||
appendStyledSpan(buffer, JavaDocHighlightingManagerImpl.getInstance().getFieldDeclarationAttributes(field), field.getName());
|
||||
|
||||
generateInitializer(buffer, field);
|
||||
|
||||
@@ -373,12 +505,12 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
|
||||
generateModifiers(buffer, variable);
|
||||
|
||||
new JavaDocInfoGenerator(variable.getProject(), null, false)
|
||||
JavaDocInfoGeneratorFactory.create(variable.getProject(), null)
|
||||
.generateType(buffer, variable.getType(), variable, false, true);
|
||||
|
||||
buffer.append(" ");
|
||||
|
||||
appendStyledSpan(buffer, JavaHighlightingColors.LOCAL_VARIABLE_ATTRIBUTES, variable.getName());
|
||||
appendStyledSpan(buffer, JavaDocHighlightingManagerImpl.getInstance().getLocalVariableAttributes(), variable.getName());
|
||||
generateInitializer(buffer, variable);
|
||||
|
||||
return buffer.toString();
|
||||
@@ -391,9 +523,9 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
VirtualFile file = PsiImplUtil.getModuleVirtualFile(module);
|
||||
generateOrderEntryInfo(sb, file, module.getProject());
|
||||
|
||||
appendStyledSpan(sb, JavaHighlightingColors.KEYWORD, PsiKeyword.MODULE);
|
||||
appendStyledSpan(sb, JavaDocHighlightingManagerImpl.getInstance().getKeywordAttributes(), PsiKeyword.MODULE);
|
||||
sb.append(' ');
|
||||
appendStyledSpan(sb, JavaHighlightingColors.CLASS_NAME_ATTRIBUTES, module.getName());
|
||||
appendStyledSpan(sb, JavaDocHighlightingManagerImpl.getInstance().getClassNameAttributes(), module.getName());
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
@@ -595,7 +727,8 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
public @Nls @Nullable String generateRenderedDoc(@NotNull PsiDocCommentBase comment) {
|
||||
PsiElement target = comment.getOwner();
|
||||
if (target == null) target = comment;
|
||||
JavaDocInfoGenerator generator = JavaDocInfoGeneratorFactory.create(target.getProject(), target, true);
|
||||
JavaDocInfoGenerator generator =
|
||||
JavaDocInfoGeneratorFactory.create(target.getProject(), target, JavaDocHighlightingManagerImpl.getInstance(), true, doSyntaxHighlighting());
|
||||
return JavaDocExternalFilter.filterInternalDocInfo(generator.generateRenderedDocInfo());
|
||||
}
|
||||
|
||||
@@ -656,7 +789,7 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
|
||||
@Nullable
|
||||
public static String generateExternalJavadoc(@NotNull final PsiElement element, @Nullable List<String> docURLs) {
|
||||
final JavaDocInfoGenerator javaDocInfoGenerator = JavaDocInfoGeneratorFactory.create(element.getProject(), element, false);
|
||||
final JavaDocInfoGenerator javaDocInfoGenerator = JavaDocInfoGeneratorFactory.create(element.getProject(), element);
|
||||
return generateExternalJavadoc(javaDocInfoGenerator, docURLs);
|
||||
}
|
||||
|
||||
|
||||
@@ -26,4 +26,4 @@
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="bottom"><icon src="AllIcons.Nodes.PpLibFolder"/> myLib</div><div class="bottom"><a href="placeholder">`genericMethod(Class<?>)` on localhost<icon src='AllIcons.Ide.External_link_arrow'></a></div>
|
||||
</div><div class="bottom"><icon src="AllIcons.Nodes.Class"/> <a href="psi_element://com.jetbrains.GenericClass"><code><span style="color:#000000;">com.jetbrains.GenericClass</span></code></a><br/><icon src="AllIcons.Nodes.PpLibFolder"/> myLib</div><div class="bottom"><a href="placeholder">`genericMethod(Class<?>)` on localhost<icon src='AllIcons.Ide.External_link_arrow'></a></div>
|
||||
@@ -19,4 +19,4 @@
|
||||
<div class="block"><a href="psi_element://com.jetbrains.LinkBetweenMethods#m2()"><code>m2()</code></a></div>
|
||||
</li>
|
||||
</ul>
|
||||
</div><div class="bottom"><icon src="AllIcons.Nodes.PpLibFolder"/> myLib</div><div class="bottom"><a href="placeholder">`m1()` on localhost<icon src='AllIcons.Ide.External_link_arrow'></a></div>
|
||||
</div><div class="bottom"><icon src="AllIcons.Nodes.Class"/> <a href="psi_element://com.jetbrains.LinkBetweenMethods"><code><span style="color:#000000;">com.jetbrains.LinkBetweenMethods</span></code></a><br/><icon src="AllIcons.Nodes.PpLibFolder"/> myLib</div><div class="bottom"><a href="placeholder">`m1()` on localhost<icon src='AllIcons.Ide.External_link_arrow'></a></div>
|
||||
+1
-1
@@ -24,4 +24,4 @@
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="bottom"><icon src="AllIcons.Nodes.PpLibFolder"/> myLib</div><div class="bottom"><a href="placeholder">`SimpleInterface` on localhost<icon src='AllIcons.Ide.External_link_arrow'></a></div>
|
||||
</div><div class="bottom"><icon src="AllIcons.Nodes.Package"/> <a href="psi_element://com.jetbrains"><code><span style="color:#000000;">com.jetbrains</span></code></a><br/><icon src="AllIcons.Nodes.PpLibFolder"/> myLib</div><div class="bottom"><a href="placeholder">`SimpleInterface` on localhost<icon src='AllIcons.Ide.External_link_arrow'></a></div>
|
||||
@@ -32,4 +32,4 @@ extends java.lang.Object</pre>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div><div class="bottom"><icon src="AllIcons.Nodes.PpLibFolder"/> myLib</div><div class="bottom"><a href="placeholder">`ClassWithRefLink` on localhost<icon src='AllIcons.Ide.External_link_arrow'></a></div>
|
||||
</div><div class="bottom"><icon src="AllIcons.Nodes.Package"/> <a href="psi_element://com.jetbrains"><code><span style="color:#000000;">com.jetbrains</span></code></a><br/><icon src="AllIcons.Nodes.PpLibFolder"/> myLib</div><div class="bottom"><a href="placeholder">`ClassWithRefLink` on localhost<icon src='AllIcons.Ide.External_link_arrow'></a></div>
|
||||
+1
-1
@@ -26,4 +26,4 @@
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="bottom"><icon src="AllIcons.Nodes.PpLibFolder"/> myLib</div><div class="bottom"><a href="placeholder">`param()` on localhost<icon src='AllIcons.Ide.External_link_arrow'></a></div>
|
||||
</div><div class="bottom"><icon src="AllIcons.Nodes.Class"/> <a href="psi_element://com.jetbrains.TestAnnotation"><code><span style="color:#000000;">com.jetbrains.TestAnnotation</span></code></a><br/><icon src="AllIcons.Nodes.PpLibFolder"/> myLib</div><div class="bottom"><a href="placeholder">`param()` on localhost<icon src='AllIcons.Ide.External_link_arrow'></a></div>
|
||||
@@ -1,3 +1,3 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><font color=red>@</font>
|
||||
<span style="color:#808000;">@</span><a href="psi_element://java.lang.Deprecated"><code style='font-size:96%;'><span style="color:#808000;">Deprecated</span></code></a>
|
||||
<span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#660e7a;font-weight:bold;">field</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">null</span><br><span class='grayed'>defined in </span><a href="psi_element://Test"><code><span style="color:#000000;">Test</span></code></a></pre></div><table class='sections'></table>
|
||||
<span style="color:#808000;">@</span><a href="psi_element://java.lang.Deprecated"><code><span style="color:#808000;">Deprecated</span></code></a>
|
||||
<span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#660e7a;font-weight:bold;">field</span> <span style="">= </span><span style="color:#000080;font-weight:bold;">null</span></pre></div><table class='sections'></table>
|
||||
@@ -1,2 +1,2 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">foo</span><span style="">(</span><span style="color:#808000;">@</span><a href="psi_element://java.lang.Deprecated"><code style='font-size:96%;'><span style="color:#808000;">Deprecated</span></code></a> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="">s</span><span style="">,
|
||||
</span> <span style="color:#808000;">@</span><a href="psi_element://java.lang.Deprecated"><code style='font-size:96%;'><span style="color:#808000;">Deprecated</span></code></a> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="">p</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://Test"><code><span style="color:#000000;">Test</span></code></a></pre></div><table class='sections'><p></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">foo</span><span style="">(</span><br> <span style="color:#808000;">@</span><a href="psi_element://java.lang.Deprecated"><code><span style="color:#808000;">Deprecated</span></code></a> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="">s</span><span style="">,</span>
|
||||
<span style="color:#808000;">@</span><a href="psi_element://java.lang.Deprecated"><code><span style="color:#808000;">Deprecated</span></code></a> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="">p</span><br><span style="">)</span></pre></div><table class='sections'><p></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">foo</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://Test"><code><span style="color:#000000;">Test</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>API Note:</td><td valign='top'><p> my api note </td><tr><td valign='top' class='section'><p>Implementation<br>Requirements:</td><td valign='top'><p> my impl spec </td><tr><td valign='top' class='section'><p>Implementation<br>Note:</td><td valign='top'><p> my impl note</td></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">foo</span><span style="">(</span><span style="">)</span></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>API Note:</td><td valign='top'><p> my api note </td><tr><td valign='top' class='section'><p>Implementation<br>Requirements:</td><td valign='top'><p> my impl spec </td><tr><td valign='top' class='section'><p>Implementation<br>Note:</td><td valign='top'><p> my impl note</td></table>
|
||||
@@ -1,2 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">MethodTypeParam</span><span style=""><</span><span style="color:#20999d;">T</span><span style="">></span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Type parameters:</td><td valign='top'><<span style="color:#20999d;">T</span>> – type param</td></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">MethodTypeParam</span><span style=""><</span><span style="color:#20999d;">T</span><span style="">></span></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Type parameters:</td><td valign='top'><<span style="color:#20999d;">T</span>> – type param</td></table>
|
||||
@@ -1 +1 @@
|
||||
[< java 1.7 >] <a href="psi_element://java.util">java.util</a><br/> <span style="color:#000080;font-weight:bold;">public</span> <span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">ArrayList</span><span style=""><</span>E<span style="">></span><span style="color:#000080;font-weight:bold;"> extends </span><span style="color:#000000;"><a href="psi_element://java.util.AbstractList">AbstractList</a></span><span style=""><</span><span style="color:#20999d;">E</span><span style="">></span><br/> <span style="color:#000080;font-weight:bold;">implements </span><span style="color:#000000;"><a href="psi_element://java.util.List">List</a></span><span style=""><</span><span style="color:#20999d;">E</span><span style="">></span><span style="">, </span><span style="color:#000000;"><a href="psi_element://java.util.RandomAccess">RandomAccess</a></span><span style="">, </span><span style="color:#000000;"><a href="psi_element://java.lang.Cloneable">Cloneable</a></span><span style="">, </span><span style="color:#000000;"><a href="psi_element://java.io.Serializable">Serializable</a></span>
|
||||
<span style="color: #909090">[< java 1.7 >] </span>java.util<br/> <span style="color:#000080;font-weight:bold;">public</span> <span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">ArrayList</span><span style=""><</span><span style="color:#20999d;">E</span><span style="">></span><span style="color:#000080;font-weight:bold;"> extends </span><span style="color:#000000;"><a href="psi_element://java.util.AbstractList">AbstractList</a></span><span style=""><</span><span style="color:#20999d;">E</span><span style="">></span><br/> <span style="color:#000080;font-weight:bold;">implements </span><span style="color:#000000;"><a href="psi_element://java.util.List">List</a></span><span style=""><</span><span style="color:#20999d;">E</span><span style="">></span><span style="">, </span><span style="color:#000000;"><a href="psi_element://java.util.RandomAccess">RandomAccess</a></span><span style="">, </span><span style="color:#000000;"><a href="psi_element://java.lang.Cloneable">Cloneable</a></span><span style="">, </span><span style="color:#000000;"><a href="psi_element://java.io.Serializable">Serializable</a></span>
|
||||
@@ -1,3 +1,2 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#808000;">@</span><a href="psi_element://Bar"><code style='font-size:96%;'><span style="color:#808000;">Bar</span></code></a><span style="">(</span><a href="psi_element://Baz#CONST"><code style='font-size:96%;'><span style="color:#000000;">Baz</span><span style="">.</span><span style="color:#660e7a;font-style:italic;">CONST</span></code></a><span style="">, </span><span style="">value</span><span style=""> = </span><span style="">{</span><a href="psi_element://Baz#CONST"><code style='font-size:96%;'><span style="color:#000000;">Baz</span><span style="">.</span><span style="color:#660e7a;font-style:italic;">CONST</span></code></a><span style="">}</span><span style="">)</span>
|
||||
<span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Foo</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#808000;">@</span><a href="psi_element://Bar"><code><span style="color:#808000;">Bar</span></code></a><span style="">(</span><a href="psi_element://Baz#CONST"><code><span style="color:#000000;">Baz</span><span style="">.</span><span style="color:#660e7a;font-style:italic;">CONST</span></code></a><span style="">, </span><span style="">value</span><span style=""> = </span><span style="">{</span><a href="psi_element://Baz#CONST"><code><span style="color:#000000;">Baz</span><span style="">.</span><span style="color:#660e7a;font-style:italic;">CONST</span></code></a><span style="">}</span><span style="">)</span>
|
||||
<span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Foo</span></pre></div><table class='sections'></table>
|
||||
@@ -1,4 +1,4 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;font-weight:bold;">foo</span><br><span class='grayed'>defined in </span><a href="psi_element://Foo"><code><span style="color:#000000;">Foo</span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;font-weight:bold;">foo</span></pre></div><div class='content'>
|
||||
<pre>
|
||||
<code><span style=""><span style="color:#000080;font-weight:bold;">class </span><span style="">Clazzz {</span><span style="">  def f[U](u: U) {}</span><span style=""></span><span style="">  val a = </span><span style="color:#0000ff;">1</span><span style="">}</span></span></code>
|
||||
</pre>
|
||||
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#660e7a;font-weight:bold;">field</span><span style=""> = </span><span style="color:#000000;">foo</span><span style="">(</span><span style="color:#008000;font-weight:bold;">""</span><span style="">, </span><span style="color:#008000;font-weight:bold;">""</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://Test"><code><span style="color:#000000;">Test</span></code></a></pre></div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#660e7a;font-weight:bold;">field</span> <span style="">= </span><span style="color:#000000;">foo</span><span style="">(</span><span style="color:#008000;font-weight:bold;">""</span><span style="">, </span><span style="color:#008000;font-weight:bold;">""</span><span style="">)</span></pre></div><table class='sections'></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static final</span> <span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;">field</span><span style=""> = </span><span style="color:#0000ff;">1 </span><span style="">+ </span><span style="color:#0000ff;">1</span><span class='grayed'><span style=""> = </span><span style="color:#0000ff;">2</span></span><br><span class='grayed'>defined in </span><a href="psi_element://Test"><code><span style="color:#000000;">Test</span></code></a></pre></div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static final</span> <span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;">field</span> <span style="">= </span><span style="color:#0000ff;">1 </span><span style="">+ </span><span style="color:#0000ff;">1</span><span class='grayed'><span style=""> = </span><span style="color:#0000ff;">2</span></span></pre></div><table class='sections'></table>
|
||||
@@ -1,3 +1,3 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#000000;">getMyFoo</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://FooBar"><code><span style="color:#000000;">FooBar</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>From field:</td><td valign='top'><p><a href="psi_element://FooBar#myFoo"><code><span style="color:#660e7a;font-weight:bold;">myFoo</span></code></a><br>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#000000;">getMyFoo</span><span style="">(</span><span style="">)</span></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>From field:</td><td valign='top'><p><a href="psi_element://FooBar#myFoo"><code><span style="color:#660e7a;font-weight:bold;">myFoo</span></code></a><br>
|
||||
foo bar baz
|
||||
</td></table>
|
||||
</td></table><div class="bottom-no-content"><icon src="AllIcons.Nodes.Class"/> <a href="psi_element://FooBar"><code><span style="color:#000000;">FooBar</span></code></a><br/></div>
|
||||
+1
-2
@@ -1,6 +1,5 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public final</span> <span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">String</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a>
|
||||
<span style="color:#000080;font-weight:bold;">implements </span><a href="psi_element://java.io.Serializable"><code><span style="color:#000000;">java.io.Serializable</span></code></a><span style="">,</span> <a href="psi_element://java.lang.Comparable"><code><span style="color:#000000;">Comparable</span></code></a><span style=""><</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span><span style="">,</span> <a href="psi_element://java.lang.CharSequence"><code><span style="color:#000000;">CharSequence</span></code></a><br><span class='grayed'>defined in </span><a href="psi_element://java.lang"><code><span style="color:#000000;">java.lang</span></code></a></pre></div><div class='content'>
|
||||
<span style="color:#000080;font-weight:bold;">implements</span> <a href="psi_element://java.io.Serializable"><code><span style="color:#000000;">java.io.Serializable</span></code></a><span style="">,</span> <a href="psi_element://java.lang.Comparable"><code><span style="color:#000000;">Comparable</span></code></a><span style=""><</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span><span style="">,</span> <a href="psi_element://java.lang.CharSequence"><code><span style="color:#000000;">CharSequence</span></code></a></pre></div><div class='content'>
|
||||
The <code>String</code> class represents character strings. All
|
||||
string literals in Java programs, such as <code>"abc"</code>, are
|
||||
implemented as instances of this class.
|
||||
|
||||
+3
-3
@@ -1,8 +1,8 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><code style='font-size:96%;'><span style="color:#808000;">Contract</span></code></a><span style="">(</span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span>
|
||||
<span style="color:#000080;font-weight:bold;">public abstract</span> <span style="color:#000080;font-weight:bold;">boolean</span> <span style="color:#000000;">contains</span><span style="">(</span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="">o</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://java.util.List"><code><span style="color:#000000;">java.util.List<span style=""><</span><span style="color:#20999d;">E</span><span style="">></span></span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><code><span style="color:#808000;">Contract</span></code></a><span style="">(</span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span>
|
||||
<span style="color:#000080;font-weight:bold;">public abstract</span> <span style="color:#000080;font-weight:bold;">boolean</span> <span style="color:#000000;">contains</span><span style="">(</span><br> <a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="">o</span><br><span style="">)</span></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
|
||||
at least one element <tt>e</tt> such that
|
||||
<tt>(o==null ? e==null : o.equals(e))</tt>.
|
||||
|
||||
</div><table class='sections'><tr><td valign='top' class='section'><p>Overrides:</td><td valign='top'><p><a href="psi_element://java.util.Collection#contains(java.lang.Object)"><code><span style="color:#000000;">contains</span></code></a> in interface <a href="psi_element://java.util.Collection"><code><span style="color:#000000;">Collection</span></code></a></td><tr><td valign='top' class='section'><p>Params:</td><td valign='top'><span style="">o</span> – element whose presence in this list is to be tested </td><tr><td valign='top' class='section'><p>Returns:</td><td valign='top'><p><tt>true</tt> if this list contains the specified element </td><tr><td valign='top' class='section'><p>Throws:</td><td valign='top'><p><a href="psi_element://java.lang.ClassCastException"><code><span style="color:#000000;">ClassCastException</span></code></a> – if the type of the specified element is incompatible with this list (<a href="psi_element://java.util.Collection###optional-restrictions">optional</a>) <p><a href="psi_element://java.lang.NullPointerException"><code><span style="color:#000000;">NullPointerException</span></code></a> – if the specified element is null and this list does not permit null elements (<a href="psi_element://java.util.Collection###optional-restrictions">optional</a>)</td><tr><td valign='top' class='section'><p>External<br> annotations:</td><td valign='top'><p><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><span style="color:#808000;">org.jetbrains.annotations.Contract</span></a><span style="">(</span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></td></table><div class="bottom"><icon src="AllIcons.Nodes.PpLibFolder"/> < java 1.7 ></div>
|
||||
</div><table class='sections'><tr><td valign='top' class='section'><p>Overrides:</td><td valign='top'><p><a href="psi_element://java.util.Collection#contains(java.lang.Object)"><code><span style="color:#000000;">contains</span></code></a> in interface <a href="psi_element://java.util.Collection"><code><span style="color:#000000;">Collection</span></code></a></td><tr><td valign='top' class='section'><p>Params:</td><td valign='top'><span style="">o</span> – element whose presence in this list is to be tested </td><tr><td valign='top' class='section'><p>Returns:</td><td valign='top'><p><tt>true</tt> if this list contains the specified element </td><tr><td valign='top' class='section'><p>Throws:</td><td valign='top'><p><a href="psi_element://java.lang.ClassCastException"><code><span style="color:#000000;">ClassCastException</span></code></a> – if the type of the specified element is incompatible with this list (<a href="psi_element://java.util.Collection###optional-restrictions">optional</a>) <p><a href="psi_element://java.lang.NullPointerException"><code><span style="color:#000000;">NullPointerException</span></code></a> – if the specified element is null and this list does not permit null elements (<a href="psi_element://java.util.Collection###optional-restrictions">optional</a>)</td><tr><td valign='top' class='section'><p>External<br> annotations:</td><td valign='top'><p><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><span style="color:#808000;">org.jetbrains.annotations.Contract</span></a><span style="">(</span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></td></table><div class="bottom"><icon src="AllIcons.Nodes.Class"/> <a href="psi_element://java.util.List"><code><span style="color:#000000;">java.util.List</span><span style=""><</span><span style="color:#20999d;">E</span><span style="">></span></code></a><br/><icon src="AllIcons.Nodes.PpLibFolder"/> < java 1.7 ></div>
|
||||
+3
-3
@@ -1,8 +1,8 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><i><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><code style='font-size:96%;'><span style="color:#808000;">Contract</span></code></a><span style="">(</span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></i>
|
||||
<span style="color:#000080;font-weight:bold;">boolean</span> <span style="color:#000000;">contains</span><span style="">(</span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="">o</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://My"><code><span style="color:#000000;">My</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>From interface:</td><td valign='top'><p><a href="psi_element://java.util.Collection"><code><span style="color:#000000;">java.util.Collection</span></code></a><br>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><i><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><code><span style="color:#808000;">Contract</span></code></a><span style="">(</span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></i>
|
||||
<span style="color:#000080;font-weight:bold;">boolean</span> <span style="color:#000000;">contains</span><span style="">(</span><br> <a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="">o</span><br><span style="">)</span></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>From interface:</td><td valign='top'><p><a href="psi_element://java.util.Collection"><code><span style="color:#000000;">java.util.Collection</span></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
|
||||
contains at least one element <tt>e</tt> such that
|
||||
<tt>(o==null ? e==null : o.equals(e))</tt>.
|
||||
|
||||
</td><tr><td valign='top' class='section'><p>Overrides:</td><td valign='top'><p><a href="psi_element://java.util.Collection#contains(java.lang.Object)"><code><span style="color:#000000;">contains</span></code></a> in interface <a href="psi_element://java.util.Collection"><code><span style="color:#000000;">Collection</span></code></a><br><a href="psi_element://I#contains(java.lang.Object)"><code><span style="color:#000000;">contains</span></code></a> in interface <a href="psi_element://I"><code><span style="color:#000000;">I</span></code></a></td><tr><td valign='top' class='section'><p>Params:</td><td valign='top'><span style="">o</span> – element whose presence in this collection is to be tested </td><tr><td valign='top' class='section'><p>Returns:</td><td valign='top'><p><tt>true</tt> if this collection contains the specified element </td><tr><td valign='top' class='section'><p>Throws:</td><td valign='top'><p><a href="psi_element://java.lang.ClassCastException"><code><span style="color:#000000;">ClassCastException</span></code></a> – if the type of the specified element is incompatible with this collection (<a href="psi_element://My###optional-restrictions">optional</a>) <p><a href="psi_element://java.lang.NullPointerException"><code><span style="color:#000000;">NullPointerException</span></code></a> – if the specified element is null and this collection does not permit null elements (<a href="psi_element://My###optional-restrictions">optional</a>)</td><tr><td valign='top' class='section'><p><i>Inferred</i><br> annotations:</td><td valign='top'><p><i><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><span style="color:#808000;">org.jetbrains.annotations.Contract</span></a><span style="">(</span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></i></td></table>
|
||||
</td><tr><td valign='top' class='section'><p>Overrides:</td><td valign='top'><p><a href="psi_element://java.util.Collection#contains(java.lang.Object)"><code><span style="color:#000000;">contains</span></code></a> in interface <a href="psi_element://java.util.Collection"><code><span style="color:#000000;">Collection</span></code></a><br><a href="psi_element://I#contains(java.lang.Object)"><code><span style="color:#000000;">contains</span></code></a> in interface <a href="psi_element://I"><code><span style="color:#000000;">I</span></code></a></td><tr><td valign='top' class='section'><p>Params:</td><td valign='top'><span style="">o</span> – element whose presence in this collection is to be tested </td><tr><td valign='top' class='section'><p>Returns:</td><td valign='top'><p><tt>true</tt> if this collection contains the specified element </td><tr><td valign='top' class='section'><p>Throws:</td><td valign='top'><p><a href="psi_element://java.lang.ClassCastException"><code><span style="color:#000000;">ClassCastException</span></code></a> – if the type of the specified element is incompatible with this collection (<a href="psi_element://My###optional-restrictions">optional</a>) <p><a href="psi_element://java.lang.NullPointerException"><code><span style="color:#000000;">NullPointerException</span></code></a> – if the specified element is null and this collection does not permit null elements (<a href="psi_element://My###optional-restrictions">optional</a>)</td><tr><td valign='top' class='section'><p><i>Inferred</i><br> annotations:</td><td valign='top'><p><i><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><span style="color:#808000;">org.jetbrains.annotations.Contract</span></a><span style="">(</span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></i></td></table><div class="bottom-no-content"><icon src="AllIcons.Nodes.Class"/> <a href="psi_element://My"><code><span style="color:#000000;">My</span></code></a><br/></div>
|
||||
@@ -1,4 +1,3 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">C</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">C</span></pre></div><div class='content'>
|
||||
a << b
|
||||
</div><table class='sections'><p></table>
|
||||
@@ -1,5 +1,4 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">C</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span>java.lang.Object</pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">C</span></pre></div><div class='content'>
|
||||
some text
|
||||
|
||||
</div><table class='sections'><p><tr><td valign='top' class='section'><p>See Also:</td><td valign='top'><p>System.out</td></table>
|
||||
@@ -1,2 +1,2 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://E"><code><span style="color:#000000;">E</span></code></a> <span style="color:#660e7a;">A</span><br><span class='grayed'>defined in </span><a href="psi_element://E"><code><span style="color:#000000;">E</span></code></a>
|
||||
<span class='grayed'>Enum constant ordinal: 0</span></pre></div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><a href="psi_element://E"><code><span style="color:#000000;">E</span></code></a> <span style="color:#660e7a;">A</span>
|
||||
<span class='grayed'>// Enum constant ordinal: 0</span></pre></div><table class='sections'></table>
|
||||
@@ -1 +1 @@
|
||||
<span style="color:#000000;"><a href="psi_element://E">E</a></span><br/> <span style="color:#000000;"><a href="psi_element://E">E</a></span> <span style="color:#660e7a;">A</span><br/><span class='grayed'>Enum constant ordinal: 0</span>
|
||||
<span style="color:#000000;"><a href="psi_element://E">E</a></span><br/> <span style="color:#000000;"><a href="psi_element://E">E</a></span> <span style="color:#660e7a;">A</span><br/><span class='grayed'>// Enum constant ordinal: 0</span>
|
||||
@@ -1,4 +1,4 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><i><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><code style='font-size:96%;'><span style="color:#808000;">Contract</span></code></a><span style="">(</span><span style="">value</span><span style=""> = </span><span style="color:#008000;font-weight:bold;">"_ -> param1"</span><span style="">, </span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></i>
|
||||
<span style="color:#000080;font-weight:bold;">static</span> <span style="color:#000080;font-weight:bold;">int</span> <span style="color:#000000;">valueOf</span><span style="">(</span><span style="color:#000080;font-weight:bold;">int</span> <span style="">i</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://En"><code><span style="color:#000000;">En</span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><i><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><code><span style="color:#808000;">Contract</span></code></a><span style="">(</span><span style="">value</span><span style=""> = </span><span style="color:#008000;font-weight:bold;">"_ -> param1"</span><span style="">, </span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></i>
|
||||
<span style="color:#000080;font-weight:bold;">static</span> <span style="color:#000080;font-weight:bold;">int</span> <span style="color:#000000;">valueOf</span><span style="">(</span><br> <span style="color:#000080;font-weight:bold;">int</span> <span style="">i</span><br><span style="">)</span></pre></div><div class='content'>
|
||||
myjavadoc
|
||||
</div><table class='sections'><tr><td valign='top' class='section'><p>Params:</td><td valign='top'><span style="">i</span> – </td><tr><td valign='top' class='section'><p>Returns:</td><td valign='top'><p></td><tr><td valign='top' class='section'><p><i>Inferred</i><br> annotations:</td><td valign='top'><p><i><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><span style="color:#808000;">org.jetbrains.annotations.Contract</span></a><span style="">(</span><span style="">value</span><span style=""> = </span><span style="color:#008000;font-weight:bold;">"_ -> param1"</span><span style="">, </span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></i></td></table>
|
||||
</div><table class='sections'><tr><td valign='top' class='section'><p>Params:</td><td valign='top'><span style="">i</span></td><tr><td valign='top' class='section'><p>Returns:</td><td valign='top'><p></td><tr><td valign='top' class='section'><p><i>Inferred</i><br> annotations:</td><td valign='top'><p><i><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><span style="color:#808000;">org.jetbrains.annotations.Contract</span></a><span style="">(</span><span style="">value</span><span style=""> = </span><span style="color:#008000;font-weight:bold;">"_ -> param1"</span><span style="">, </span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></i></td></table>
|
||||
@@ -1,4 +1,3 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Pattern</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Pattern</span></pre></div><div class='content'>
|
||||
\W \n
|
||||
</div><table class='sections'><p></table>
|
||||
@@ -1,3 +1,3 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;font-weight:bold;">foo</span><br><span class='grayed'>defined in </span><a href="psi_element://Foo"><code><span style="color:#000000;">Foo</span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;font-weight:bold;">foo</span></pre></div><div class='content'>
|
||||
&gt; is > &lt; is < &quot; is "
|
||||
</div><table class='sections'><p></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">JAVADOC_ME</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></pre></div><div class='content'> The value of B is <a href="psi_element://A#B">"a<b"</a>. </div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">JAVADOC_ME</span><span style="">(</span><span style="">)</span></pre></div><div class='content'> The value of B is <a href="psi_element://A#B">"a<b"</a>. </div><table class='sections'></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">int</span><span style="">[]</span> <span style="color:#660e7a;font-style:italic;">x</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">new </span><span style="color:#000080;font-weight:bold;">int</span><span style="">[]</span><span style="">{</span><span style="color:#0000ff;">1</span><span style="">, </span><span style="color:#0000ff;">2</span><span style="">, </span><span style="color:#0000ff;">3</span><span style="">}</span><br><span class='grayed'>defined in </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></pre></div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">int</span><span style="">[]</span> <span style="color:#660e7a;font-style:italic;">x</span> <span style="">= </span><span style="color:#000080;font-weight:bold;">new </span><span style="color:#000080;font-weight:bold;">int</span><span style="">[]</span><span style="">{</span><span style="color:#0000ff;">1</span><span style="">, </span><span style="color:#0000ff;">2</span><span style="">, </span><span style="color:#0000ff;">3</span><span style="">}</span></pre></div><table class='sections'></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <font color=red>java.util.function.Consumer<Integer></font> <span style="color:#660e7a;font-style:italic;">F</span><span style=""> = </span><span style="">i -> System.out.println(i)</span><br><span class='grayed'>defined in </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></pre></div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <font color=red>java.util.function.Consumer<Integer></font> <span style="color:#660e7a;font-style:italic;">F</span> <span style="">= </span><span style="">i -> System.out.println(i)</span></pre></div><table class='sections'></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">int</span><span style="">[]</span> <span style="color:#660e7a;font-style:italic;">x</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">new </span><span style="color:#000080;font-weight:bold;">int</span><span style="">[<span style="color:#0000ff;">1</span><span style="">]</span><br><span class='grayed'>defined in </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></pre></div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">int</span><span style="">[]</span> <span style="color:#660e7a;font-style:italic;">x</span> <span style="">= </span><span style="color:#000080;font-weight:bold;">new </span><span style="color:#000080;font-weight:bold;">int</span><span style="">[<span style="color:#0000ff;">1</span><span style="">]</span></pre></div><table class='sections'></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;font-style:italic;">JAVADOC_ME</span><span style=""> = </span><span style="color:#0000ff;">23</span><br><span class='grayed'>defined in </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></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><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;font-style:italic;">JAVADOC_ME</span> <span style="">= </span><span style="color:#0000ff;">23</span></pre></div><div class='content'> The value of the field is 23. </div><table class='sections'><p></table>
|
||||
@@ -1,2 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">htmlLink</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><div class='content'> <a href="psi_element://other">link</a> </div><table class='sections'><p></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">htmlLink</span></pre></div><div class='content'> <a href="psi_element://other">link</a> </div><table class='sections'><p></table>
|
||||
+1
-2
@@ -1,2 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">htmlLinkDeep</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a><br><span class='grayed'>defined in </span><a href="psi_element://pack"><code><span style="color:#000000;">pack</span></code></a></pre></div><div class='content'> <a href="psi_element://other">link</a> </div><table class='sections'><p></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">htmlLinkDeep</span></pre></div><div class='content'> <a href="psi_element://other">link</a> </div><table class='sections'><p></table>
|
||||
@@ -1,4 +1,3 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">A</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a><br><span class='grayed'>defined in </span><a href="psi_element://pack"><code><span style="color:#000000;">pack</span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">A</span></pre></div><div class='content'>
|
||||
<a href="psi_element://pack###section2">link</a>
|
||||
</div><table class='sections'><p></table>
|
||||
@@ -1,5 +1,4 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Test</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Test</span></pre></div><div class='content'>
|
||||
<a name="section1">section one</a>
|
||||
text
|
||||
<a href="psi_element://Test###section1">link up</a>
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="color:#000000;">read</span><span style="">(</span><span style="">)</span>
|
||||
<span style="color:#000080;font-weight:bold;">throws</span> <a href="psi_element://java.io.IOException"><code><span style="color:#000000;">IOException</span></code></a><br><span class='grayed'>defined in </span><a href="psi_element://Idea4780"><code><span style="color:#000000;">Idea4780</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Throws:</td><td valign='top'><p><a href="psi_element://java.io.IOException"><code><span style="color:#000000;">IOException</span></code></a> – if an I/O error occurs while reading. <p><a href="psi_element://java.io.EOFException"><code><span style="color:#000000;">EOFException</span></code></a> – 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> – if the reading thread is interrupted.</td></table>
|
||||
<span style="color:#000080;font-weight:bold;">throws</span> <a href="psi_element://java.io.IOException"><code><span style="color:#000000;">IOException</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Throws:</td><td valign='top'><p><a href="psi_element://java.io.IOException"><code><span style="color:#000000;">IOException</span></code></a> – if an I/O error occurs while reading. <p><a href="psi_element://java.io.EOFException"><code><span style="color:#000000;">EOFException</span></code></a> – 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> – if the reading thread is interrupted.</td></table>
|
||||
@@ -1,2 +1,2 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">foo</span><span style="">(</span><span style="">)</span>
|
||||
<span style="color:#000080;font-weight:bold;">throws</span> <a href="psi_element://java.io.IOException"><code><span style="color:#000000;">IOException</span></code></a><br><span class='grayed'>defined in </span><a href="psi_element://InheritedDocInThrows"><code><span style="color:#000000;">InheritedDocInThrows</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td valign='top'><p><a href="psi_element://A#foo()"><code><span style="color:#000000;">foo</span></code></a> in class <a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></td><tr><td valign='top' class='section'><p>Throws:</td><td valign='top'><p><a href="psi_element://java.io.IOException"><code><span style="color:#000000;">IOException</span></code></a> – la-la-la</td></table>
|
||||
<span style="color:#000080;font-weight:bold;">throws</span> <a href="psi_element://java.io.IOException"><code><span style="color:#000000;">IOException</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td valign='top'><p><a href="psi_element://A#foo()"><code><span style="color:#000000;">foo</span></code></a> in class <a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></td><tr><td valign='top' class='section'><p>Throws:</td><td valign='top'><p><a href="psi_element://java.io.IOException"><code><span style="color:#000000;">IOException</span></code></a> – la-la-la</td></table>
|
||||
@@ -1,2 +1,2 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">foo</span><span style="">(</span><span style="">)</span>
|
||||
<span style="color:#000080;font-weight:bold;">throws</span> <a href="psi_element://java.io.IOException"><code><span style="color:#000000;">IOException</span></code></a><br><span class='grayed'>defined in </span><a href="psi_element://InheritedDocInThrows1"><code><span style="color:#000000;">InheritedDocInThrows1</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td valign='top'><p><a href="psi_element://A#foo()"><code><span style="color:#000000;">foo</span></code></a> in class <a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></td><tr><td valign='top' class='section'><p>Throws:</td><td valign='top'><p><a href="psi_element://java.io.IOException"><code><span style="color:#000000;">IOException</span></code></a> – comment</td></table>
|
||||
<span style="color:#000080;font-weight:bold;">throws</span> <a href="psi_element://java.io.IOException"><code><span style="color:#000000;">IOException</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td valign='top'><p><a href="psi_element://A#foo()"><code><span style="color:#000000;">foo</span></code></a> in class <a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></td><tr><td valign='top' class='section'><p>Throws:</td><td valign='top'><p><a href="psi_element://java.io.IOException"><code><span style="color:#000000;">IOException</span></code></a> – comment</td></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#660e7a;font-weight:bold;">strings</span><span style=""> = </span><span style="color:#008000;font-weight:bold;">"A<BLANK>B"</span><br><span class='grayed'>defined in </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></pre></div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#660e7a;font-weight:bold;">strings</span> <span style="">= </span><span style="color:#008000;font-weight:bold;">"A<BLANK>B"</span></pre></div><table class='sections'></table>
|
||||
@@ -1 +1,2 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.util.List"><code><span style="color:#000000;">List</span></code></a><span style=""><</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span> <span style="color:#660e7a;font-weight:bold;">strings</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">new </span><a href="psi_element://java.util.ArrayList"><code><span style="color:#000000;">ArrayList</span></code></a><span style=""><</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span><span style="">(</span><span style="color:#000080;font-weight:bold;">new </span><a href="psi_element://java.util.ArrayList"><code><span style="color:#000000;">ArrayList</span></code></a><span style=""><</span><a href="psi_element://java.lang.Integer"><code><span style="color:#000000;">Integer</span></code></a><span style="">></span><span style="">(</span><span style="">)</span><span style="">, </span><span style="color:#000000;">Collections.singleton</span><span style="">(</span><span style="color:#000080;font-weight:bold;">new </span><a href="psi_element://java.util.ArrayList"><code><span style="color:#000000;">ArrayList</span></code></a><span style=""><</span><a href="psi_element://java.lang.Double"><code><span style="color:#000000;">Double</span></code></a><span style="">></span><span style="">(</span><span style="">)</span><span style="">)</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></pre></div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.util.List"><code><span style="color:#000000;">List</span></code></a><span style=""><</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span> <span style="color:#660e7a;font-weight:bold;">strings</span>
|
||||
<span style="">= </span><span style="color:#000080;font-weight:bold;">new </span><a href="psi_element://java.util.ArrayList"><code><span style="color:#000000;">ArrayList</span></code></a><span style=""><</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span><span style="">(</span><span style="color:#000080;font-weight:bold;">new </span><a href="psi_element://java.util.ArrayList"><code><span style="color:#000000;">ArrayList</span></code></a><span style=""><</span><a href="psi_element://java.lang.Integer"><code><span style="color:#000000;">Integer</span></code></a><span style="">></span><span style="">(</span><span style="">)</span><span style="">, </span><span style="color:#000000;">Collections.singleton</span><span style="">(</span><span style="color:#000080;font-weight:bold;">new </span><a href="psi_element://java.util.ArrayList"><code><span style="color:#000000;">ArrayList</span></code></a><span style=""><</span><a href="psi_element://java.lang.Double"><code><span style="color:#000000;">Double</span></code></a><span style="">></span><span style="">(</span><span style="">)</span><span style="">)</span><span style="">)</span></pre></div><table class='sections'></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;font-weight:bold;">field</span><span style=""> = </span><span style="">anotherField</span><br><span class='grayed'>defined in </span><a href="psi_element://Test"><code><span style="color:#000000;">Test</span></code></a></pre></div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;font-weight:bold;">field</span> <span style="">= </span><span style="">anotherField</span></pre></div><table class='sections'></table>
|
||||
@@ -1,2 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Test</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><div class='content'> <pre>abc</pre> </div><table class='sections'><p></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Test</span></pre></div><div class='content'> <pre>abc</pre> </div><table class='sections'><p></table>
|
||||
@@ -1,3 +1,3 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;font-weight:bold;">foo</span><br><span class='grayed'>defined in </span><a href="psi_element://Foo"><code><span style="color:#000000;">Foo</span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;font-weight:bold;">foo</span></pre></div><div class='content'>
|
||||
foo<>
|
||||
</div><table class='sections'><p></table>
|
||||
@@ -1,5 +1,4 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Foo</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Foo</span></pre></div><div class='content'>
|
||||
<pre>
|
||||
<code><span style=""><span style="">{@literal @Inject}</span><span style="color:#000080;font-weight:bold;">public class </span><span style="">Foo</span></span></code>
|
||||
</pre>
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition-only'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Foo</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition-only'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Foo</span></pre></div>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">m</span><span style="">(</span><span style="color:#000080;font-weight:bold;">int</span> <span style="">bar</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://Bar"><code><span style="color:#000000;">Bar</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td valign='top'><p><a href="psi_element://Foo#m(int)"><code><span style="color:#000000;">m</span></code></a> in class <a href="psi_element://Foo"><code><span style="color:#000000;">Foo</span></code></a></td><tr><td valign='top' class='section'><p>Params:</td><td valign='top'><span style="">bar</span> – description</td></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">m</span><span style="">(</span><br> <span style="color:#000080;font-weight:bold;">int</span> <span style="">bar</span><br><span style="">)</span></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td valign='top'><p><a href="psi_element://Foo#m(int)"><code><span style="color:#000000;">m</span></code></a> in class <a href="psi_element://Foo"><code><span style="color:#000000;">Foo</span></code></a></td><tr><td valign='top' class='section'><p>Params:</td><td valign='top'><span style="">bar</span> – description</td></table>
|
||||
+1
-1
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style=""><</span><span style="color:#20999d;">U</span><span style="">></span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">m</span><span style="">(</span><span style="color:#20999d;">U</span> <span style="">u</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://Bar"><code><span style="color:#000000;">Bar</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td valign='top'><p><a href="psi_element://Foo#m(java.lang.Object)"><code><span style="color:#000000;">m</span></code></a> in class <a href="psi_element://Foo"><code><span style="color:#000000;">Foo</span></code></a></td><tr><td valign='top' class='section'><p>Type parameters:</td><td valign='top'><<span style="color:#20999d;">U</span>> – description</td></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style=""><</span><span style="color:#20999d;">U</span><span style="">></span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">m</span><span style="">(</span><br> <span style="color:#20999d;">U</span> <span style="">u</span><br><span style="">)</span></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Overrides:</td><td valign='top'><p><a href="psi_element://Foo#m(java.lang.Object)"><code><span style="color:#000000;">m</span></code></a> in class <a href="psi_element://Foo"><code><span style="color:#000000;">Foo</span></code></a></td><tr><td valign='top' class='section'><p>Type parameters:</td><td valign='top'><<span style="color:#20999d;">U</span>> – description</td></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <span style="color:#000080;font-weight:bold;">byte</span><span style="">[]</span> <span style="color:#660e7a;font-weight:bold;">bytes</span><span style=""> = </span><span style="color:#000000;">"&amp;".getBytes</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></pre></div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <span style="color:#000080;font-weight:bold;">byte</span><span style="">[]</span> <span style="color:#660e7a;font-weight:bold;">bytes</span> <span style="">= </span><span style="color:#000000;">"&amp;".getBytes</span><span style="">(</span><span style="">)</span></pre></div><table class='sections'></table>
|
||||
@@ -1,3 +1,3 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style=""><</span><span style="color:#20999d;">E</span><span style="color:#000080;font-weight:bold;"> extends </span><a href="psi_element://java.lang.Exception"><code><span style="color:#000000;">Exception</span></code></a><span style="">></span> <font color=red>@</font> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#000000;">drainTo</span><span style="">(</span><a href="psi_element://Consumer"><code><span style="color:#000000;">Consumer</span></code></a><span style=""><</span><span style="">?</span><span style="color:#000080;font-weight:bold;"> super </span><span style="color:#20999d;">T</span><span style="">, </span><span style="color:#20999d;">E</span><span style="">></span> <span style="">consumer</span><span style="">,
|
||||
</span> <a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="">someParameter</span><span style="">)</span>
|
||||
<span style="color:#000080;font-weight:bold;">throws</span> <a href="psi_element://E"><code><span style="color:#000000;">E</span></code></a><br><span class='grayed'>defined in </span><a href="psi_element://Producer"><code><span style="color:#000000;">Producer<span style=""><</span><span style="color:#20999d;">T</span><span style="">></span></span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Throws:</td><td valign='top'><p><a href="psi_element://E"><code><span style="color:#000000;">E</span></code></a></td></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style=""><</span><span style="color:#20999d;">E</span><span style="color:#000080;font-weight:bold;"> extends </span><a href="psi_element://java.lang.Exception"><code><span style="color:#000000;">Exception</span></code></a><span style="">></span> <font color=red>@</font> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#000000;">drainTo</span><span style="">(</span><br> <a href="psi_element://Consumer"><code><span style="color:#000000;">Consumer</span></code></a><span style=""><</span><span style="">?</span><span style="color:#000080;font-weight:bold;"> super </span><span style="color:#20999d;">T</span><span style="">, </span><span style="color:#20999d;">E</span><span style="">></span> <span style="">consumer</span><span style="">,</span>
|
||||
<a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="">someParameter</span><br><span style="">)</span>
|
||||
<span style="color:#000080;font-weight:bold;">throws</span> <a href="psi_element://E"><code><span style="color:#000000;">E</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Throws:</td><td valign='top'><p><a href="psi_element://E"><code><span style="color:#000000;">E</span></code></a></td></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style=""><</span><span style="color:#20999d;">T</span><span style="">></span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">foo</span><span style="">(</span><span style="color:#20999d;">T</span> <span style="">t</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://MethodTypeParam"><code><span style="color:#000000;">MethodTypeParam</span></code></a></pre></div><table class='sections'><p></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style=""><</span><span style="color:#20999d;">T</span><span style="">></span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">foo</span><span style="">(</span><br> <span style="color:#20999d;">T</span> <span style="">t</span><br><span style="">)</span></pre></div><table class='sections'><p></table>
|
||||
@@ -1,2 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Test</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><div class='content'> <pre>a bc</pre> </div><table class='sections'><p></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Test</span></pre></div><div class='content'> <pre>a bc</pre> </div><table class='sections'><p></table>
|
||||
@@ -1,2 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Foo</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><div class='content'> foobar </div><table class='sections'><p></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Foo</span></pre></div><div class='content'> foobar </div><table class='sections'><p></table>
|
||||
@@ -1,4 +1,4 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#660e7a;font-weight:bold;">field</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">null</span><br><span class='grayed'>defined in </span><a href="psi_element://Test"><code><span style="color:#000000;">Test</span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#660e7a;font-weight:bold;">field</span> <span style="">= </span><span style="color:#000080;font-weight:bold;">null</span></pre></div><div class='content'>
|
||||
<pre>
|
||||
foo
|
||||
<p></p>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">record</span> <span style="color:#000000;">Test</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><font color=red>java.lang.Record</font></pre></div><div class='content'>
|
||||
<span style="color:#000080;font-weight:bold;">extends</span> <font color=red>java.lang.Record</font></pre></div><div class='content'>
|
||||
main comment
|
||||
</div><table class='sections'><p><tr><td valign='top' class='section'><p>Params:</td><td valign='top'><span style="">test</span> – simple description</td></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;font-style:italic;">JAVADOC_ME</span><br><span class='grayed'>defined in </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></pre></div><div class='content'> Test </div><table class='sections'><p></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">int</span> <span style="color:#660e7a;font-style:italic;">JAVADOC_ME</span></pre></div><div class='content'> Test </div><table class='sections'><p></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#20999d;">E</span> <span style="color:#000000;">remove</span><span style="">(</span><a href="psi_element://java.lang.Integer"><code><span style="color:#000000;">Integer</span></code></a> <span style="">idx</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://Test"><code><span style="color:#000000;">Test<span style=""><</span><span style="color:#20999d;">E</span><span style="color:#000080;font-weight:bold;"> extends </span><a href="psi_element://java.lang.Number"><code><span style="color:#000000;">Number</span></code></a><span style="">></span></span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>See Also:</td><td valign='top'><p><a href="psi_element://TestImpl#remove(java.lang.Number)"><code><span style="color:#000000;">TestImpl</span><span style="">.</span><span style="color:#000000;">remove</span><span style="">(Number)</span></code></a></td></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#20999d;">E</span> <span style="color:#000000;">remove</span><span style="">(</span><br> <a href="psi_element://java.lang.Integer"><code><span style="color:#000000;">Integer</span></code></a> <span style="">idx</span><br><span style="">)</span></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>See Also:</td><td valign='top'><p><a href="psi_element://TestImpl#remove(java.lang.Number)"><code><span style="color:#000000;">TestImpl</span><span style="">.</span><span style="color:#000000;">remove</span><span style="">(Number)</span></code></a></td></table><div class="bottom-no-content"><icon src="AllIcons.Nodes.Class"/> <a href="psi_element://Test"><code><span style="color:#000000;">Test</span><span style=""><</span><span style="color:#20999d;">E</span><span style="color:#000080;font-weight:bold;"> extends </span><span style="color:#000000;">Number</span><span style="">></span></code></a><br/></div>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#20999d;">E</span> <span style="color:#000000;">remove</span><span style="">(</span><span style="color:#000080;font-weight:bold;">int</span> <span style="">idx</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://Test"><code><span style="color:#000000;">Test<span style=""><</span><span style="color:#20999d;">E</span><span style="">></span></span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>See Also:</td><td valign='top'><p><a href="psi_element://TestImpl#remove(int)"><code><span style="color:#000000;">TestImpl</span><span style="">.</span><span style="color:#000000;">remove</span><span style="">(</span><span style="color:#000080;font-weight:bold;">int</span><span style="">)</span></code></a></td></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#20999d;">E</span> <span style="color:#000000;">remove</span><span style="">(</span><br> <span style="color:#000080;font-weight:bold;">int</span> <span style="">idx</span><br><span style="">)</span></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>See Also:</td><td valign='top'><p><a href="psi_element://TestImpl#remove(int)"><code><span style="color:#000000;">TestImpl</span><span style="">.</span><span style="color:#000000;">remove</span><span style="">(</span><span style="color:#000080;font-weight:bold;">int</span><span style="">)</span></code></a></td></table><div class="bottom-no-content"><icon src="AllIcons.Nodes.Class"/> <a href="psi_element://Test"><code><span style="color:#000000;">Test</span><span style=""><</span><span style="color:#20999d;">E</span><span style="">></span></code></a><br/></div>
|
||||
@@ -1,5 +1,5 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><i><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><code style='font-size:96%;'><span style="color:#808000;">Contract</span></code></a><span style="">(</span><span style="">value</span><span style=""> = </span><span style="color:#008000;font-weight:bold;">" -> new"</span><span style="">, </span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></i>
|
||||
<span style="color:#000080;font-weight:bold;">public static</span> <a href="psi_element://E"><code><span style="color:#000000;">E</span></code></a><span style="">[]</span> <span style="color:#000000;">values</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://E"><code><span style="color:#000000;">E</span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><i><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><code><span style="color:#808000;">Contract</span></code></a><span style="">(</span><span style="">value</span><span style=""> = </span><span style="color:#008000;font-weight:bold;">" -> new"</span><span style="">, </span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></i>
|
||||
<span style="color:#000080;font-weight:bold;">public static</span> <a href="psi_element://E"><code><span style="color:#000000;">E</span></code></a><span style="">[]</span> <span style="color:#000000;">values</span><span style="">(</span><span style="">)</span></pre></div><div class='content'>
|
||||
Returns an array containing the constants of this enum
|
||||
type, in the order they're declared. This method may be
|
||||
used to iterate over the constants as follows:
|
||||
@@ -8,4 +8,4 @@
|
||||
System.out.println(c);
|
||||
</pre>
|
||||
|
||||
</div><table class='sections'><tr><td valign='top' class='section'><p>Returns:</td><td valign='top'><p>an array containing the constants of this enum type, in the order they're declared</td><tr><td valign='top' class='section'><p><i>Inferred</i><br> annotations:</td><td valign='top'><p><i><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><span style="color:#808000;">org.jetbrains.annotations.Contract</span></a><span style="">(</span><span style="">value</span><span style=""> = </span><span style="color:#008000;font-weight:bold;">" -> new"</span><span style="">, </span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></i></td></table>
|
||||
</div><table class='sections'><tr><td valign='top' class='section'><p>Returns:</td><td valign='top'><p>an array containing the constants of this enum type, in the order they're declared</td><tr><td valign='top' class='section'><p><i>Inferred</i><br> annotations:</td><td valign='top'><p><i><span style="color:#808000;">@</span><a href="psi_element://org.jetbrains.annotations.Contract"><span style="color:#808000;">org.jetbrains.annotations.Contract</span></a><span style="">(</span><span style="">value</span><span style=""> = </span><span style="color:#008000;font-weight:bold;">" -> new"</span><span style="">, </span><span style="">pure</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">true</span><span style="">)</span></i></td></table><div class="bottom"><icon src="AllIcons.Nodes.Class"/> <a href="psi_element://E"><code><span style="color:#000000;">E</span></code></a><br/></div>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition-only'><pre><span style="color:#000080;font-weight:bold;">public</span> <span style=""><</span><span style="color:#808000;">@</span><a href="psi_element://Test.Foo"><code style='font-size:96%;'><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">1</span><span style="">)</span> <span style="color:#20999d;">T</span><span style="color:#000080;font-weight:bold;"> extends </span><span style="color:#808000;">@</span><a href="psi_element://Test.Foo"><code style='font-size:96%;'><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">2</span><span style="">)</span> <a href="psi_element://java.lang.CharSequence"><code><span style="color:#000000;">CharSequence</span></code></a><span style=""> & </span><span style="color:#808000;">@</span><a href="psi_element://Test.Foo"><code style='font-size:96%;'><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">3</span><span style="">)</span> <a href="psi_element://java.lang.Cloneable"><code><span style="color:#000000;">Cloneable</span></code></a><span style="">></span> <span style="color:#808000;">@</span><a href="psi_element://Test.Foo"><code style='font-size:96%;'><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">4</span><span style="">)</span> <a href="psi_element://java.util.List"><code><span style="color:#000000;">List</span></code></a><span style=""><</span><span style="color:#808000;">@</span><a href="psi_element://Test.Foo"><code style='font-size:96%;'><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">5</span><span style="">)</span> <span style="">?</span><span style="color:#000080;font-weight:bold;"> super </span><span style="color:#808000;">@</span><a href="psi_element://Test.Foo"><code style='font-size:96%;'><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">6</span><span style="">)</span> <span style="color:#20999d;">T</span><span style="">></span> <span style="color:#000000;">bar</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://Test"><code><span style="color:#000000;">Test</span></code></a></pre></div>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition-only'><pre><span style="color:#000080;font-weight:bold;">public</span> <span style=""><</span><span style="color:#808000;">@</span><a href="psi_element://Test.Foo"><code><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">1</span><span style="">)</span> <span style="color:#20999d;">T</span><span style="color:#000080;font-weight:bold;"> extends </span><span style="color:#808000;">@</span><a href="psi_element://Test.Foo"><code><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">2</span><span style="">)</span> <a href="psi_element://java.lang.CharSequence"><code><span style="color:#000000;">CharSequence</span></code></a><span style=""> & </span><span style="color:#808000;">@</span><a href="psi_element://Test.Foo"><code><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">3</span><span style="">)</span> <a href="psi_element://java.lang.Cloneable"><code><span style="color:#000000;">Cloneable</span></code></a><span style="">></span> <span style="color:#808000;">@</span><a href="psi_element://Test.Foo"><code><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">4</span><span style="">)</span> <a href="psi_element://java.util.List"><code><span style="color:#000000;">List</span></code></a><span style=""><</span><span style="color:#808000;">@</span><a href="psi_element://Test.Foo"><code><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">5</span><span style="">)</span> <span style="">?</span><span style="color:#000080;font-weight:bold;"> super </span><span style="color:#808000;">@</span><a href="psi_element://Test.Foo"><code><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">6</span><span style="">)</span> <span style="color:#20999d;">T</span><span style="">></span> <span style="color:#000000;">bar</span><span style="">(</span><span style="">)</span></pre></div><div class="bottom-no-content"><icon src="AllIcons.Nodes.Class"/> <a href="psi_element://Test"><code><span style="color:#000000;">Test</span></code></a><br/></div>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition-only'><pre><span style="color:#000080;font-weight:bold;">public</span> <span style="color:#808000;">@</span><a href="psi_element://Foo"><code style='font-size:96%;'><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">1</span><span style="">)</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#808000;">@</span><a href="psi_element://Foo"><code style='font-size:96%;'><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">2</span><span style="">)</span> <span style="">[]</span> <span style="color:#000000;">foo</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://Test"><code><span style="color:#000000;">Test</span></code></a></pre></div>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition-only'><pre><span style="color:#000080;font-weight:bold;">public</span> <span style="color:#808000;">@</span><a href="psi_element://Foo"><code><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">1</span><span style="">)</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#808000;">@</span><a href="psi_element://Foo"><code><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">2</span><span style="">)</span> <span style="">[]</span> <span style="color:#000000;">foo</span><span style="">(</span><span style="">)</span></pre></div><div class="bottom-no-content"><icon src="AllIcons.Nodes.Class"/> <a href="psi_element://Test"><code><span style="color:#000000;">Test</span></code></a><br/></div>
|
||||
@@ -1,3 +1,3 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#808000;">@</span><a href="psi_element://Foo"><code style='font-size:96%;'><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">1</span><span style="">)</span>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#808000;">@</span><a href="psi_element://Foo"><code><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">1</span><span style="">)</span>
|
||||
<span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Test</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><span style="color:#808000;">@</span><a href="psi_element://Foo"><code style='font-size:96%;'><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">2</span><span style="">)</span> <a href="psi_element://java.util.List"><code><span style="color:#000000;">List</span></code></a><span style=""><</span><span style="color:#808000;">@</span><a href="psi_element://Foo"><code style='font-size:96%;'><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">3</span><span style="">)</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span></pre></div><table class='sections'></table>
|
||||
<span style="color:#000080;font-weight:bold;">extends</span> <span style="color:#808000;">@</span><a href="psi_element://Foo"><code><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">2</span><span style="">)</span> <a href="psi_element://java.util.List"><code><span style="color:#000000;">List</span></code></a><span style=""><</span><span style="color:#808000;">@</span><a href="psi_element://Foo"><code><span style="color:#808000;">Foo</span></code></a><span style="">(</span><span style="color:#0000ff;">3</span><span style="">)</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span></pre></div><table class='sections'></table>
|
||||
@@ -1,4 +1,3 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Test</span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><div class='content'>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">Test</span></pre></div><div class='content'>
|
||||
a@b c@d
|
||||
</div><table class='sections'><p></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">JAVADOC_ME</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></pre></div><div class='content'> The value of A is <a href="psi_element://A#A">23</a>. </div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">JAVADOC_ME</span><span style="">(</span><span style="">)</span></pre></div><div class='content'> The value of A is <a href="psi_element://A#A">23</a>. </div><table class='sections'></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">JAVADOC_ME</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a></pre></div><div class='content'> The value of A is <a href="psi_element://A#A">23</a>. </div><table class='sections'></table>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition'><pre><span style="color:#000080;font-weight:bold;">public static</span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">JAVADOC_ME</span><span style="">(</span><span style="">)</span></pre></div><div class='content'> The value of A is <a href="psi_element://A#A">23</a>. </div><table class='sections'></table>
|
||||
@@ -1 +1 @@
|
||||
<html><head><base href="placeholder"></head><body><div class='definition-only'><pre><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a><span style=""><</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span> <span style="color:#000000;">a</span><span style=""> = </span><span style="color:#000080;font-weight:bold;">new </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a><span style=""><</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span><span style="">(</span><span style="">)</span></pre></div>
|
||||
<html><head><base href="placeholder"></head><body><div class='definition-only'><pre><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a><span style=""><</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span> <span style="color:#000000;">a</span> <span style="">= </span><span style="color:#000080;font-weight:bold;">new </span><a href="psi_element://A"><code><span style="color:#000000;">A</span></code></a><span style=""><</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span><span style="">(</span><span style="">)</span></pre></div>
|
||||
@@ -75,7 +75,7 @@ class JavaDocumentationTest extends LightJavaCodeInsightFixtureTestCase {
|
||||
def doc = new JavaDocumentationProvider().generateDoc(exprList, null)
|
||||
|
||||
def expected =
|
||||
"<div class=\'definition\'><pre><span style=\"color:#000080;font-weight:bold;\">void</span> <span style=\"color:#000000;\">doFoo</span><span style=\"\">(</span><span style=\"\">)</span><br><span class=\'grayed\'>defined in </span><a href=\"psi_element://Foo\"><code><span style=\"color:#000000;\">Foo</span></code></a></pre></div><table class=\'sections\'><p></table>"
|
||||
"<div class=\'definition\'><pre><span style=\"color:#000080;font-weight:bold;\">void</span> <span style=\"color:#000000;\">doFoo</span><span style=\"\">(</span><span style=\"\">)</span></pre></div><table class=\'sections\'><p></table>"
|
||||
|
||||
assert doc == expected
|
||||
}
|
||||
@@ -87,7 +87,7 @@ class JavaDocumentationTest extends LightJavaCodeInsightFixtureTestCase {
|
||||
class Foo {{
|
||||
new Bar<String>().f<caret>oo();
|
||||
}}""",
|
||||
"<span style=\"color:#000000;\"><a href=\"psi_element://Bar\">Bar</a></span><br/> <span style=\"color:#000000;\"><a href=\"psi_element://java.util.List\">List</a></span><span style=\"\"><</span><span style=\"color:#000000;\">String</span><span style=\"\">></span> <span style=\"color:#000000;\">foo</span><span style=\"\">(</span><span style=\"color:#000000;\">String</span> <span style=\"\">param</span><span style=\"\">)</span>")
|
||||
"<span style=\"color:#000000;\">Bar</span><br/> <span style=\"color:#000000;\"><a href=\"psi_element://java.util.List\">List</a></span><span style=\"\"><</span><span style=\"color:#000000;\">String</span><span style=\"\">></span> <span style=\"color:#000000;\">foo</span><span style=\"\">(</span><span style=\"color:#000000;\">String</span> <span style=\"\">param</span><span style=\"\">)</span>")
|
||||
}
|
||||
|
||||
void testGenericField() {
|
||||
@@ -97,7 +97,7 @@ class JavaDocumentationTest extends LightJavaCodeInsightFixtureTestCase {
|
||||
class Foo {{
|
||||
new Bar<Integer>().fi<caret>eld
|
||||
}}""",
|
||||
"<span style=\"color:#000000;\"><a href=\"psi_element://Bar\">Bar</a></span><br/> <span style=\"color:#000000;\">Integer</span> <span style=\"color:#660e7a;font-weight:bold;\">field</span>")
|
||||
"<span style=\"color:#000000;\">Bar</span><br/> <span style=\"color:#000000;\">Integer</span> <span style=\"color:#660e7a;font-weight:bold;\">field</span>")
|
||||
}
|
||||
|
||||
void testMethodInAnonymousClass() {
|
||||
@@ -124,7 +124,7 @@ class JavaDocumentationTest extends LightJavaCodeInsightFixtureTestCase {
|
||||
}
|
||||
@java.lang.annotation.Documented
|
||||
@interface Anno {} """,
|
||||
"<span style=\"color:#000000;\"><a href=\"psi_element://Foo\">Foo</a></span><br/> <span style=\"color:#808000;\">@</span><span style=\"color:#808000;\"><a href=\"psi_element://Anno\">Anno</a></span> <br/><span style=\"color:#000080;font-weight:bold;\">private</span> <span style=\"color:#000080;font-weight:bold;\">void</span> <span style=\"color:#000000;\">m</span><span style=\"\">(</span><span style=\"\">)</span>")
|
||||
"<span style=\"color:#000000;\">Foo</span><br/> <span style=\"color:#808000;\">@</span><span style=\"color:#808000;\"><a href=\"psi_element://Anno\">Anno</a></span> <br/><span style=\"color:#000080;font-weight:bold;\">private</span> <span style=\"color:#000080;font-weight:bold;\">void</span> <span style=\"color:#000000;\">m</span><span style=\"\">(</span><span style=\"\">)</span>")
|
||||
}
|
||||
|
||||
void testInnerClass() {
|
||||
@@ -139,7 +139,7 @@ class JavaDocumentationTest extends LightJavaCodeInsightFixtureTestCase {
|
||||
class Outer {
|
||||
class Inner {}
|
||||
}""",
|
||||
"<span style=\"color:#000000;\"><a href=\"psi_element://C\">C</a></span><br/> <span style=\"color:#000000;\"><a href=\"psi_element://Outer.Inner\">Outer.Inner</a></span> <span style=\"color:#660e7a;font-weight:bold;\">field</span>")
|
||||
"<span style=\"color:#000000;\">C</span><br/> <span style=\"color:#000000;\"><a href=\"psi_element://Outer.Inner\">Outer.Inner</a></span> <span style=\"color:#660e7a;font-weight:bold;\">field</span>")
|
||||
}
|
||||
|
||||
void testAsterisksFiltering() {
|
||||
@@ -157,7 +157,7 @@ class JavaDocumentationTest extends LightJavaCodeInsightFixtureTestCase {
|
||||
def doc = new JavaDocumentationProvider().generateDoc(method, null)
|
||||
|
||||
def expected =
|
||||
"<div class=\'definition\'><pre><span style=\"color:#000080;font-weight:bold;\">public</span> <span style=\"color:#000080;font-weight:bold;\">void</span> <span style=\"color:#000000;\">m</span><span style=\"\">(</span><span style=\"\">)</span><br><span class=\'grayed\'>defined in </span><a href=\"psi_element://C\"><code><span style=\"color:#000000;\">C</span></code></a></pre></div><div class=\'content\'>\n For example, <a href=\"psi_element://java.lang.String#String(byte[], int, int, java.lang.String)\"><code><span style=\"color:#000000;\">String</span><span style=\"\">.</span><span style=\"color:#000000;\">String</span><span style=\"\">(</span><span style=\"color:#000080;font-weight:bold;\">byte</span><span style=\"\">[], </span><span style=\"color:#000080;font-weight:bold;\">int</span><span style=\"\">, </span><span style=\"color:#000080;font-weight:bold;\">int</span><span style=\"\">, String)</span></code></a>.\n </div><table class=\'sections\'></table>"
|
||||
"<div class=\'definition\'><pre><span style=\"color:#000080;font-weight:bold;\">public</span> <span style=\"color:#000080;font-weight:bold;\">void</span> <span style=\"color:#000000;\">m</span><span style=\"\">(</span><span style=\"\">)</span></pre></div><div class=\'content\'>\n For example, <a href=\"psi_element://java.lang.String#String(byte[], int, int, java.lang.String)\"><code><span style=\"color:#000000;\">String</span><span style=\"\">.</span><span style=\"color:#000000;\">String</span><span style=\"\">(</span><span style=\"color:#000080;font-weight:bold;\">byte</span><span style=\"\">[], </span><span style=\"color:#000080;font-weight:bold;\">int</span><span style=\"\">, </span><span style=\"color:#000080;font-weight:bold;\">int</span><span style=\"\">, String)</span></code></a>.\n </div><table class=\'sections\'></table>"
|
||||
|
||||
assert doc == expected
|
||||
}
|
||||
@@ -173,7 +173,7 @@ class JavaDocumentationTest extends LightJavaCodeInsightFixtureTestCase {
|
||||
def doc = new JavaDocumentationProvider().generateDoc(method, null)
|
||||
|
||||
def expected =
|
||||
"<div class=\'definition\'><pre><span style=\"color:#000080;font-weight:bold;\">public</span> <span style=\"color:#000080;font-weight:bold;\">void</span> <span style=\"color:#000000;\">m</span><span style=\"\">(</span><span style=\"\">)</span><br><span class=\'grayed\'>defined in </span><a href=\"psi_element://C\"><code><span style=\"color:#000000;\">C</span></code></a></pre></div><div class=\'content\'> Visit the \"<code><span style=\"\"><span style=\"\">/login</span></span></code>\" URL. </div><table class=\'sections\'></table>"
|
||||
"<div class=\'definition\'><pre><span style=\"color:#000080;font-weight:bold;\">public</span> <span style=\"color:#000080;font-weight:bold;\">void</span> <span style=\"color:#000000;\">m</span><span style=\"\">(</span><span style=\"\">)</span></pre></div><div class=\'content\'> Visit the \"<code><span style=\"\"><span style=\"\">/login</span></span></code>\" URL. </div><table class=\'sections\'></table>"
|
||||
|
||||
assert doc == expected
|
||||
}
|
||||
@@ -217,7 +217,7 @@ class Bar {
|
||||
def method = PsiTreeUtil.getParentOfType(myFixture.file.findElementAt(myFixture.editor.caretModel.offset), PsiMethod.class)
|
||||
def doc = new JavaDocumentationProvider().generateDoc(method, null)
|
||||
|
||||
String expected = "<div class=\'definition\'><pre><span style=\"color:#000080;font-weight:bold;\">void</span> <span style=\"color:#000000;\">foo</span><span style=\"\">(</span><span style=\"\">)</span><br><span class=\'grayed\'>defined in </span><a href=\"psi_element://Bar\"><code><span style=\"color:#000000;\">Bar</span></code></a></pre></div><table class=\'sections\'><p><tr><td valign=\'top\' class=\'section\'><p>From class:</td><td valign=\'top\'><p><a href=\"psi_element://Foo\"><code><span style=\"color:#000000;\">Foo</span></code></a><br>\n Some doc\n </td></table>"
|
||||
String expected = "<div class=\'definition\'><pre><span style=\"color:#000080;font-weight:bold;\">void</span> <span style=\"color:#000000;\">foo</span><span style=\"\">(</span><span style=\"\">)</span></pre></div><table class=\'sections\'><p><tr><td valign=\'top\' class=\'section\'><p>From class:</td><td valign=\'top\'><p><a href=\"psi_element://Foo\"><code><span style=\"color:#000000;\">Foo</span></code></a><br>\n Some doc\n </td></table>"
|
||||
|
||||
assert doc == expected
|
||||
}
|
||||
@@ -270,7 +270,7 @@ class Bar {
|
||||
}
|
||||
|
||||
// Here we check that the covering module (SDK in this case) is rendered in decorated info
|
||||
assert component.decoratedText.contains('<div class="bottom"><icon src="AllIcons.Nodes.PpLibFolder"/> < java 1.7 ></div>')
|
||||
assert component.decoratedText.contains('<div class="bottom"><icon src="AllIcons.Nodes.Class"/> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">java.lang.String</span></code></a><br/><icon src="AllIcons.Nodes.PpLibFolder"/> < java 1.7 ></div>')
|
||||
}
|
||||
|
||||
|
||||
|
||||
+4
-5
@@ -117,11 +117,10 @@ public class JavaDocInfoGeneratorTest extends JavaCodeInsightTestCase {
|
||||
public void testRepeatableAnnotations() {
|
||||
useJava8();
|
||||
assertEquals(
|
||||
"<span style=\"color:#808000;\">@</span><span style=\"color:#808000;\">R</span><span style=\"\">(</span><span style=\"color:#008000;font-weight:bold;\">\"a\"</span><span style=\"\">)</span> \n" +
|
||||
"<span style=\"color:#808000;\">@</span><span style=\"color:#808000;\">R</span><span style=\"\">(</span><span style=\"color:#008000;font-weight:bold;\">\"b\"</span><span style=\"\">)</span> \n" +
|
||||
"<span style=\"color:#000080;font-weight:bold;\">class</span> <span style=\"color:#000000;\">repeatableAnnotations</span>\n" +
|
||||
"<span style=\"color:#000080;font-weight:bold;\">extends </span><a href=\"psi_element://java.lang.Object\"><code><span style=\"color:#000000;\">Object</span></code></a>",
|
||||
new JavaDocInfoGenerator(getProject(), getTestClass(), false).generateSignature(getTestClass()));
|
||||
"<span style=\"color:#808000;\">@</span><a href=\"psi_element://R\"><code><span style=\"color:#808000;\">R</span></code></a><span style=\"\">(</span><span style=\"color:#008000;font-weight:bold;\">\"a\"</span><span style=\"\">)</span> \n" +
|
||||
"<span style=\"color:#808000;\">@</span><a href=\"psi_element://R\"><code><span style=\"color:#808000;\">R</span></code></a><span style=\"\">(</span><span style=\"color:#008000;font-weight:bold;\">\"b\"</span><span style=\"\">)</span> \n" +
|
||||
"<span style=\"color:#000080;font-weight:bold;\">class</span> <span style=\"color:#000000;\">repeatableAnnotations</span>",
|
||||
new JavaDocInfoGenerator(getProject(), getTestClass()).generateSignature(getTestClass()));
|
||||
}
|
||||
|
||||
public void testAnonymousAndSuperJavadoc() {
|
||||
|
||||
+3
-3
@@ -16,7 +16,7 @@ class LightJavadocGeneratorTest : LightJavaCodeInsightFixtureTestCase() {
|
||||
|
||||
fun testDocumentedModule() = doTestModule(
|
||||
"/** One humble module. */\n@Deprecated\nmodule M.N { }",
|
||||
"<div class='definition'><pre><span style=\"color:#808000;\">@</span><a href=\"psi_element://java.lang.Deprecated\"><code style='font-size:96%;'><span style=\"color:#808000;\">Deprecated</span></code></a> \n" +
|
||||
"<div class='definition'><pre><span style=\"color:#808000;\">@</span><a href=\"psi_element://java.lang.Deprecated\"><code><span style=\"color:#808000;\">Deprecated</span></code></a> \n" +
|
||||
"<span style=\"color:#000080;font-weight:bold;\">module </span><span style=\"color:#000000;\">M.N</span></pre></div><div class='content'> One humble module. </div>")
|
||||
|
||||
fun testRootedClassLink() = doTestLink("{@docRoot}/java/lang/Character.html#unicode", "psi_element://java.lang.Character###unicode")
|
||||
@@ -38,7 +38,7 @@ class LightJavadocGeneratorTest : LightJavaCodeInsightFixtureTestCase() {
|
||||
private fun doTestLink(link: String, expected: String) {
|
||||
doTestClass(
|
||||
"package a.b;\n/** A <a href=\"${link}\">link</a>. */\ninterface I { }",
|
||||
"<div class='definition'><pre><span style=\"color:#000080;font-weight:bold;\">interface</span> <span style=\"color:#000000;\">I</span><br><span class='grayed'>defined in </span><font color=red>a.b</font></pre></div><div class='content'> A <a href=\"${expected}\">link</a>. </div>")
|
||||
"<div class='definition'><pre><span style=\"color:#000080;font-weight:bold;\">interface</span> <span style=\"color:#000000;\">I</span></pre></div><div class='content'> A <a href=\"$expected\">link</a>. </div>")
|
||||
}
|
||||
|
||||
private fun doTestClass(text: String, expected: String) {
|
||||
@@ -47,7 +47,7 @@ class LightJavadocGeneratorTest : LightJavaCodeInsightFixtureTestCase() {
|
||||
}
|
||||
|
||||
private fun generateDoc(element: PsiElement): String? =
|
||||
JavaDocInfoGeneratorFactory.create(project, element, false).generateDocInfo(null)
|
||||
JavaDocInfoGeneratorFactory.create(project, element).generateDocInfo(null)
|
||||
?.replace(" ", " ")
|
||||
?.substringBeforeLast("<table class='sections'><p></table>")
|
||||
//</editor-fold>
|
||||
|
||||
+7
-7
@@ -106,18 +106,18 @@ public class BytecodeAnalysisIntegrationTest extends LightJavaCodeInsightFixture
|
||||
|
||||
checkHasGutter("org.apache.velocity.util.ExceptionUtils",
|
||||
"<html><i>Inferred</i> annotations available. Full signature:<p>\n" +
|
||||
"<b><i><span style=\"color:#808000;\">@</span><span style=\"color:#808000;\">Contract</span><span style=\"\">(</span><span style=\"color:#008000;font-weight:bold;\">\"null,_,_->null\"</span><span style=\"\">)</span></i></b> \n" +
|
||||
"<span style=\"color:#000000;\">Throwable</span> <span style=\"color:#000000;\">createWithCause</span><span style=\"\">(</span><span style=\"color:#000000;\">Class</span><span style=\"\">,\n" +
|
||||
" </span> <span style=\"color:#000000;\">String</span><span style=\"\">,\n" +
|
||||
" </span> <span style=\"color:#000000;\">Throwable</span><span style=\"\">)</span></html>");
|
||||
"<b><i><span style=\"color:#808000;\">@</span><a href=\"psi_element://org.jetbrains.annotations.Contract\"><code><span style=\"color:#808000;\">Contract</span></code></a><span style=\"\">(</span><span style=\"color:#008000;font-weight:bold;\">\"null,_,_->null\"</span><span style=\"\">)</span></i></b> \n" +
|
||||
"<span style=\"color:#000000;\">Throwable</span> <span style=\"color:#000000;\">createWithCause</span><span style=\"\">(</span><span style=\"color:#000000;\">Class</span><span style=\"\">,</span>\n" +
|
||||
"<span style=\"color:#000000;\">String</span><span style=\"\">,</span>\n" +
|
||||
"<span style=\"color:#000000;\">Throwable</span><span style=\"\">)</span></html>");
|
||||
}
|
||||
|
||||
public void testExternalAnnoGutter() {
|
||||
checkHasGutter("java.lang.String",
|
||||
"<html>External annotations available. Full signature:<p>\n" +
|
||||
"<b><span style=\"color:#808000;\">@</span><span style=\"color:#808000;\">Contract</span><span style=\"\">(</span><span style=\"\">pure</span><span style=\"\"> = </span><span style=\"color:#000080;font-weight:bold;\">true</span><span style=\"\">)</span></b> \n" +
|
||||
"<span style=\"color:#000000;\">String</span><span style=\"\">(</span><span style=\"color:#000080;font-weight:bold;\">char</span><span style=\"\">[]</span><span style=\"\">,\n" +
|
||||
" </span> <span style=\"color:#000080;font-weight:bold;\">boolean</span><span style=\"\">)</span></html>");
|
||||
"<span style=\"color:#000000;\">String</span><span style=\"\">(</span><b><span style=\"color:#808000;\">@</span><a href=\"psi_element://org.jetbrains.annotations.NotNull\"><code><span style=\"color:#808000;\">NotNull</span></code></a></b> <span style=\"color:#000080;font-weight:bold;\">char</span><span style=\"\">[]</span><span style=\"\">,</span>\n" +
|
||||
"<span style=\"color:#000080;font-weight:bold;\">int</span><span style=\"\">,</span>\n" +
|
||||
"<span style=\"color:#000080;font-weight:bold;\">int</span><span style=\"\">)</span></html>");
|
||||
}
|
||||
|
||||
private void checkHasGutter(String className, String expectedText) {
|
||||
|
||||
+13
@@ -6,6 +6,7 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.text.HtmlChunk;
|
||||
import com.intellij.psi.PsiDocCommentBase;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
@@ -122,6 +123,18 @@ public final class CompositeDocumentationProvider implements DocumentationProvid
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable HtmlChunk getLocationInfo(@Nullable PsiElement element) {
|
||||
for (DocumentationProvider provider : getAllProviders()) {
|
||||
HtmlChunk result = provider.getLocationInfo(element);
|
||||
if (result != null) {
|
||||
LOG.debug("getLocationInfo: ", provider);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getUrlFor(PsiElement element, PsiElement originalElement) {
|
||||
for (DocumentationProvider provider : getAllProviders()) {
|
||||
|
||||
+19
-3
@@ -5,13 +5,22 @@ import com.intellij.codeInsight.documentation.DocumentationManagerProtocol;
|
||||
import com.intellij.codeInsight.documentation.DocumentationManagerUtil;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.text.HtmlChunk;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDocCommentBase;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.search.LocalSearchScope;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread;
|
||||
import com.intellij.util.concurrency.annotations.RequiresReadLock;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -60,6 +69,13 @@ public interface DocumentationProvider {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ApiStatus.Experimental
|
||||
@RequiresReadLock
|
||||
@RequiresBackgroundThread
|
||||
default @Nullable HtmlChunk getLocationInfo(@Nullable PsiElement element) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the list of possible URLs to show as external documentation for the specified element.
|
||||
*
|
||||
@@ -146,7 +162,7 @@ public interface DocumentationProvider {
|
||||
* documentation view to work correctly.
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
default void collectDocComments(@NotNull PsiFile file, @NotNull Consumer<? super @NotNull PsiDocCommentBase> sink) {}
|
||||
default void collectDocComments(@NotNull PsiFile file, @NotNull Consumer<? super @NotNull PsiDocCommentBase> sink) { }
|
||||
|
||||
/**
|
||||
* This method is needed to support rendered representation of documentation comments in editor. It should return doc comment located at
|
||||
@@ -187,8 +203,8 @@ public interface DocumentationProvider {
|
||||
* referenced at target offset) isn't suitable for your language. For example, it could be a keyword where there's no
|
||||
* {@link com.intellij.psi.PsiReference}, but for which users might benefit from context help.
|
||||
*
|
||||
* @param targetOffset equals to caret offset for 'Quick Documentation' action, and to offset under mouse cursor for documentation shown
|
||||
* on mouse hover
|
||||
* @param targetOffset equals to caret offset for 'Quick Documentation' action, and to offset under mouse cursor for documentation shown
|
||||
* on mouse hover
|
||||
* @param contextElement the leaf PSI element in {@code file} at target offset
|
||||
* @return target PSI element to show documentation for, or {@code null} if it should be determined by standard platform's logic (default
|
||||
* behaviour)
|
||||
|
||||
+48
@@ -2,8 +2,20 @@
|
||||
package com.intellij.lang.documentation;
|
||||
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.roots.JdkOrderEntry;
|
||||
import com.intellij.openapi.roots.LibraryOrderEntry;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.util.text.HtmlChunk;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.search.LocalSearchScope;
|
||||
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread;
|
||||
import com.intellij.util.concurrency.annotations.RequiresReadLock;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -30,4 +42,40 @@ public class DocumentationProviderEx implements DocumentationProvider {
|
||||
public Image getLocalImageForElement(@NotNull PsiElement element, @NotNull String imageSpec) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ApiStatus.Experimental
|
||||
@RequiresReadLock
|
||||
@RequiresBackgroundThread
|
||||
public static @Nullable HtmlChunk getDefaultLocationInfo(@Nullable PsiElement element) {
|
||||
if (element == null) return null;
|
||||
|
||||
PsiFile file = element.getContainingFile();
|
||||
VirtualFile vfile = file == null ? null : file.getVirtualFile();
|
||||
if (vfile == null) return null;
|
||||
|
||||
if (element.getUseScope() instanceof LocalSearchScope) return null;
|
||||
|
||||
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(element.getProject()).getFileIndex();
|
||||
Module module = fileIndex.getModuleForFile(vfile);
|
||||
|
||||
if (module != null) {
|
||||
if (ModuleManager.getInstance(element.getProject()).getModules().length == 1) return null;
|
||||
return HtmlChunk.fragment(
|
||||
HtmlChunk.tag("icon").attr("src", "AllIcons.Nodes.Module"),
|
||||
HtmlChunk.nbsp(),
|
||||
HtmlChunk.text(module.getName())
|
||||
);
|
||||
}
|
||||
else {
|
||||
return fileIndex.getOrderEntriesForFile(vfile).stream()
|
||||
.filter(it -> it instanceof LibraryOrderEntry || it instanceof JdkOrderEntry)
|
||||
.findFirst()
|
||||
.map(it -> HtmlChunk.fragment(
|
||||
HtmlChunk.tag("icon").attr("src", "AllIcons.Nodes.PpLibFolder"),
|
||||
HtmlChunk.nbsp(),
|
||||
HtmlChunk.text(it.getPresentableName())
|
||||
))
|
||||
.orElse(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -39,6 +39,7 @@ private val myFocusModeCheckBox get() = CheckboxDescriptor
|
||||
private val myCbShowIntentionBulbCheckBox get() = CheckboxDescriptor(ApplicationBundle.message("checkbox.show.intention.bulb"), PropertyBinding(model::isShowIntentionBulb, model::setShowIntentionBulb))
|
||||
private val myCodeLensCheckBox get() = CheckboxDescriptor(IdeBundle.message("checkbox.show.editor.preview.popup"), uiSettings::showEditorToolTip)
|
||||
private val myRenderedDocCheckBox get() = CheckboxDescriptor(IdeBundle.message("checkbox.show.rendered.doc.comments"), PropertyBinding(model::isDocCommentRenderingEnabled, model::setDocCommentRenderingEnabled))
|
||||
private val myDocSyntaxHighlightingCheckBox get() = CheckboxDescriptor(IdeBundle.message("checkbox.enable.doc.syntax.highlighting"), PropertyBinding(model::isDocSyntaxHighlightingEnabled, model::setDocSyntaxHighlightingEnabled))
|
||||
// @formatter:on
|
||||
|
||||
class EditorAppearanceConfigurable : BoundCompositeSearchableConfigurable<UnnamedConfigurable>(
|
||||
@@ -100,6 +101,9 @@ class EditorAppearanceConfigurable : BoundCompositeSearchableConfigurable<Unname
|
||||
checkBox(myRenderedDocCheckBox)
|
||||
component(createReaderModeComment()).withLargeLeftGap()
|
||||
}
|
||||
row {
|
||||
checkBox(myDocSyntaxHighlightingCheckBox)
|
||||
}
|
||||
|
||||
for (configurable in configurables) {
|
||||
appendDslConfigurableRow(configurable)
|
||||
|
||||
+1
-1
@@ -77,7 +77,7 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr
|
||||
|
||||
private static final int PREFERRED_HEIGHT_MAX_EM = 10;
|
||||
static final JBDimension MIN_DEFAULT = new JBDimension(300, 36);
|
||||
static final JBDimension MAX_DEFAULT = new JBDimension(650, 500);
|
||||
static final JBDimension MAX_DEFAULT = new JBDimension(950, 500);
|
||||
|
||||
private final ExternalDocAction myExternalDocAction;
|
||||
|
||||
|
||||
+8
-7
@@ -111,16 +111,17 @@ public class DocumentationEditorPane extends JEditorPane {
|
||||
}
|
||||
|
||||
private int definitionPreferredWidth() {
|
||||
int preferredDefinitionWidth = getPreferredDefinitionWidth();
|
||||
int preferredDefinitionWidth = getPreferredSectionWidth("definition");
|
||||
int preferredLocationWidth = Math.max(getPreferredSectionWidth("bottom-no-content"), getPreferredSectionWidth("bottom"));
|
||||
if (preferredDefinitionWidth < 0) {
|
||||
return -1;
|
||||
}
|
||||
int preferredContentWidth = getPreferredContentWidth(getDocument().getLength());
|
||||
return Math.max(preferredContentWidth, preferredDefinitionWidth);
|
||||
return Math.max(preferredContentWidth, Math.max(preferredDefinitionWidth, preferredLocationWidth));
|
||||
}
|
||||
|
||||
private int getPreferredDefinitionWidth() {
|
||||
View definition = findDefinition(getUI().getRootView(this));
|
||||
private int getPreferredSectionWidth(String sectionClassName) {
|
||||
View definition = findSection(getUI().getRootView(this), sectionClassName);
|
||||
return definition == null ? -1 : (int)definition.getPreferredSpan(View.X_AXIS);
|
||||
}
|
||||
|
||||
@@ -142,12 +143,12 @@ public class DocumentationEditorPane extends JEditorPane {
|
||||
return contentLengthPreferredSize;
|
||||
}
|
||||
|
||||
private static @Nullable View findDefinition(@NotNull View view) {
|
||||
if ("definition".equals(view.getElement().getAttributes().getAttribute(HTML.Attribute.CLASS))) {
|
||||
private static @Nullable View findSection(@NotNull View view, @NotNull String sectionClassName) {
|
||||
if (sectionClassName.equals(view.getElement().getAttributes().getAttribute(HTML.Attribute.CLASS))) {
|
||||
return view;
|
||||
}
|
||||
for (int i = 0; i < view.getViewCount(); i++) {
|
||||
View definition = findDefinition(view.getView(i));
|
||||
View definition = findSection(view.getView(i), sectionClassName);
|
||||
if (definition != null) {
|
||||
return definition;
|
||||
}
|
||||
|
||||
+19
-56
@@ -464,17 +464,17 @@ public class DocumentationManager extends DockablePopupManager<DocumentationComp
|
||||
/**
|
||||
* Asks to show quick doc for the target element.
|
||||
*
|
||||
* @param editor editor with an element for which quick do should be shown
|
||||
* @param element target element which documentation should be shown
|
||||
* @param original element that was used as a quick doc anchor. Example: consider a code like {@code Runnable task;}.
|
||||
* A user wants to see javadoc for the {@code Runnable}, so, original element is a class name from the variable
|
||||
* declaration but {@code 'element'} argument is a {@code Runnable} descriptor
|
||||
* @param closeCallback callback to be notified on target hint close (if any)
|
||||
* @param documentation precalculated documentation
|
||||
* @param closeOnSneeze flag that defines whether quick doc control should be as non-obtrusive as possible. E.g. there are at least
|
||||
* two possible situations - the quick doc is shown automatically on mouse over element; the quick doc is shown
|
||||
* on explicit action call (Ctrl+Q). We want to close the doc on, say, editor viewport position change
|
||||
* at the first situation but don't want to do that at the second
|
||||
* @param editor editor with an element for which quick do should be shown
|
||||
* @param element target element which documentation should be shown
|
||||
* @param original element that was used as a quick doc anchor. Example: consider a code like {@code Runnable task;}.
|
||||
* A user wants to see javadoc for the {@code Runnable}, so, original element is a class name from the variable
|
||||
* declaration but {@code 'element'} argument is a {@code Runnable} descriptor
|
||||
* @param closeCallback callback to be notified on target hint close (if any)
|
||||
* @param documentation precalculated documentation
|
||||
* @param closeOnSneeze flag that defines whether quick doc control should be as non-obtrusive as possible. E.g. there are at least
|
||||
* two possible situations - the quick doc is shown automatically on mouse over element; the quick doc is shown
|
||||
* on explicit action call (Ctrl+Q). We want to close the doc on, say, editor viewport position change
|
||||
* at the first situation but don't want to do that at the second
|
||||
* @param useStoredPopupSize whether popup size previously set by user (via mouse-dragging) should be used, or default one should be used
|
||||
*/
|
||||
public void showJavaDocInfo(@NotNull Editor editor,
|
||||
@@ -1425,7 +1425,8 @@ public class DocumentationManager extends DockablePopupManager<DocumentationComp
|
||||
return LibraryUtil.findLibraryEntry(virtualFile, project);
|
||||
}
|
||||
|
||||
protected ActionCallback cancelAndFetchDocInfoByLink(@NotNull DocumentationComponent component, @NotNull DocumentationCollector provider) {
|
||||
protected ActionCallback cancelAndFetchDocInfoByLink(@NotNull DocumentationComponent component,
|
||||
@NotNull DocumentationCollector provider) {
|
||||
return cancelAndFetchDocInfo(component, provider);
|
||||
}
|
||||
|
||||
@@ -1802,7 +1803,10 @@ public class DocumentationManager extends DockablePopupManager<DocumentationComp
|
||||
@NlsSafe @Nullable String externalUrl,
|
||||
@Nullable DocumentationProvider provider
|
||||
) {
|
||||
return decorate(text, getLocationText(element), getExternalText(element, externalUrl, provider));
|
||||
HtmlChunk locationInfo = Optional.ofNullable(provider)
|
||||
.map(it -> it.getLocationInfo(element))
|
||||
.orElseGet(() -> DocumentationProviderEx.getDefaultLocationInfo(element));
|
||||
return decorate(text, locationInfo, getExternalText(element, externalUrl, provider));
|
||||
}
|
||||
|
||||
@Internal
|
||||
@@ -1928,7 +1932,8 @@ public class DocumentationManager extends DockablePopupManager<DocumentationComp
|
||||
try {
|
||||
return new URL(url).toURI().getHost();
|
||||
}
|
||||
catch (URISyntaxException | MalformedURLException ignored) { }
|
||||
catch (URISyntaxException | MalformedURLException ignored) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1955,46 +1960,4 @@ public class DocumentationManager extends DockablePopupManager<DocumentationComp
|
||||
public static String addExternalLinksIcon(String text) {
|
||||
return EXTERNAL_LINK_PATTERN.matcher(text).replaceAll(EXTERNAL_LINK_REPLACEMENT);
|
||||
}
|
||||
|
||||
@RequiresReadLock
|
||||
@RequiresBackgroundThread
|
||||
private static @Nullable HtmlChunk getLocationText(@Nullable PsiElement element) {
|
||||
if (element != null) {
|
||||
PsiFile file = element.getContainingFile();
|
||||
VirtualFile vfile = file == null ? null : file.getVirtualFile();
|
||||
|
||||
if (vfile == null) return null;
|
||||
|
||||
SearchScope scope = element.getUseScope();
|
||||
if (scope instanceof LocalSearchScope) {
|
||||
return null;
|
||||
}
|
||||
|
||||
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(element.getProject()).getFileIndex();
|
||||
Module module = fileIndex.getModuleForFile(vfile);
|
||||
|
||||
if (module != null && !ModuleType.isInternal(module)) {
|
||||
if (ModuleManager.getInstance(element.getProject()).getModules().length == 1) return null;
|
||||
return HtmlChunk.fragment(
|
||||
HtmlChunk.tag("icon").attr("src", ModuleType.get(module).getId()),
|
||||
HtmlChunk.nbsp(),
|
||||
HtmlChunk.text(module.getName())
|
||||
);
|
||||
}
|
||||
else {
|
||||
List<OrderEntry> entries = fileIndex.getOrderEntriesForFile(vfile);
|
||||
for (OrderEntry order : entries) {
|
||||
if (order instanceof LibraryOrderEntry || order instanceof JdkOrderEntry) {
|
||||
return HtmlChunk.fragment(
|
||||
HtmlChunk.tag("icon").attr("src", "AllIcons.Nodes.PpLibFolder"),
|
||||
HtmlChunk.nbsp(),
|
||||
HtmlChunk.text(order.getPresentableName())
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import java.awt.*;
|
||||
|
||||
final class CombinedPopupLayout implements LayoutManager {
|
||||
|
||||
private static final int MAX_POPUP_WIDTH = 650;
|
||||
private static final int MAX_POPUP_WIDTH = 950;
|
||||
|
||||
private final @Nullable JComponent highlightInfoComponent;
|
||||
private final @Nullable JComponent quickDocComponent;
|
||||
|
||||
+16
-1
@@ -39,6 +39,10 @@ public final class HtmlSyntaxInfoUtil {
|
||||
return appendStyledSpan(new StringBuilder(), attributesKey, value).toString();
|
||||
}
|
||||
|
||||
public static @NotNull String getStyledSpan(@NotNull TextAttributes attributes, @Nullable String value) {
|
||||
return appendStyledSpan(new StringBuilder(), attributes, value).toString();
|
||||
}
|
||||
|
||||
public static @NotNull String getHighlightedByLexerAndEncodedAsHtmlCodeSnippet(
|
||||
@NotNull Project project,
|
||||
@NotNull Language language,
|
||||
@@ -86,9 +90,20 @@ public final class HtmlSyntaxInfoUtil {
|
||||
@NotNull Project project,
|
||||
@NotNull Language language,
|
||||
@Nullable String codeSnippet
|
||||
) {
|
||||
return appendHighlightedByLexerAndEncodedAsHtmlCodeSnippet(buffer, project, language, codeSnippet, true);
|
||||
}
|
||||
|
||||
public static @NotNull StringBuilder appendHighlightedByLexerAndEncodedAsHtmlCodeSnippet(
|
||||
@NotNull StringBuilder buffer,
|
||||
@NotNull Project project,
|
||||
@NotNull Language language,
|
||||
@Nullable String codeSnippet,
|
||||
boolean doTrimIndent
|
||||
) {
|
||||
codeSnippet = StringUtil.notNullize(codeSnippet);
|
||||
String zeroIndentCode = StringsKt.trimIndent(codeSnippet).replace("\t", " ");
|
||||
String trimmed = doTrimIndent ? StringsKt.trimIndent(codeSnippet) : codeSnippet;
|
||||
String zeroIndentCode = trimmed.replace("\t", " ");
|
||||
PsiFile fakePsiFile = PsiFileFactory.getInstance(project).createFileFromText(language, codeSnippet);
|
||||
EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme();
|
||||
if (!zeroIndentCode.isEmpty()) {
|
||||
|
||||
@@ -506,6 +506,7 @@ checkbox.left.toolwindow.layout=Side-by-side layout on the left
|
||||
checkbox.right.toolwindow.layout=Side-by-side layout on the right
|
||||
checkbox.show.editor.preview.popup=Show code lens on scrollbar hover
|
||||
checkbox.show.rendered.doc.comments=Render documentation comments
|
||||
checkbox.enable.doc.syntax.highlighting=Enable code highlighting in documentation components
|
||||
checkbox.also.in.reader.mode=Also in <hyperlink>Reader mode</hyperlink>
|
||||
checkbox.smooth.scrolling=Smooth scrolling
|
||||
checkbox.smooth.scrolling.description=When using the mouse wheel/touchpad, the entire interface will scroll smoothly instead of line by line
|
||||
|
||||
+9
@@ -68,6 +68,7 @@ public class EditorSettingsExternalizable implements PersistentStateComponent<Ed
|
||||
public boolean SHOW_BREADCRUMBS_ABOVE = false;
|
||||
public boolean SHOW_BREADCRUMBS = true;
|
||||
public boolean ENABLE_RENDERED_DOC = false;
|
||||
public boolean ENABLE_DOC_SYNTAX_HIGHLIGHTING = true;
|
||||
|
||||
public boolean SMART_HOME = true;
|
||||
|
||||
@@ -344,6 +345,14 @@ public class EditorSettingsExternalizable implements PersistentStateComponent<Ed
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isDocSyntaxHighlightingEnabled() {
|
||||
return myOptions.ENABLE_DOC_SYNTAX_HIGHLIGHTING;
|
||||
}
|
||||
|
||||
public void setDocSyntaxHighlightingEnabled(boolean value) {
|
||||
myOptions.ENABLE_DOC_SYNTAX_HIGHLIGHTING = value;
|
||||
}
|
||||
|
||||
public boolean isBlockCursor() {
|
||||
return myOptions.IS_BLOCK_CURSOR;
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ public class ThemeJsonDocumentationProvider extends AbstractDocumentationProvide
|
||||
final PsiClassType type = JavaPsiFacade.getElementFactory(element.getProject()).createTypeByFQClassName(source);
|
||||
|
||||
StringBuilder typeBuilder = new StringBuilder();
|
||||
JavaDocInfoGeneratorFactory.create(element.getProject(), null, false).generateType(typeBuilder, type, element);
|
||||
JavaDocInfoGeneratorFactory.create(element.getProject(), null).generateType(typeBuilder, type, element);
|
||||
return typeBuilder.toString(); //NON-NLS
|
||||
});
|
||||
}
|
||||
|
||||
+3
-4
@@ -49,10 +49,9 @@ public class ExtensionPointDocumentationProviderTest extends LightJavaCodeInsigh
|
||||
assertEquals(
|
||||
"<div class=\"definition\"><pre><b>foo.bar</b><br/>" +
|
||||
pluginXml +
|
||||
"<div class='definition'><pre><span style=\"color:#000080;font-weight:bold;\">public</span> <span style=\"color:#000080;font-weight:bold;\">class</span> <span style=\"color:#000000;\">MyExtensionPoint</span>\n" +
|
||||
"<span style=\"color:#000080;font-weight:bold;\">extends </span><a href=\"psi_element://java.lang.Object\"><code><span style=\"color:#000000;\">Object</span></code></a><br><span class='grayed'>defined in </span><a href=\"psi_element://bar\"><code><span style=\"color:#000000;\">bar</span></code></a></pre></div><div class='content'>\n" +
|
||||
"<div class='definition'><pre><span style=\"color:#000080;font-weight:bold;\">public</span> <span style=\"color:#000080;font-weight:bold;\">class</span> <span style=\"color:#000000;\">MyExtensionPoint</span></pre></div><div class='content'>\n" +
|
||||
" MyExtensionPoint JavaDoc.\n" +
|
||||
" </div><table class='sections'><p></table><table class=\"sections\"><tr><td class=\"section\" valign=\"top\"><p><a href=\"psi_element://bar.MyExtensionPoint#implementationClass\"><code>implementationClass</code></a></p></td><td valign=\"top\">String (required)</td></tr><tr><td class=\"section\" valign=\"top\"><p><a href=\"psi_element://bar.MyExtensionPoint#stringCanBeEmpty\"><code>stringCanBeEmpty</code></a></p></td><td valign=\"top\">String (required, empty allowed)</td></tr><tr><td class=\"section\" valign=\"top\"><p><a href=\"psi_element://bar.MyExtensionPoint#intValue\"><code><intValue></code></a></p></td><td valign=\"top\">Integer</td></tr><br/></table></pre></div><div class=\"content\"><a href=\"https://jb.gg/ipe?extensions=foo.bar\">Show Usages in IntelliJ Platform Explorer</a></div><div class=\"content\"><h2>Extension Point Implementation</h2><div class='definition'><pre><span style=\"color:#000080;font-weight:bold;\">public</span> <span style=\"color:#000080;font-weight:bold;\">interface</span> <span style=\"color:#000000;\">MyExtension</span><br><span class='grayed'>defined in </span><a href=\"psi_element://bar\"><code><span style=\"color:#000000;\">bar</span></code></a></pre></div><div class='content'>\n" +
|
||||
" </div><table class='sections'><p></table><table class=\"sections\"><tr><td class=\"section\" valign=\"top\"><p><a href=\"psi_element://bar.MyExtensionPoint#implementationClass\"><code>implementationClass</code></a></p></td><td valign=\"top\">String (required)</td></tr><tr><td class=\"section\" valign=\"top\"><p><a href=\"psi_element://bar.MyExtensionPoint#stringCanBeEmpty\"><code>stringCanBeEmpty</code></a></p></td><td valign=\"top\">String (required, empty allowed)</td></tr><tr><td class=\"section\" valign=\"top\"><p><a href=\"psi_element://bar.MyExtensionPoint#intValue\"><code><intValue></code></a></p></td><td valign=\"top\">Integer</td></tr><br/></table></pre></div><div class=\"content\"><a href=\"https://jb.gg/ipe?extensions=foo.bar\">Show Usages in IntelliJ Platform Explorer</a></div><div class=\"content\"><h2>Extension Point Implementation</h2><div class='definition'><pre><span style=\"color:#000080;font-weight:bold;\">public</span> <span style=\"color:#000080;font-weight:bold;\">interface</span> <span style=\"color:#000000;\">MyExtension</span></pre></div><div class='content'>\n" +
|
||||
" My Extension Javadoc.\n" +
|
||||
" </div><table class='sections'><p></table></div>",
|
||||
provider.generateDoc(docElement, getOriginalElement()));
|
||||
@@ -74,7 +73,7 @@ public class ExtensionPointDocumentationProviderTest extends LightJavaCodeInsigh
|
||||
provider.getQuickNavigateInfo(docElement, getOriginalElement()));
|
||||
|
||||
assertEquals(
|
||||
"<div class=\"definition\"><pre><b>foo.bar</b><br/>interfaceExtensionPointDocumentation.xml</pre></div><div class=\"content\"><a href=\"https://jb.gg/ipe?extensions=foo.bar\">Show Usages in IntelliJ Platform Explorer</a></div><div class=\"content\"><h2>Extension Point Implementation</h2><div class='definition'><pre><span style=\"color:#000080;font-weight:bold;\">public</span> <span style=\"color:#000080;font-weight:bold;\">interface</span> <span style=\"color:#000000;\">MyExtension</span><br><span class='grayed'>defined in </span><a href=\"psi_element://bar\"><code><span style=\"color:#000000;\">bar</span></code></a></pre></div><div class='content'>\n" +
|
||||
"<div class=\"definition\"><pre><b>foo.bar</b><br/>interfaceExtensionPointDocumentation.xml</pre></div><div class=\"content\"><a href=\"https://jb.gg/ipe?extensions=foo.bar\">Show Usages in IntelliJ Platform Explorer</a></div><div class=\"content\"><h2>Extension Point Implementation</h2><div class='definition'><pre><span style=\"color:#000080;font-weight:bold;\">public</span> <span style=\"color:#000080;font-weight:bold;\">interface</span> <span style=\"color:#000000;\">MyExtension</span></pre></div><div class='content'>\n" +
|
||||
" My Extension Javadoc.\n" +
|
||||
" </div><table class='sections'><p></table></div>",
|
||||
provider.generateDoc(docElement, getOriginalElement()));
|
||||
|
||||
@@ -29,7 +29,7 @@ class GradleGroovyProperty(
|
||||
val value = myProperty.value
|
||||
val result = StringBuilder()
|
||||
result.append("<PRE>")
|
||||
JavaDocInfoGeneratorFactory.create(context.project, null, false).generateType(result, propertyType, context, true)
|
||||
JavaDocInfoGeneratorFactory.create(context.project, null).generateType(result, propertyType, context, true)
|
||||
result.append(" " + myProperty.name)
|
||||
val hasInitializer = !value.isNullOrBlank()
|
||||
if (hasInitializer) {
|
||||
|
||||
@@ -27,7 +27,7 @@ class GradleTaskProperty(
|
||||
private val doc by lazyPub {
|
||||
val result = StringBuilder()
|
||||
result.append("<PRE>")
|
||||
JavaDocInfoGeneratorFactory.create(context.project, null, false).generateType(result, propertyType, myContext, true)
|
||||
JavaDocInfoGeneratorFactory.create(context.project, null).generateType(result, propertyType, myContext, true)
|
||||
result.append(" " + task.name)
|
||||
result.append("</PRE>")
|
||||
task.description?.let(result::append)
|
||||
|
||||
+61
-15
@@ -1,6 +1,10 @@
|
||||
// Copyright 2000-2020 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 org.jetbrains.plugins.groovy.lang.documentation;
|
||||
|
||||
import com.intellij.codeInsight.javadoc.JavaDocInfoGeneratorFactory;
|
||||
import com.intellij.ide.highlighter.JavaHighlightingColors;
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||
import com.intellij.openapi.editor.richcopy.HtmlSyntaxInfoUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiAnnotation;
|
||||
import com.intellij.psi.PsiElement;
|
||||
@@ -10,11 +14,13 @@ import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.util.MethodSignature;
|
||||
import com.intellij.util.ArrayUtilRt;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.GroovyBundle;
|
||||
import org.jetbrains.plugins.groovy.highlighter.GroovySyntaxHighlighter;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifier;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
|
||||
import org.jetbrains.plugins.groovy.transformations.impl.namedVariant.NamedParamData;
|
||||
import org.jetbrains.plugins.groovy.transformations.impl.namedVariant.NamedParamsUtil;
|
||||
@@ -30,22 +36,39 @@ import java.util.Set;
|
||||
public final class GroovyPresentationUtil {
|
||||
private static final int CONSTRAINTS_NUMBER = 2;
|
||||
|
||||
public static void appendParameterPresentation(GrParameter parameter,
|
||||
PsiSubstitutor substitutor,
|
||||
TypePresentation typePresentation,
|
||||
StringBuilder builder) {
|
||||
if (presentNamedParameters(builder, parameter)) return;
|
||||
public static void appendParameterPresentation(
|
||||
GrParameter parameter,
|
||||
PsiSubstitutor substitutor,
|
||||
TypePresentation typePresentation,
|
||||
StringBuilder builder,
|
||||
boolean doHighlighting
|
||||
) {
|
||||
if (presentNamedParameters(builder, parameter, doHighlighting)) return;
|
||||
|
||||
for (PsiAnnotation annotation : parameter.getModifierList().getAnnotations()) {
|
||||
builder.append(annotation.getText()).append(' ');
|
||||
appendStyledSpan(doHighlighting, builder, GroovySyntaxHighlighter.ANNOTATION, annotation.getText());
|
||||
builder.append(' ');
|
||||
}
|
||||
|
||||
PsiType type = parameter.getTypeGroovy();
|
||||
type = substitutor.substitute(type);
|
||||
|
||||
if (typePresentation == TypePresentation.LINK) {
|
||||
PsiImplUtil.appendTypeString(builder, type, parameter);
|
||||
builder.append(' ').append(parameter.getName());
|
||||
if (type != null) {
|
||||
StringBuilder typeBuilder = new StringBuilder();
|
||||
JavaDocInfoGeneratorFactory.create(parameter.getProject(), null).generateType(typeBuilder, type, parameter);
|
||||
if (doHighlighting) {
|
||||
builder.append(typeBuilder);
|
||||
}
|
||||
else {
|
||||
builder.append(StringUtil.removeHtmlTags(typeBuilder.toString(), true));
|
||||
}
|
||||
}
|
||||
else {
|
||||
appendStyledSpan(doHighlighting, builder, GroovySyntaxHighlighter.KEYWORD, GrModifier.DEF);
|
||||
}
|
||||
builder.append(' ');
|
||||
appendStyledSpan(doHighlighting, builder, GroovySyntaxHighlighter.PARAMETER, parameter.getName());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -97,12 +120,6 @@ public final class GroovyPresentationUtil {
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean presentNamedParameters(@NotNull StringBuilder buffer, @NotNull GrParameter parameter) {
|
||||
List<NamedParamData> pairs = NamedParamsUtil.collectNamedParams(parameter);
|
||||
StringUtil.join(pairs, namedParam -> namedParam.getName() + ": " + namedParam.getType().getPresentableText(), ", ", buffer);
|
||||
return !pairs.isEmpty();
|
||||
}
|
||||
|
||||
public static String getSignaturePresentation(MethodSignature signature) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append(signature.getName()).append('(');
|
||||
@@ -114,4 +131,33 @@ public final class GroovyPresentationUtil {
|
||||
builder.append(")");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
private static @NotNull StringBuilder appendStyledSpan(
|
||||
boolean doHighlighting,
|
||||
@NotNull StringBuilder buffer,
|
||||
@NotNull TextAttributesKey attributesKey,
|
||||
@Nullable String value
|
||||
) {
|
||||
if (doHighlighting) {
|
||||
HtmlSyntaxInfoUtil.appendStyledSpan(buffer, attributesKey, value);
|
||||
}
|
||||
else {
|
||||
buffer.append(value);
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
private static boolean presentNamedParameters(@NotNull StringBuilder buffer, @NotNull GrParameter parameter, boolean doHighlighting) {
|
||||
List<NamedParamData> pairs = NamedParamsUtil.collectNamedParams(parameter);
|
||||
for (int i = 0; i < pairs.size(); i++) {
|
||||
NamedParamData namedParam = pairs.get(i);
|
||||
appendStyledSpan(doHighlighting, buffer, GroovySyntaxHighlighter.PARAMETER, namedParam.getName());
|
||||
appendStyledSpan(doHighlighting, buffer, JavaHighlightingColors.OPERATION_SIGN, ": ");
|
||||
appendStyledSpan(doHighlighting, buffer, GroovySyntaxHighlighter.CLASS_REFERENCE, namedParam.getType().getPresentableText());
|
||||
if (i != pairs.size() - 1) {
|
||||
appendStyledSpan(doHighlighting, buffer, JavaHighlightingColors.COMMA, ", ");
|
||||
}
|
||||
}
|
||||
return !pairs.isEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -26,6 +26,7 @@ import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.codeInspection.utils.ControlFlowUtils;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.highlighter.GroovyDocSyntaxHighlighter;
|
||||
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes;
|
||||
import org.jetbrains.plugins.groovy.lang.lexer.TokenSets;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.*;
|
||||
@@ -798,7 +799,7 @@ public final class PsiImplUtil {
|
||||
|
||||
public static void appendTypeString(StringBuilder buffer, final PsiType type, PsiElement context) {
|
||||
if (type != null) {
|
||||
JavaDocInfoGeneratorFactory.create(context.getProject(), null, false).generateType(buffer, type, context);
|
||||
JavaDocInfoGeneratorFactory.create(context.getProject(), null).generateType(buffer, type, context);
|
||||
}
|
||||
else {
|
||||
buffer.append(GrModifier.DEF);
|
||||
|
||||
+135
@@ -0,0 +1,135 @@
|
||||
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.plugins.groovy.lang.documentation;
|
||||
|
||||
import com.intellij.codeInsight.javadoc.JavaDocHighlightingManager;
|
||||
import com.intellij.ide.highlighter.JavaHighlightingColors;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||
import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.psi.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.groovy.highlighter.GroovySyntaxHighlighter;
|
||||
|
||||
|
||||
public class GroovyDocHighlightingManager implements JavaDocHighlightingManager {
|
||||
|
||||
private static final @NotNull GroovyDocHighlightingManager INSTANCE = new GroovyDocHighlightingManager();
|
||||
|
||||
public static @NotNull GroovyDocHighlightingManager getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
private static @NotNull TextAttributes resolveAttributes(@NotNull TextAttributesKey attributesKey) {
|
||||
return EditorColorsManager.getInstance().getGlobalScheme().getAttributes(attributesKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getClassDeclarationAttributes(@NotNull PsiClass aClass) {
|
||||
if (aClass.isInterface()) return getInterfaceNameAttributes();
|
||||
if (aClass.isEnum()) return getEnumNameAttributes();
|
||||
if (aClass instanceof PsiAnonymousClass) return getAnonymousClassNameAttributes();
|
||||
if (aClass.hasModifierProperty(PsiModifier.ABSTRACT)) return getAbstractClassNameAttributes();
|
||||
return getClassNameAttributes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getMethodDeclarationAttributes(@NotNull PsiMethod method) {
|
||||
return method.isConstructor()
|
||||
? getConstructorDeclarationAttributes()
|
||||
: getMethodDeclarationAttributes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getFieldDeclarationAttributes(@NotNull PsiField field) {
|
||||
boolean isStatic = field.hasModifierProperty(PsiModifier.STATIC);
|
||||
return isStatic ? getStaticFieldAttributes() : getInstanceFieldAttributes();
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getInterfaceNameAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.INTERFACE_NAME);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getEnumNameAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.ENUM_NAME);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getAnonymousClassNameAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.ANONYMOUS_CLASS_NAME);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getAbstractClassNameAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.ABSTRACT_CLASS_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getClassNameAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.CLASS_REFERENCE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getKeywordAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.KEYWORD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getCommaAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.COMMA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getParameterAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.PARAMETER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getTypeParameterNameAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.TYPE_PARAMETER);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getStaticFieldAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.STATIC_FIELD);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getInstanceFieldAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.INSTANCE_FIELD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getOperationSignAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.OPERATION_SIGN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getLocalVariableAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.LOCAL_VARIABLE);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getConstructorDeclarationAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.CONSTRUCTOR_DECLARATION);
|
||||
}
|
||||
|
||||
public @NotNull TextAttributes getMethodDeclarationAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.METHOD_DECLARATION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getParenthesesAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.PARENTHESES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getDotAttributes() {
|
||||
return resolveAttributes(JavaHighlightingColors.DOT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getBracketsAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.BRACKETS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextAttributes getMethodCallAttributes() {
|
||||
return resolveAttributes(GroovySyntaxHighlighter.METHOD_CALL);
|
||||
}
|
||||
|
||||
}
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2021 JetBrains s.r.o. and contributors. 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 org.jetbrains.plugins.groovy.lang.documentation;
|
||||
|
||||
import com.intellij.codeInsight.javadoc.JavaDocInfoGenerator;
|
||||
@@ -11,8 +11,8 @@ import static org.jetbrains.plugins.groovy.lang.groovydoc.lexer.GroovyDocTokenTy
|
||||
|
||||
public class GroovyDocInfoGenerator extends JavaDocInfoGenerator {
|
||||
|
||||
public GroovyDocInfoGenerator(PsiElement element, boolean isGenerationForRenderedDoc) {
|
||||
super(element.getProject(), element, isGenerationForRenderedDoc);
|
||||
public GroovyDocInfoGenerator(PsiElement element, boolean isGenerationForRenderedDoc, boolean doSyntaxHighlighting) {
|
||||
super(element.getProject(), element, GroovyDocHighlightingManager.getInstance(), isGenerationForRenderedDoc, doSyntaxHighlighting);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+117
-73
@@ -14,6 +14,9 @@ import com.intellij.lang.documentation.CodeDocumentationProvider;
|
||||
import com.intellij.lang.documentation.CompositeDocumentationProvider;
|
||||
import com.intellij.lang.documentation.ExternalDocumentationProvider;
|
||||
import com.intellij.lang.java.JavaDocumentationProvider;
|
||||
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
|
||||
import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.openapi.editor.richcopy.HtmlSyntaxInfoUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.text.HtmlChunk;
|
||||
@@ -57,6 +60,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
|
||||
/**
|
||||
* @author ven
|
||||
*/
|
||||
@@ -67,6 +71,36 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
@NonNls private static final String THROWS_TAG = "@throws";
|
||||
private static final String BODY_HTML = "</body></html>";
|
||||
|
||||
private static void appendStyledSpan(
|
||||
@NotNull StringBuilder buffer,
|
||||
@NotNull TextAttributes attributes,
|
||||
@Nullable String value
|
||||
) {
|
||||
if (doSyntaxHighlighting()) {
|
||||
HtmlSyntaxInfoUtil.appendStyledSpan(buffer, attributes, value);
|
||||
}
|
||||
else {
|
||||
buffer.append(value);
|
||||
}
|
||||
}
|
||||
|
||||
private static void appendStyledSpan(
|
||||
@NotNull StringBuilder buffer,
|
||||
@Nullable String value,
|
||||
String @NotNull ... properties
|
||||
) {
|
||||
if (doSyntaxHighlighting()) {
|
||||
HtmlSyntaxInfoUtil.appendStyledSpan(buffer, value, properties);
|
||||
}
|
||||
else {
|
||||
buffer.append(value);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean doSyntaxHighlighting() {
|
||||
return EditorSettingsExternalizable.getInstance().isDocSyntaxHighlightingEnabled();
|
||||
}
|
||||
|
||||
private static PsiSubstitutor calcSubstitutor(PsiElement originalElement) {
|
||||
PsiSubstitutor substitutor = PsiSubstitutor.EMPTY;
|
||||
if (originalElement instanceof GrReferenceExpression) {
|
||||
@@ -75,7 +109,6 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
return substitutor;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public @Nls String getQuickNavigateInfo(PsiElement element, PsiElement originalElement) {
|
||||
@@ -84,7 +117,7 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
PsiVariable variable = (PsiVariable)element;
|
||||
|
||||
if (originalElement instanceof GrVariableDeclaration && ((GrVariableDeclaration)originalElement).getVariables().length > 1) {
|
||||
for (GrVariable var :((GrVariableDeclaration)originalElement).getVariables()) {
|
||||
for (GrVariable var : ((GrVariableDeclaration)originalElement).getVariables()) {
|
||||
generateVariableInfo(originalElement, buffer, var);
|
||||
buffer.append("\n\n");
|
||||
}
|
||||
@@ -98,14 +131,15 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
@Nls StringBuilder buffer = new StringBuilder();
|
||||
PsiMethod method = (PsiMethod)element;
|
||||
if (method instanceof GrGdkMethod) {
|
||||
buffer.append("[").append(GroovyBundle.message("documentation.gdk.label")).append("] ");
|
||||
appendStyledSpan(buffer, "[" + GroovyBundle.message("documentation.gdk.label") + "]", "color: #909090");
|
||||
}
|
||||
else {
|
||||
PsiClass hisClass = method.getContainingClass();
|
||||
if (hisClass != null) {
|
||||
String qName = hisClass.getQualifiedName();
|
||||
if (qName != null) {
|
||||
buffer.append(qName).append("\n");
|
||||
appendStyledSpan(buffer, GroovyDocHighlightingManager.getInstance().getClassDeclarationAttributes(hisClass), qName);
|
||||
buffer.append("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -113,34 +147,36 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
PsiSubstitutor substitutor = calcSubstitutor(originalElement);
|
||||
if (!method.isConstructor()) {
|
||||
final PsiType substituted = substitutor.substitute(PsiUtil.getSmartReturnType(method));
|
||||
PsiImplUtil.appendTypeString(buffer, substituted, originalElement);
|
||||
appendTypeString(buffer, substituted, originalElement, false);
|
||||
buffer.append(" ");
|
||||
}
|
||||
buffer.append(method.getName()).append(" ");
|
||||
buffer.append("(");
|
||||
appendStyledSpan(buffer, GroovyDocHighlightingManager.getInstance().getMethodDeclarationAttributes(method), method.getName());
|
||||
appendStyledSpan(buffer, GroovyDocHighlightingManager.getInstance().getParenthesesAttributes(), "(");
|
||||
PsiParameter[] parameters = method.getParameterList().getParameters();
|
||||
for (int i = 0; i < parameters.length; i++) {
|
||||
PsiParameter parameter = parameters[i];
|
||||
if (i > 0) buffer.append(", ");
|
||||
if (i > 0) appendStyledSpan(buffer, GroovyDocHighlightingManager.getInstance().getCommaAttributes(), ", ");
|
||||
if (parameter instanceof GrParameter) {
|
||||
GroovyPresentationUtil.appendParameterPresentation((GrParameter)parameter, substitutor, TypePresentation.LINK, buffer);
|
||||
GroovyPresentationUtil.appendParameterPresentation((GrParameter)parameter, substitutor, TypePresentation.LINK, buffer, doSyntaxHighlighting());
|
||||
}
|
||||
else {
|
||||
PsiType type = parameter.getType();
|
||||
PsiImplUtil.appendTypeString(buffer, substitutor.substitute(type), originalElement);
|
||||
appendTypeString(buffer, substitutor.substitute(type), originalElement, false);
|
||||
buffer.append(" ");
|
||||
buffer.append(parameter.getName());
|
||||
appendStyledSpan(buffer, GroovyDocHighlightingManager.getInstance().getParameterAttributes(), parameter.getName());
|
||||
}
|
||||
}
|
||||
buffer.append(")");
|
||||
appendStyledSpan(buffer, GroovyDocHighlightingManager.getInstance().getParenthesesAttributes(), ")");
|
||||
final PsiClassType[] referencedTypes = method.getThrowsList().getReferencedTypes();
|
||||
if (referencedTypes.length > 0) {
|
||||
buffer.append("\nthrows ");
|
||||
for (PsiClassType referencedType : referencedTypes) {
|
||||
PsiImplUtil.appendTypeString(buffer, referencedType, originalElement);
|
||||
buffer.append(", ");
|
||||
appendStyledSpan(buffer, GroovyDocHighlightingManager.getInstance().getKeywordAttributes(), "\nthrows ");
|
||||
for (int i = 0; i < referencedTypes.length; i++) {
|
||||
PsiClassType referencedType = referencedTypes[i];
|
||||
appendTypeString(buffer, referencedType, originalElement, false);
|
||||
if (i != referencedTypes.length - 1) {
|
||||
appendStyledSpan(buffer, GroovyDocHighlightingManager.getInstance().getCommaAttributes(), ", ");
|
||||
}
|
||||
}
|
||||
buffer.delete(buffer.length() - 2, buffer.length());
|
||||
}
|
||||
return buffer.toString();
|
||||
}
|
||||
@@ -155,15 +191,19 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
if (variable instanceof PsiField) {
|
||||
final PsiClass parentClass = ((PsiField)variable).getContainingClass();
|
||||
if (parentClass != null) {
|
||||
buffer.append(JavaDocUtil.getShortestClassName(parentClass, variable));
|
||||
appendElementLink(buffer, parentClass, JavaDocUtil.getShortestClassName(parentClass, variable));
|
||||
newLine(buffer);
|
||||
}
|
||||
generateModifiers(buffer, variable);
|
||||
}
|
||||
final PsiType type = variable instanceof GrVariable ? ((GrVariable)variable).getDeclaredType() : variable.getType();
|
||||
PsiImplUtil.appendTypeString(buffer, calcSubstitutor(originalElement).substitute(type), originalElement);
|
||||
appendTypeString(buffer, calcSubstitutor(originalElement).substitute(type), originalElement, false);
|
||||
buffer.append(" ");
|
||||
buffer.append(variable.getName());
|
||||
TextAttributes varAttributes =
|
||||
variable instanceof PsiField
|
||||
? GroovyDocHighlightingManager.getInstance().getFieldDeclarationAttributes((PsiField)variable)
|
||||
: GroovyDocHighlightingManager.getInstance().getLocalVariableAttributes();
|
||||
appendStyledSpan(buffer, varAttributes, variable.getName());
|
||||
|
||||
if (variable instanceof GrVariable) {
|
||||
newLine(buffer);
|
||||
@@ -176,12 +216,12 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
}
|
||||
|
||||
if (originalElement != null) {
|
||||
appendInferredType(originalElement, (GrVariable)variable, buffer);
|
||||
appendInferredType(originalElement, (GrVariable)variable, buffer, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void appendInferredType(PsiElement originalElement, GrVariable variable, @Nls StringBuilder buffer) {
|
||||
private static void appendInferredType(PsiElement originalElement, GrVariable variable, @Nls StringBuilder buffer, boolean isRendered) {
|
||||
PsiType inferredType = null;
|
||||
if (PsiImplUtil.isWhiteSpaceOrNls(originalElement)) {
|
||||
originalElement = PsiTreeUtil.prevLeaf(originalElement);
|
||||
@@ -199,19 +239,20 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
inferredType = ((GrVariable)originalElement).getTypeGroovy();
|
||||
}
|
||||
|
||||
String typeLabel = inferredType != null
|
||||
? GroovyBundle.message("documentation.inferred.type.label")
|
||||
: GroovyBundle.message("documentation.cannot.infer.type.label");
|
||||
appendStyledSpan(buffer, "[" + typeLabel + "]", "color: #909090");
|
||||
if (inferredType != null) {
|
||||
buffer.append("[").append(GroovyBundle.message("documentation.inferred.type.label")).append("]").append(" ");
|
||||
appendTypeString(buffer, inferredType, originalElement);
|
||||
}
|
||||
else {
|
||||
buffer.append("[").append(GroovyBundle.message("documentation.cannot.infer.type.label")).append("]");
|
||||
buffer.append(" ");
|
||||
appendTypeString(buffer, inferredType, originalElement, isRendered);
|
||||
}
|
||||
}
|
||||
|
||||
private static void generateModifiers(@Nls StringBuilder buffer, PsiModifierListOwner element) {
|
||||
String modifiers = PsiFormatUtil.formatModifiers(element, PsiFormatUtilBase.JAVADOC_MODIFIERS_ONLY);
|
||||
if (!modifiers.isEmpty()) {
|
||||
buffer.append(modifiers);
|
||||
appendStyledSpan(buffer, GroovyDocHighlightingManager.getInstance().getKeywordAttributes(), modifiers);
|
||||
buffer.append(" ");
|
||||
}
|
||||
}
|
||||
@@ -224,9 +265,12 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
@Nls StringBuilder buffer = new StringBuilder();
|
||||
GroovyFile file = (GroovyFile)aClass.getContainingFile();
|
||||
|
||||
GroovyDocHighlightingManager highlightingManager = GroovyDocHighlightingManager.getInstance();
|
||||
|
||||
String packageName = file.getPackageName();
|
||||
if (!packageName.isEmpty()) {
|
||||
buffer.append(packageName).append("\n");
|
||||
appendStyledSpan(buffer, highlightingManager.getClassNameAttributes(), packageName);
|
||||
buffer.append("\n");
|
||||
}
|
||||
|
||||
final String classString = aClass.isInterface()
|
||||
@@ -236,36 +280,42 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
: aClass.isEnum()
|
||||
? GroovyBundle.message("groovy.term.enum")
|
||||
: GroovyBundle.message("groovy.term.class");
|
||||
buffer.append(classString).append(" ").append(aClass.getName());
|
||||
appendStyledSpan(buffer, highlightingManager.getKeywordAttributes(), classString);
|
||||
buffer.append(" ");
|
||||
appendStyledSpan(buffer, highlightingManager.getClassDeclarationAttributes(aClass), aClass.getName());
|
||||
|
||||
JavaDocumentationProvider.generateTypeParameters(aClass, buffer);
|
||||
JavaDocumentationProvider.generateTypeParameters(aClass, buffer, highlightingManager);
|
||||
|
||||
JavaDocumentationProvider.writeExtends(aClass, buffer, aClass.getExtendsListTypes());
|
||||
JavaDocumentationProvider.writeImplements(aClass, buffer, aClass.getImplementsListTypes());
|
||||
JavaDocumentationProvider.writeExtends(aClass, buffer, aClass.getExtendsListTypes(), highlightingManager);
|
||||
JavaDocumentationProvider.writeImplements(aClass, buffer, aClass.getImplementsListTypes(), highlightingManager);
|
||||
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public static void appendTypeString(@Nls @NotNull StringBuilder buffer, @Nullable PsiType type, PsiElement context) {
|
||||
public static void appendTypeString(@Nls @NotNull StringBuilder buffer, @Nullable PsiType type, PsiElement context, boolean isRendered) {
|
||||
if (type instanceof GrTraitType) {
|
||||
generateTraitType(buffer, ((GrTraitType)type), context);
|
||||
generateTraitType(buffer, ((GrTraitType)type), context, isRendered);
|
||||
}
|
||||
else if (type != null) {
|
||||
JavaDocInfoGeneratorFactory.create(context.getProject(), null, false).generateType(buffer, type, context);
|
||||
JavaDocInfoGeneratorFactory.create(context.getProject(), null, GroovyDocHighlightingManager.getInstance(), isRendered, doSyntaxHighlighting())
|
||||
.generateType(buffer, type, context);
|
||||
}
|
||||
else {
|
||||
buffer.append(GrModifier.DEF);
|
||||
appendStyledSpan(buffer, GroovyDocHighlightingManager.getInstance().getKeywordAttributes(), GrModifier.DEF);
|
||||
}
|
||||
}
|
||||
|
||||
private static void generateTraitType(@NotNull StringBuilder buffer, @NotNull GrTraitType type, PsiElement context) {
|
||||
appendTypeString(buffer, type.getExprType(), context);
|
||||
buffer.append(" as "); // <- Groovy keyword
|
||||
for (PsiType traitType : type.getTraitTypes()) {
|
||||
appendTypeString(buffer, traitType, context);
|
||||
buffer.append(", ");
|
||||
private static void generateTraitType(@NotNull StringBuilder buffer, @NotNull GrTraitType type, PsiElement context, boolean isRendered) {
|
||||
appendTypeString(buffer, type.getExprType(), context, isRendered);
|
||||
appendStyledSpan(buffer, GroovyDocHighlightingManager.getInstance().getKeywordAttributes(), " as "); // <- Groovy keyword
|
||||
@NotNull List<PsiType> types = type.getTraitTypes();
|
||||
for (int i = 0; i < types.size(); i++) {
|
||||
PsiType traitType = types.get(i);
|
||||
appendTypeString(buffer, traitType, context, isRendered);
|
||||
if (i != types.size() - 1) {
|
||||
appendStyledSpan(buffer, GroovyDocHighlightingManager.getInstance().getCommaAttributes(), ", ");
|
||||
}
|
||||
}
|
||||
buffer.delete(buffer.length() - 2, buffer.length());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -286,32 +336,27 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
@Override
|
||||
@Nullable
|
||||
public @Nls String generateDoc(PsiElement element, PsiElement originalElement) {
|
||||
GroovyDocHighlightingManager highlightingManager = GroovyDocHighlightingManager.getInstance();
|
||||
|
||||
if (element instanceof GdslNamedParameter) {
|
||||
String name = ((GdslNamedParameter)element).getName();
|
||||
if (name == null) {
|
||||
return null;
|
||||
}
|
||||
HtmlChunk nameAndType;
|
||||
StringBuilder buffer = new StringBuilder("<pre>");
|
||||
String parameterTypeText = ((GdslNamedParameter)element).myParameterTypeText;
|
||||
appendStyledSpan(buffer, highlightingManager.getParameterAttributes(), name);
|
||||
if (parameterTypeText != null) {
|
||||
nameAndType = HtmlChunk.fragment(
|
||||
HtmlChunk.text(name + ":").wrapWith("b"),
|
||||
HtmlChunk.text(" "),
|
||||
HtmlChunk.text(parameterTypeText)
|
||||
);
|
||||
appendStyledSpan(buffer, highlightingManager.getOperationSignAttributes(), ":");
|
||||
buffer.append(" ");
|
||||
appendStyledSpan(buffer, highlightingManager.getClassNameAttributes(), parameterTypeText);
|
||||
}
|
||||
else {
|
||||
nameAndType = HtmlChunk.text(name).wrapWith("b");
|
||||
}
|
||||
HtmlChunk pre = nameAndType.wrapWith("pre");
|
||||
buffer.append("</pre>");
|
||||
String docString = ((GdslNamedParameter)element).docString;
|
||||
if (docString == null) {
|
||||
return pre.toString();
|
||||
if (docString != null) {
|
||||
buffer.append("<p>").append(HtmlChunk.text(docString)).append("</p>");
|
||||
}
|
||||
return HtmlChunk.fragment(
|
||||
pre,
|
||||
HtmlChunk.text(docString).wrapWith("p")
|
||||
).toString();
|
||||
return buffer.toString(); //NON-NLS
|
||||
}
|
||||
|
||||
if (element instanceof GrReferenceExpression) {
|
||||
@@ -330,12 +375,12 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
final String truncated = StringUtil.trimEnd(standard, BODY_HTML);
|
||||
|
||||
@Nls StringBuilder buffer = new StringBuilder(truncated);
|
||||
buffer.append("<p>");
|
||||
buffer.append("<p style='padding-left:8px;'>");
|
||||
if (originalElement != null) {
|
||||
appendInferredType(originalElement, (GrVariable)element, buffer);
|
||||
appendInferredType(originalElement, (GrVariable)element, buffer, false);
|
||||
}
|
||||
else if (element.getParent() instanceof GrVariableDeclaration) {
|
||||
appendInferredType(element.getParent(), (GrVariable)element, buffer);
|
||||
appendInferredType(element.getParent(), (GrVariable)element, buffer, false);
|
||||
}
|
||||
|
||||
if (!truncated.equals(standard)) {
|
||||
@@ -361,7 +406,7 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
}
|
||||
|
||||
protected static @Nls @Nullable String generateExternalJavaDoc(@NotNull PsiElement element) {
|
||||
JavaDocInfoGenerator generator = new GroovyDocInfoGenerator(element, false);
|
||||
JavaDocInfoGenerator generator = new GroovyDocInfoGenerator(element, false, doSyntaxHighlighting());
|
||||
return JavaDocumentationProvider.generateExternalJavadoc(element, generator);
|
||||
}
|
||||
|
||||
@@ -434,20 +479,18 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
.formatMethod((PsiMethod)element, candidate.getSubstitutor(),
|
||||
PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_TYPE | PsiFormatUtilBase.SHOW_PARAMETERS,
|
||||
PsiFormatUtilBase.SHOW_TYPE);
|
||||
createElementLink(sb, element, str);
|
||||
sb.append(" ");
|
||||
appendElementLink(sb, element, str);
|
||||
sb.append("<br>");
|
||||
}
|
||||
return CodeInsightBundle.message("javadoc.candidates", text, sb);
|
||||
}
|
||||
return JavaBundle.message("javadoc.candidates.not.found", text);
|
||||
}
|
||||
|
||||
private static void createElementLink(@NonNls final StringBuilder sb, final PsiElement element, final String str) {
|
||||
sb.append(" <a href=\"psi_element://");
|
||||
sb.append(JavaDocUtil.getReferenceText(element.getProject(), element));
|
||||
sb.append("\">");
|
||||
sb.append(str);
|
||||
sb.append("</a>");
|
||||
sb.append("<br>");
|
||||
private static void appendElementLink(@NonNls StringBuilder sb, PsiElement element, String label) {
|
||||
new GroovyDocInfoGenerator(element, false, doSyntaxHighlighting())
|
||||
.appendMaybeUnresolvedLink(sb, element, label, element.getProject(), false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -564,7 +607,8 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
@Override
|
||||
public @Nls @Nullable String generateRenderedDoc(@NotNull PsiDocCommentBase comment) {
|
||||
PsiElement owner = comment.getOwner();
|
||||
String html = new GroovyDocInfoGenerator(owner == null ? comment : owner, true).generateRenderedDocInfo();
|
||||
String html = new GroovyDocInfoGenerator(owner == null ? comment : owner, true, doSyntaxHighlighting())
|
||||
.generateRenderedDocInfo();
|
||||
return JavaDocExternalFilter.filterInternalDocInfo(html);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -403,7 +403,7 @@ public class GroovyParameterInfoHandler implements ParameterInfoHandlerWithTabAc
|
||||
private static void appendParameterText(PsiParameter param, PsiSubstitutor substitutor, StringBuilder buffer) {
|
||||
if (param instanceof GrParameter) {
|
||||
GrParameter grParam = (GrParameter)param;
|
||||
GroovyPresentationUtil.appendParameterPresentation(grParam, substitutor, TypePresentation.PRESENTABLE, buffer);
|
||||
GroovyPresentationUtil.appendParameterPresentation(grParam, substitutor, TypePresentation.PRESENTABLE, buffer, false);
|
||||
|
||||
final GrExpression initializer = grParam.getInitializerGroovy();
|
||||
if (initializer != null) {
|
||||
|
||||
@@ -19,9 +19,8 @@ class Bar<T> { java.util.List<T> foo(T param); }
|
||||
new Bar<String>().f<caret>oo();
|
||||
'''
|
||||
def ref = myFixture.file.findReferenceAt(myFixture.editor.caretModel.offset)
|
||||
assert CtrlMouseHandler.getInfo(ref.resolve(), ref.element) == """\
|
||||
Bar
|
||||
<a href="psi_element://java.util.List"><code><span style="color:#000000;">List</span></code></a><span style=""><</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span> foo (<a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> param)"""
|
||||
assert CtrlMouseHandler.getInfo(ref.resolve(), ref.element) ==
|
||||
"""<span style="color:#000000;">Bar</span>\n<a href="psi_element://java.util.List"><code><span style="color:#000000;">List</span></code></a><span style=""><</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a><span style="">></span> <span style="color:#000000;">foo</span><span style="">(</span><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="">param</span><span style="">)</span>"""
|
||||
}
|
||||
|
||||
void testGenericField() {
|
||||
@@ -30,9 +29,8 @@ class Bar<T> { T field; }
|
||||
new Bar<Integer>().fi<caret>eld
|
||||
'''
|
||||
def ref = myFixture.file.findReferenceAt(myFixture.editor.caretModel.offset)
|
||||
assert CtrlMouseHandler.getInfo(ref.resolve(), ref.element) == """\
|
||||
Bar
|
||||
<a href="psi_element://java.lang.Integer"><code><span style="color:#000000;">Integer</span></code></a> getField ()"""
|
||||
assert CtrlMouseHandler.getInfo(ref.resolve(), ref.element) ==
|
||||
"""<span style="color:#000000;">Bar</span>\n<a href="psi_element://java.lang.Integer"><code><span style="color:#000000;">Integer</span></code></a> <span style="color:#000000;">getField</span><span style="">(</span><span style="">)</span>"""
|
||||
}
|
||||
|
||||
void testLink() {
|
||||
@@ -46,7 +44,7 @@ class Gr {
|
||||
}
|
||||
new Gr().fo<caret>o()
|
||||
''', '''\
|
||||
<div class='definition'><pre><span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">foo</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://Gr"><code><span style="color:#000000;">Gr</span></code></a></pre></div><div class='content'>
|
||||
<div class='definition'><pre><span style="color:#000043;font-weight:bold;">void</span> <span style="color:#000000;">foo</span><span style="">(</span><span style="">)</span></pre></div><div class='content'>
|
||||
Use <a href="psi_element://Gr#bar()"><code><span style="color:#000000;">bar</span><span style="">()</span></code></a> from class <a href="psi_element://Gr"><code><span style="color:#000000;">Gr</span></code></a> instead
|
||||
</div><table class='sections'></table>'''
|
||||
}
|
||||
@@ -59,7 +57,7 @@ new Gr().fo<caret>o()
|
||||
def docs() {}
|
||||
|
||||
<caret>docs()
|
||||
''', '''<div class='definition'><pre><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="color:#000000;">docs</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://_"><code><span style="color:#000000;">_</span></code></a></pre></div><div class='content'>
|
||||
''', '''<div class='definition'><pre><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="color:#000000;">docs</span><span style="">(</span><span style="">)</span></pre></div><div class='content'>
|
||||
check this out <a href="psi_element://java.lang.CharSequence"><code><span style="color:#000000;">character sequences</span></code></a>
|
||||
</div><table class='sections'></table>'''
|
||||
}
|
||||
@@ -81,7 +79,7 @@ class Main {
|
||||
}
|
||||
Main.<caret>docs()
|
||||
''', '''\
|
||||
<div class='definition'><pre><span style="color:#000080;font-weight:bold;">static</span> <span style="color:#000080;font-weight:bold;">void</span> <span style="color:#000000;">docs</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://Main"><code><span style="color:#000000;">Main</span></code></a></pre></div><div class='content'>
|
||||
<div class='definition'><pre><span style="color:#000043;font-weight:bold;">static</span> <span style="color:#000043;font-weight:bold;">void</span> <span style="color:#000000;">docs</span><span style="">(</span><span style="">)</span></pre></div><div class='content'>
|
||||
Link 1: <a href="psi_element://Main#foo(java.lang.String[])"><code><span style="color:#000000;">foo</span><span style="">(String[])</span></code></a>
|
||||
<p>
|
||||
Link 2: <a href="psi_element://Main#bar(java.lang.String[])"><code><span style="color:#000000;">bar</span><span style="">(String[])</span></code></a>
|
||||
@@ -96,7 +94,7 @@ Main.<caret>docs()
|
||||
def aa = 1
|
||||
a<caret>a
|
||||
''', '''\
|
||||
<div class='definition'><pre><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="color:#000000;">aa</span></pre></div><table class='sections'></table><p>[Inferred type] <a href="psi_element://java.lang.Integer"><code><span style="color:#000000;">Integer</span></code></a>'''
|
||||
<div class='definition'><pre><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="color:#000000;">aa</span></pre></div><table class='sections'></table><p style='padding-left:8px;'><span style="color: #909090">[Inferred type]</span> <a href="psi_element://java.lang.Integer"><code><span style="color:#000000;">Integer</span></code></a>'''
|
||||
}
|
||||
|
||||
void 'test implicit closure parameter'() {
|
||||
@@ -104,7 +102,7 @@ a<caret>a
|
||||
List<String> ss = []
|
||||
ss.collect { i<caret>t }
|
||||
''', '''\
|
||||
<div class='definition'><pre><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="color:#000000;">it</span></pre></div><table class='sections'></table><p>[Inferred type] <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a>'''
|
||||
<div class='definition'><pre><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="color:#000000;">it</span></pre></div><table class='sections'></table><p style='padding-left:8px;'><span style="color: #909090">[Inferred type]</span> <a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a>'''
|
||||
}
|
||||
|
||||
void 'test code tag'() {
|
||||
@@ -119,7 +117,7 @@ class Foo {
|
||||
}
|
||||
new Foo().<caret>foo()
|
||||
''', '''\
|
||||
<div class='definition'><pre><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#000000;">foo</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://Foo"><code><span style="color:#000000;">Foo</span></code></a></pre></div><div class='content'>
|
||||
<div class='definition'><pre><a href="psi_element://java.lang.String"><code><span style="color:#000000;">String</span></code></a> <span style="color:#000000;">foo</span><span style="">(</span><span style="">)</span></pre></div><div class='content'>
|
||||
May return <code><span style=""><span style="color:#000043;font-weight:bold;">null</span></span></code>
|
||||
</div><table class='sections'></table>\
|
||||
'''
|
||||
@@ -134,7 +132,7 @@ def foo() {}
|
||||
|
||||
f<caret>oo()""",
|
||||
"""\
|
||||
<div class='definition'><pre><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="color:#000000;">foo</span><span style="">(</span><span style="">)</span><br><span class='grayed'>defined in </span><a href="psi_element://_"><code><span style="color:#000000;">_</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Returns:</td><td valign='top'><p><code> lorem ipsum </code></td></table>\
|
||||
<div class='definition'><pre><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a> <span style="color:#000000;">foo</span><span style="">(</span><span style="">)</span></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Returns:</td><td valign='top'><p><code> lorem ipsum </code></td></table>\
|
||||
"""
|
||||
}
|
||||
|
||||
@@ -146,8 +144,7 @@ f<caret>oo()""",
|
||||
class GroovyDocTest<T> { }
|
||||
|
||||
new Gr<caret>oovyDocTest<Integer>()""", """\
|
||||
<div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">GroovyDocTest</span><span style=""><</span><span style="color:#20999d;">T</span><span style="">></span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>See Also:</td><td valign='top'><p><a href="https://google.com">ref</a></td></table>\
|
||||
<div class='definition'><pre><span style="color:#000043;font-weight:bold;">class</span> <span style="color:#000000;">GroovyDocTest</span><span style=""><</span><span style="color:#20999d;">T</span><span style="">></span></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>See Also:</td><td valign='top'><p><a href="https://google.com">ref</a></td></table>\
|
||||
"""
|
||||
}
|
||||
|
||||
@@ -160,8 +157,7 @@ new Gr<caret>oovyDocTest<Integer>()""", """\
|
||||
class GroovyDocTest<T> { }
|
||||
|
||||
new Gr<caret>oovyDocTest<Integer>()""", """\
|
||||
<div class='definition'><pre><span style="color:#000080;font-weight:bold;">class</span> <span style="color:#000000;">GroovyDocTest</span><span style=""><</span><span style="color:#20999d;">T</span><span style="">></span>
|
||||
<span style="color:#000080;font-weight:bold;">extends </span><a href="psi_element://java.lang.Object"><code><span style="color:#000000;">Object</span></code></a></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Type parameters:</td><td valign='top'><<span style="color:#20999d;">T</span>> – kej</td></table>\
|
||||
<div class='definition'><pre><span style="color:#000043;font-weight:bold;">class</span> <span style="color:#000000;">GroovyDocTest</span><span style=""><</span><span style="color:#20999d;">T</span><span style="">></span></pre></div><table class='sections'><p><tr><td valign='top' class='section'><p>Type parameters:</td><td valign='top'><<span style="color:#20999d;">T</span>> – kej</td></table>\
|
||||
"""
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user