IDEA-111684 Quick Documentation should resolve values for aggregated / indirect constants

This commit is contained in:
Maxim.Mossienko
2013-12-31 00:16:29 +01:00
parent 285751f54a
commit 065fa6d890
2 changed files with 23 additions and 2 deletions
@@ -114,7 +114,7 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
}
private static void generateInitializer(StringBuilder buffer, PsiVariable variable) {
PsiExpression initializer = variable.getInitializer();
PsiExpression initializer = JavaDocInfoGenerator.calcInitializerExpression(variable);
if (initializer != null) {
String text = initializer.getText().trim();
int index1 = text.indexOf('\n');
@@ -595,8 +595,29 @@ public class JavaDocInfoGenerator {
generateEpilogue(buffer);
}
private static void appendInitializer(StringBuilder buffer, PsiVariable variable) {
public static PsiExpression calcInitializerExpression(PsiVariable variable) {
PsiExpression initializer = variable.getInitializer();
if (initializer != null) {
PsiModifierList modifierList = variable.getModifierList();
if (modifierList != null && modifierList.hasModifierProperty(PsiModifier.FINAL) && !(initializer instanceof PsiLiteralExpression)) {
JavaPsiFacade instance = JavaPsiFacade.getInstance(variable.getProject());
Object o = instance.getConstantEvaluationHelper().computeConstantExpression(initializer);
if (o != null) {
String text = o.toString();
PsiType type = variable.getType();
if (type.equalsToText(CommonClassNames.JAVA_LANG_STRING)) {
text = "\"" + StringUtil.trimLog(text, 120) + "\"";
}
else if (type.equalsToText("char")) text = "'" + text + "'";
initializer = instance.getElementFactory().createExpressionFromText(text, variable);
}
}
}
return initializer;
}
private static void appendInitializer(StringBuilder buffer, PsiVariable variable) {
PsiExpression initializer = calcInitializerExpression(variable);
if (initializer != null) {
buffer.append(" = ");