diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDClassComment.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDClassComment.java index 721deffb07f9..6e58d144dbe0 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDClassComment.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDClassComment.java @@ -37,7 +37,7 @@ public class JDClassComment extends JDParamListOwnerComment { @Override protected void generateSpecial(@NotNull String prefix, @NotNull StringBuilder sb) { super.generateSpecial(prefix, sb); - String continuationPrefix = getContinuationPrefix(prefix); + String continuationPrefix = prefix + javadocContinuationIndent(); if (!isNull(myAuthorsList)) { JDTag tag = JDTag.AUTHOR; for (String author : myAuthorsList) { diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDComment.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDComment.java index 5a9f15a25948..e5d673e6cc42 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDComment.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDComment.java @@ -56,20 +56,19 @@ public class JDComment { myMultiLineComment = value; } - protected String getContinuationIndent() { + @NotNull + protected String javadocContinuationIndent() { + if (!myFormatter.getSettings().JD_INDENT_ON_CONTINUATION) return ""; + return continuationIndent(); + } + + @NotNull + protected String continuationIndent() { CodeStyleSettings settings = myFormatter.getSettings(); CommonCodeStyleSettings.IndentOptions indentOptions = settings.getIndentOptions(JavaFileType.INSTANCE); return new IndentInfo(0, indentOptions.CONTINUATION_INDENT_SIZE, 0).generateNewWhiteSpace(indentOptions); } - protected String getContinuationPrefix(String prefix) { - if (myFormatter.getSettings().JD_INDENT_ON_CONTINUATION) { - return prefix + getContinuationIndent(); - } else { - return prefix; - } - } - @Nullable public String generate(@NotNull String indent) { final String prefix; @@ -94,7 +93,7 @@ public class JDComment { generateSpecial(prefix, sb); - final String continuationPrefix = getContinuationPrefix(prefix); + final String continuationPrefix = prefix + javadocContinuationIndent(); if (!isNull(myUnknownList) && myFormatter.getSettings().JD_KEEP_INVALID_TAGS) { for (String aUnknownList : myUnknownList) { diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDMethodComment.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDMethodComment.java index 86a798ed97d6..cc506287ff73 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDMethodComment.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDMethodComment.java @@ -28,7 +28,7 @@ import java.util.List; */ public class JDMethodComment extends JDParamListOwnerComment { private String myReturnTag; - private List myThrowsList; + private List myThrowsList; public JDMethodComment(@NotNull CommentFormatter formatter) { super(formatter); @@ -43,7 +43,8 @@ public class JDMethodComment extends JDParamListOwnerComment { JDTag tag = JDTag.RETURN; sb.append(myFormatter.getParser().formatJDTagDescription(myReturnTag, prefix + tag.getWithEndWhitespace(), - getContinuationPrefix(prefix))); + prefix + javadocContinuationIndent())); + if (myFormatter.getSettings().JD_ADD_BLANK_AFTER_RETURN) { sb.append(prefix); sb.append('\n'); @@ -69,6 +70,6 @@ public class JDMethodComment extends JDParamListOwnerComment { if (myThrowsList == null) { myThrowsList = ContainerUtilRt.newArrayList(); } - myThrowsList.add(new NameDesc(className, description)); + myThrowsList.add(new TagDescription(className, description)); } } diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDParamListOwnerComment.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDParamListOwnerComment.java index 9f26bcfed08b..29b4a6b2651f 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDParamListOwnerComment.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/JDParamListOwnerComment.java @@ -24,7 +24,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; public class JDParamListOwnerComment extends JDComment { - protected List myParamsList; + protected List myParamsList; public JDParamListOwnerComment(@NotNull CommentFormatter formatter) { super(formatter); @@ -49,7 +49,7 @@ public class JDParamListOwnerComment extends JDComment { } @Nullable - public NameDesc getParameter(@Nullable String name) { + public TagDescription getParameter(@Nullable String name) { return getNameDesc(name, myParamsList); } @@ -57,13 +57,13 @@ public class JDParamListOwnerComment extends JDComment { if (myParamsList == null) { myParamsList = ContainerUtilRt.newArrayList(); } - myParamsList.add(new NameDesc(name, description)); + myParamsList.add(new TagDescription(name, description)); } @Nullable - private static NameDesc getNameDesc(@Nullable String name, @Nullable List list) { + private static TagDescription getNameDesc(@Nullable String name, @Nullable List list) { if (list == null) return null; - for (NameDesc aList : list) { + for (TagDescription aList : list) { if (aList.name.equals(name)) { return aList; } @@ -75,50 +75,69 @@ public class JDParamListOwnerComment extends JDComment { * Generates parameters or exceptions * */ - protected void generateList(@NotNull String prefix, + protected void generateList(@NotNull final String prefix, @NotNull StringBuilder sb, - @NotNull List list, + @NotNull List tagBlocks, @NotNull String tag, boolean align_comments, boolean generate_empty_tags, - boolean wrapDescription) + boolean descriptionOnNewLine) + { + int maxNameLength = maxTagDescriptionNameLength(tagBlocks, align_comments, generate_empty_tags, descriptionOnNewLine); + + StringBuilder fill = new StringBuilder(prefix.length() + tag.length() + maxNameLength + 1); + fill.append(prefix); + StringUtil.repeatSymbol(fill, ' ', maxNameLength + 1 + tag.length()); + + for (TagDescription nd : tagBlocks) { + if (isNull(nd.desc) && !generate_empty_tags) continue; + + if (descriptionOnNewLine && !isNull(nd.desc)) { + sb.append(prefix).append(tag).append(nd.name).append("\n"); + sb.append(formatJDTagDescription(nd.desc, prefix + continuationIndent())); + } + else if (align_comments) { + int spacesNumber = maxNameLength + 1 - nd.name.length(); + String spaces = StringUtil.repeatSymbol(' ', Math.max(0, spacesNumber)); + String firstLinePrefix = prefix + tag + nd.name + spaces; + sb.append(formatJDTagDescription(nd.desc, firstLinePrefix, fill)); + } + else { + String description = (nd.desc == null) ? "" : nd.desc; + StringBuilder tagDescription = formatJDTagDescription(tag + nd.name + " " + description, prefix, prefix + javadocContinuationIndent()); + sb.append(tagDescription); + } + } + } + + private static int maxTagDescriptionNameLength(@NotNull List tagBlocks, + boolean align_comments, + boolean generate_empty_tags, + boolean descriptionOnNewLine) { int max = 0; - if (align_comments && !wrapDescription) { - for (NameDesc nd: list) { - int currentLength = nd.name.length(); - if (isNull(nd.desc) && !generate_empty_tags) continue; - //finding longest parameter length - if (currentLength > max) { - max = currentLength; + if (align_comments && !descriptionOnNewLine) { + for (TagDescription tagDescription: tagBlocks) { + int current = tagDescription.name.length(); + if (isNull(tagDescription.desc) && !generate_empty_tags) continue; + if (current > max) { + max = current; } } } - StringBuilder fill = new StringBuilder(prefix.length() + tag.length() + max + 1); - fill.append(prefix); - StringUtil.repeatSymbol(fill, ' ', max + 1 + tag.length()); - - String wrapParametersPrefix = prefix + getContinuationIndent(); - for (NameDesc nd : list) { - if (isNull(nd.desc) && !generate_empty_tags) continue; - if (wrapDescription && !isNull(nd.desc)) { - sb.append(prefix).append(tag).append(nd.name).append("\n"); - sb.append(myFormatter.getParser().formatJDTagDescription(nd.desc, wrapParametersPrefix)); - } - else if (align_comments) { - int spacesNumber = max + 1 - nd.name.length(); - String spaces = StringUtil.repeatSymbol(' ', Math.max(0, spacesNumber)); - String firstLinePrefix = prefix + tag + nd.name + spaces; - sb.append(myFormatter.getParser().formatJDTagDescription(nd.desc, firstLinePrefix, fill)); - } - else { - String description = (nd.desc == null) ? "" : nd.desc; - sb.append(myFormatter.getParser().formatJDTagDescription(tag + nd.name + " " + description, - prefix, - getContinuationPrefix(prefix))); - } - } + return max; } + + private StringBuilder formatJDTagDescription(@Nullable String description, + @NotNull CharSequence firstLinePrefix, + @NotNull CharSequence continuationPrefix) { + return myFormatter.getParser().formatJDTagDescription(description, firstLinePrefix, continuationPrefix); + } + + private StringBuilder formatJDTagDescription(@Nullable String description, @NotNull CharSequence prefix) { + return formatJDTagDescription(description, prefix, prefix); + } + } diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/NameDesc.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/TagDescription.java similarity index 90% rename from java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/NameDesc.java rename to java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/TagDescription.java index 6e8ee10d4ad5..644323aab7e2 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/NameDesc.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/javadoc/TagDescription.java @@ -22,11 +22,11 @@ import org.jetbrains.annotations.Nullable; * * @author Dmitry Skavish */ -public class NameDesc { +public class TagDescription { @NotNull public final String name; @Nullable public final String desc; - public NameDesc(@NotNull String name, @Nullable String desc) { + public TagDescription(@NotNull String name, @Nullable String desc) { this.name = name; this.desc = desc; }