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 1faf4cba5d50..f0591daf6e6d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java +++ b/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java @@ -124,6 +124,7 @@ import com.intellij.psi.PsiWhiteSpace; import com.intellij.psi.PsiWildcardType; import com.intellij.psi.SyntaxTraverser; import com.intellij.psi.impl.JavaConstantExpressionEvaluator; +import com.intellij.psi.impl.source.javadoc.PsiDocFormatString; import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef; import com.intellij.psi.impl.source.javadoc.PsiSnippetDocTagImpl; import com.intellij.psi.impl.source.tree.ElementType; @@ -2429,6 +2430,7 @@ public class JavaDocInfoGenerator { private void generateValueValue(PsiInlineDocTag tag, StringBuilder buffer, PsiElement element) { String text = getRefText(tag.getDataElements()); + PsiDocFormatString formatString = PsiTreeUtil.findChildOfType(element, PsiDocFormatString.class); PsiField valueField = null; if (text.isEmpty()) { if (myElement instanceof PsiField) valueField = (PsiField)myElement; @@ -2453,11 +2455,16 @@ public class JavaDocInfoGenerator { if (valueField != null) { PsiExpression initializer = valueField.getInitializer(); value = DumbService.isDumb(myProject) ? null : JavaConstantExpressionEvaluator.computeConstantExpression(initializer, false); + if (formatString != null) { + value = String.format(formatString.getText(), value); + } + else if (value instanceof String) { + value = '"' + value.toString() + '"'; + } } if (value != null) { String valueText = StringUtil.escapeXmlEntities(value.toString()); - if (value instanceof String) valueText = '"' + valueText + '"'; if (valueField.equals(myElement)) { buffer.append(valueText); // don't generate link to itself } diff --git a/java/java-tests/testData/codeInsight/javadocIG/escapingStringValue.html b/java/java-tests/testData/codeInsight/javadocIG/escapingStringValue.html index 5260cb11e3e8..eac0c6beba62 100644 --- a/java/java-tests/testData/codeInsight/javadocIG/escapingStringValue.html +++ b/java/java-tests/testData/codeInsight/javadocIG/escapingStringValue.html @@ -1 +1 @@ -
 A
public static void JAVADOC_ME()
The value of B is "a<b".
+
 A
public static void JAVADOC_ME()
The value of B is "a<b".
\ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/javadocIG/valueWithFormat.html b/java/java-tests/testData/codeInsight/javadocIG/valueWithFormat.html new file mode 100644 index 000000000000..2b2667e50df4 --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/valueWithFormat.html @@ -0,0 +1 @@ +
 A
public static void JAVADOC_ME()
The value of PI is 3.142.
\ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/javadocIG/valueWithFormat.java b/java/java-tests/testData/codeInsight/javadocIG/valueWithFormat.java new file mode 100644 index 000000000000..46e6b7a91b4a --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/valueWithFormat.java @@ -0,0 +1,6 @@ +class A { + public static double PI = 3.14159; + + /** The value of PI is {@value %.3f #PI}. */ + public static void JAVADOC_ME() { someCode(); } +} 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 7a87e8936398..1a01f7b543b6 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 @@ -92,6 +92,7 @@ public class JavaDocInfoGeneratorTest extends JavaCodeInsightTestCase { public void testFieldValue() { doTestField(); } public void testValueInMethod() { doTestMethod(); } public void testValueInMethodNoHash() { doTestMethod(); } + public void testValueWithFormat() { doTestMethod(); } public void testEscapingStringValue() { doTestMethod(); } public void testIdeadev2326() { doTestMethod(); } public void testMethodTypeParameter() { doTestMethod(); }