diagnose unexpected character in chained completion (EA-37306)

This commit is contained in:
peter
2012-07-25 16:57:59 +02:00
parent 3b293fb1b8
commit 53ce72fc8c
3 changed files with 23 additions and 3 deletions
@@ -19,12 +19,16 @@ import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementDecorator;
import com.intellij.codeInsight.lookup.LookupElementPresentation;
import com.intellij.codeInsight.lookup.TypedLookupItem;
import com.intellij.diagnostic.LogMessageEx;
import com.intellij.diagnostic.errordialog.Attachment;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.util.ClassConditionKey;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.impl.DebugUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.text.CharArrayUtil;
import gnu.trove.THashSet;
@@ -37,6 +41,7 @@ import java.util.Set;
* @author peter
*/
public class JavaChainLookupElement extends LookupElementDecorator<LookupElement> implements TypedLookupItem {
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.completion.JavaChainLookupElement");
public static final ClassConditionKey<JavaChainLookupElement> CLASS_CONDITION_KEY = ClassConditionKey.create(JavaChainLookupElement.class);
private final LookupElement myQualifier;
@@ -112,7 +117,14 @@ public class JavaChainLookupElement extends LookupElementDecorator<LookupElement
}
final char atTail = document.getCharsSequence().charAt(context.getTailOffset() - 1);
assert atTail == ';' : atTail;
if (atTail != ';') {
LOG.error(LogMessageEx.createEvent("Unexpected character",
"atTail=" + atTail + "\n" +
"offset=" + context.getTailOffset() + "\n" +
DebugUtil.currentStackTrace(),
new Attachment(context.getDocument())));
}
document.replaceString(context.getTailOffset() - 1, context.getTailOffset(), ".");
CompletionUtil.emulateInsertion(getDelegate(), context.getTailOffset(), context);
@@ -244,7 +244,7 @@ public class PsiTypeLookupItem extends LookupItem {
"offset=" + newTail + "\n" +
"document=" + context.getDocument() + "\n" +
DebugUtil.currentStackTrace(),
new Attachment(context.getFile().getViewProvider().getVirtualFile())));
new Attachment(context.getDocument())));
}
context.setTailOffset(newTail);
@@ -1,7 +1,8 @@
package com.intellij.diagnostic.errordialog;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.ArrayUtil;
import com.intellij.util.Base64Converter;
@@ -27,6 +28,13 @@ public class Attachment {
myBytes = getBytes(content);
}
public Attachment(Document document) {
VirtualFile file = FileDocumentManager.getInstance().getFile(document);
myPath = file != null ? file.getPath() : "unknown.txt";
myDisplayText = document.getText();
myBytes = getBytes(myDisplayText);
}
public Attachment(@NotNull VirtualFile file) {
myPath = file.getPresentableUrl();
myBytes = getBytes(file);