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); }
public TextRange getRangeInElement(final GrLiteral element) { final String text = element.getText(); if (!(element.getValue() instanceof String)) { return super.getRangeInElement(element); } return getLiteralRange(text); }
public void processIntention(@NotNull PsiElement element) throws IncorrectOperationException { final GrLiteral exp = (GrLiteral) element; @NonNls String textString = exp.getText(); final int textLength = textString.length(); final char lastChar = textString.charAt(textLength - 1); final boolean isLong = lastChar == 'l' || lastChar == 'L'; if (isLong) { textString = textString.substring(0, textLength - 1); } final BigInteger val; if (textString.startsWith("0x")) { final String rawTextString = textString.substring(2); val = new BigInteger(rawTextString, 16); } else { val = new BigInteger(textString, 10); } String octString = '0' + val.toString(8); if (isLong) { octString += 'L'; } IntentionUtils.replaceExpression(octString, exp); }