public TextRange getRangeInElement(final GrLiteral element) { final String text = element.getText(); if (!(element.getValue() instanceof String)) { return super.getRangeInElement(element); } return getLiteralRange(text); }
public GrLiteralImpl handleContentChange(GrLiteral expr, TextRange range, String newContent) throws IncorrectOperationException { if (!(expr.getValue() instanceof String)) throw new IncorrectOperationException("cannot handle content change"); LOG.assertTrue(expr instanceof GrLiteralImpl); String oldText = expr.getText(); final String quote = GrStringUtil.getStartQuote(oldText); if (quote.startsWith("'")) { newContent = GrStringUtil.escapeSymbolsForString(newContent, !quote.equals("'''"), false); } else if (quote.startsWith("\"")) { newContent = GrStringUtil.escapeSymbolsForGString(newContent, !quote.equals("\"\"\""), true); } else if ("/".equals(quote)) { newContent = GrStringUtil.escapeSymbolsForSlashyStrings(newContent); } else if ("$/".equals(quote)) { newContent = GrStringUtil.escapeSymbolsForDollarSlashyStrings(newContent); } String newText = oldText.substring(0, range.getStartOffset()) + newContent + oldText.substring(range.getEndOffset()); return ((GrLiteralImpl) expr).updateText(newText); }