private static void assertBeforeCommit( Document document, PsiFile file, TextBlock textBlock, CharSequence chars, String oldPsiText, FileElement myTreeElementBeingReparsedSoItWontBeCollected) { int startOffset = textBlock.getStartOffset(); int psiEndOffset = textBlock.getPsiEndOffset(); if (oldPsiText != null) { @NonNls String msg = "PSI/document inconsistency before reparse: "; if (startOffset >= oldPsiText.length()) { msg += "startOffset=" + oldPsiText + " while text length is " + oldPsiText.length() + "; "; startOffset = oldPsiText.length(); } String psiPrefix = oldPsiText.substring(0, startOffset); String docPrefix = chars.subSequence(0, startOffset).toString(); String psiSuffix = oldPsiText.substring(psiEndOffset); String docSuffix = chars.subSequence(textBlock.getTextEndOffset(), chars.length()).toString(); if (!psiPrefix.equals(docPrefix) || !psiSuffix.equals(docSuffix)) { if (!psiPrefix.equals(docPrefix)) { msg = msg + "psiPrefix=" + psiPrefix + "; docPrefix=" + docPrefix + ";"; } if (!psiSuffix.equals(docSuffix)) { msg = msg + "psiSuffix=" + psiSuffix + "; docSuffix=" + docSuffix + ";"; } throw new AssertionError(msg); } } else if (document.getTextLength() - textBlock.getTextEndOffset() != myTreeElementBeingReparsedSoItWontBeCollected.getTextLength() - psiEndOffset) { throw new AssertionError("PSI/document inconsistency before reparse: file=" + file); } }
public boolean executeFilter(@NotNull Editor editor, @NotNull TextRange range, String command) throws IOException { if (logger.isDebugEnabled()) logger.debug("command=" + command); CharSequence chars = editor.getDocument().getCharsSequence(); StringReader car = new StringReader( chars.subSequence(range.getStartOffset(), range.getEndOffset()).toString()); StringWriter sw = new StringWriter(); logger.debug("about to create filter"); Process filter = Runtime.getRuntime().exec(command); logger.debug("filter created"); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(filter.getOutputStream())); logger.debug("sending text"); copy(car, writer); writer.close(); logger.debug("sent"); BufferedReader reader = new BufferedReader(new InputStreamReader(filter.getInputStream())); logger.debug("getting result"); copy(reader, sw); sw.close(); logger.debug("received"); editor.getDocument().replaceString(range.getStartOffset(), range.getEndOffset(), sw.toString()); lastCommand = command; return true; }
public void prefixUpdated() { final CharSequence text = myEditor.getDocument().getCharsSequence(); final int caretOffset = myEditor.getCaretModel().getOffset(); for (Pair<Integer, ElementPattern<String>> pair : myRestartingPrefixConditions) { int start = pair.first; if (caretOffset >= start) { final String newPrefix = text.subSequence(start, caretOffset).toString(); if (pair.second.accepts(newPrefix)) { scheduleRestart(); myRestartingPrefixConditions.clear(); return; } } } hideAutopopupIfMeaningless(); }