diff --git a/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java b/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java index eb8faa393298..572d2a54cbc8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java +++ b/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java @@ -489,6 +489,7 @@ public class JavaDocInfoGenerator { if (rendered) { generateAuthorAndVersionSections(buffer, comment); } + generateRecordParametersSection(buffer, aClass, comment); generateTypeParametersSection(buffer, aClass, rendered); } else { @@ -501,12 +502,27 @@ public class JavaDocInfoGenerator { buffer.append(DocumentationMarkup.SECTIONS_END); } + private void generateRecordParametersSection(StringBuilder buffer, PsiClass recordClass, PsiDocComment comment) { + if (!recordClass.isRecord() || comment == null) return; + PsiDocTag[] localTags = comment.findTagsByName("param"); + List collectedTags = new ArrayList<>(); + for (PsiRecordComponent component : recordClass.getRecordComponents()) { + PsiDocTag localTag = getTagByName(localTags, component.getName()); + if (localTag != null) { + collectedTags.add(new ParamInfo(component.getName(), localTag, ourEmptyProvider)); + } + } + generateParametersSection(buffer, CodeInsightBundle.message("javadoc.parameters"), collectedTags); + } + + private static boolean generateClassSignature(StringBuilder buffer, PsiClass aClass, SignaturePlace place) { boolean generateLink = place == SignaturePlace.Javadoc; generateAnnotations(buffer, aClass, place, true); generateModifiers(buffer, aClass, false); buffer.append(JavaBundle.message(aClass.isInterface() ? "java.terms.interface" - : aClass.isEnum() ? "java.terms.enum" : "java.terms.class")); + : aClass.isEnum() ? "java.terms.enum" + : aClass.isRecord() ? "java.terms.record" : "java.terms.class")); buffer.append(' '); String refText = JavaDocUtil.getReferenceText(aClass.getProject(), aClass); if (refText == null) { diff --git a/java/java-tests/testData/codeInsight/javadocIG/recordParameters.html b/java/java-tests/testData/codeInsight/javadocIG/recordParameters.html new file mode 100644 index 000000000000..fe7f1a47a7f1 --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/recordParameters.html @@ -0,0 +1,4 @@ +
record Test
+extends java.lang.Record
+ main comment +

Params:

test – simple description
\ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/javadocIG/recordParameters.java b/java/java-tests/testData/codeInsight/javadocIG/recordParameters.java new file mode 100644 index 000000000000..2460bba21e77 --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/recordParameters.java @@ -0,0 +1,5 @@ +/** + * main comment + * @param test simple description + */ +record Test(int test) {} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/JavaDocInfoGeneratorTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/JavaDocInfoGeneratorTest.java index afd3320a1000..4336d993af99 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/JavaDocInfoGeneratorTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/JavaDocInfoGeneratorTest.java @@ -19,6 +19,7 @@ import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.rt.execution.junit.FileComparisonFailure; @@ -54,6 +55,11 @@ public class JavaDocInfoGeneratorTest extends JavaCodeInsightTestCase { return IdeaTestUtil.getMockJdk(JavaVersion.compose(myJdkVersion)); } + @Override + protected @NotNull LanguageLevel getProjectLanguageLevel() { + return LanguageLevel.JDK_14_PREVIEW; + } + public void testSimpleField() { doTestField(); } public void testFieldValue() { doTestField(); } public void testValueInMethod() { doTestMethod(); } @@ -86,6 +92,7 @@ public class JavaDocInfoGeneratorTest extends JavaCodeInsightTestCase { public void testFieldInitializedWithSizedArray() { doTestField(); } public void testDoubleLt() { doTestClass(); } public void testNoSpaceAfterTagName() { doTestClass(); } + public void testRecordParameters() { doTestClass(); } //j.l.Record is unresolved as there is no mock jdk 14 yet public void testLambdaParameter() { doTestLambdaParameter(); } public void testLocalClassInsideAnonymous() { doTestAtCaret(); } public void testPackageInfoFromComment() { doTestPackageInfo("some"); } diff --git a/java/openapi/resources/messages/JavaBundle.properties b/java/openapi/resources/messages/JavaBundle.properties index 272047fda162..797f4df4ccb5 100644 --- a/java/openapi/resources/messages/JavaBundle.properties +++ b/java/openapi/resources/messages/JavaBundle.properties @@ -834,6 +834,7 @@ java.preview.features.notification.title=Java Preview Features java.preview.features.warning=When Java {0} would be released, support for {1} (Preview) language level may be dropped java.terms.annotation.interface=@interface java.terms.class=class +java.terms.record=record java.terms.constructor=constructor java.terms.enum=enum java.terms.exception=exception