Added escaping/unescaping signatures when saving/loading from annotations.

This commit is contained in:
Evgeny Gerashchenko
2012-08-21 20:09:03 +04:00
parent 04431b2fa4
commit 7efbd44d63
3 changed files with 7 additions and 4 deletions
@@ -16,6 +16,7 @@
package org.jetbrains.jet.lang.resolve.java.kt; package org.jetbrains.jet.lang.resolve.java.kt;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiAnnotation; import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiMethod;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -36,7 +37,7 @@ public class KotlinSignatureAnnotation extends PsiAnnotationWrapper {
public String signature() { public String signature() {
if (signature == null) { if (signature == null) {
signature = getStringAttribute(JvmStdlibNames.KOTLIN_SIGNATURE_VALUE_METHOD, ""); signature = StringUtil.unescapeStringCharacters(getStringAttribute(JvmStdlibNames.KOTLIN_SIGNATURE_VALUE_METHOD, ""));
} }
return signature; return signature;
} }
@@ -29,6 +29,7 @@ import com.intellij.openapi.ui.popup.JBPopupAdapter;
import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.LightweightWindowEvent; import com.intellij.openapi.ui.popup.LightweightWindowEvent;
import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiDocumentManager;
@@ -223,7 +224,7 @@ class EditSignatureBalloon {
static PsiNameValuePair[] signatureToNameValuePairs(@NotNull Project project, @NotNull String signature) { static PsiNameValuePair[] signatureToNameValuePairs(@NotNull Project project, @NotNull String signature) {
return JavaPsiFacade.getElementFactory(project).createAnnotationFromText( return JavaPsiFacade.getElementFactory(project).createAnnotationFromText(
"@" + KotlinSignatureInJavaMarkerProvider.KOTLIN_SIGNATURE_ANNOTATION + "(value=\"" + signature + "\")", null) "@" + KotlinSignatureInJavaMarkerProvider.KOTLIN_SIGNATURE_ANNOTATION
.getParameterList().getAttributes(); + "(value=\"" + StringUtil.escapeStringCharacters(signature) + "\")", null).getParameterList().getAttributes();
} }
} }
@@ -28,6 +28,7 @@ import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*; import com.intellij.psi.*;
import com.intellij.util.Function; import com.intellij.util.Function;
@@ -93,7 +94,7 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
PsiNameValuePair pair = kotlinSignatureAnnotation.getParameterList().getAttributes()[0]; PsiNameValuePair pair = kotlinSignatureAnnotation.getParameterList().getAttributes()[0];
PsiAnnotationMemberValue value = pair.getValue(); PsiAnnotationMemberValue value = pair.getValue();
return value == null ? "null" : value instanceof PsiLiteralExpression return value == null ? "null" : value instanceof PsiLiteralExpression
? ((PsiLiteralExpression) value).getValue().toString() ? StringUtil.unescapeStringCharacters(((PsiLiteralExpression) value).getValue().toString())
: value.getText(); : value.getText();
} }