use of org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.literals.GrLiteralImpl in project intellij-community by JetBrains.
the class ConvertStringToMultilineIntention method prepareNewLiteralText.
private static StringBuilder prepareNewLiteralText(List<GrLiteral> literals) {
String quote = !containsInjections(literals) && literals.get(0).getText().startsWith("'") ? "'''" : "\"\"\"";
final StringBuilder buffer = new StringBuilder();
buffer.append(quote);
for (GrLiteral literal : literals) {
if (literal instanceof GrLiteralImpl) {
appendSimpleStringValue(literal, buffer, quote);
} else {
final GrStringImpl gstring = (GrStringImpl) literal;
for (PsiElement child : gstring.getAllContentParts()) {
if (child instanceof GrStringContent) {
appendSimpleStringValue(child, buffer, "\"\"\"");
} else if (child instanceof GrStringInjection) {
buffer.append(child.getText());
}
}
}
}
buffer.append(quote);
return buffer;
}
use of org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.literals.GrLiteralImpl in project intellij-community by JetBrains.
the class ConvertMultilineStringToSingleLineIntention method processIntention.
@Override
protected void processIntention(@NotNull PsiElement element, @NotNull Project project, Editor editor) throws IncorrectOperationException {
String quote = element.getText().substring(0, 1);
StringBuilder buffer = new StringBuilder();
buffer.append(quote);
GrExpression old;
if (element instanceof GrLiteralImpl) {
appendSimpleStringValue(element, buffer, quote);
old = (GrExpression) element;
} else {
final GrStringImpl gstring = (GrStringImpl) element;
for (GroovyPsiElement child : gstring.getAllContentParts()) {
if (child instanceof GrStringContent) {
appendSimpleStringValue(child, buffer, "\"");
} else if (child instanceof GrStringInjection) {
buffer.append(child.getText());
}
}
old = gstring;
}
buffer.append(quote);
try {
final int offset = editor.getCaretModel().getOffset();
final TextRange range = old.getTextRange();
int shift;
if (range.getStartOffset() == offset) {
shift = 0;
} else if (range.getStartOffset() == offset - 1) {
shift = -1;
} else if (range.getEndOffset() == offset) {
shift = -4;
} else if (range.getEndOffset() == offset + 1) {
shift = -3;
} else {
shift = -2;
}
final GrExpression newLiteral = GroovyPsiElementFactory.getInstance(project).createExpressionFromText(buffer.toString());
old.replaceWithExpression(newLiteral, true);
if (shift != 0) {
editor.getCaretModel().moveToOffset(offset + shift);
}
} catch (IncorrectOperationException e) {
LOG.error(e);
}
}
use of org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.literals.GrLiteralImpl in project intellij-community by JetBrains.
the class ConvertToRegexIntention method processIntention.
@Override
protected void processIntention(@NotNull PsiElement element, @NotNull Project project, Editor editor) throws IncorrectOperationException {
if (!(element instanceof GrLiteral))
return;
StringBuilder buffer = new StringBuilder();
buffer.append("/");
if (GrStringUtil.isDollarSlashyString(((GrLiteral) element))) {
buffer.append(GrStringUtil.removeQuotes(element.getText()));
} else if (element instanceof GrLiteralImpl) {
Object value = ((GrLiteralImpl) element).getValue();
if (value instanceof String) {
GrStringUtil.escapeSymbolsForSlashyStrings(buffer, (String) value);
} else {
String rawText = GrStringUtil.removeQuotes(element.getText());
unescapeAndAppend(buffer, rawText);
}
} else if (element instanceof GrString) {
for (PsiElement part : ((GrString) element).getAllContentParts()) {
if (part instanceof GrStringContent) {
unescapeAndAppend(buffer, part.getText());
} else if (part instanceof GrStringInjection) {
buffer.append(part.getText());
}
}
}
buffer.append("/");
GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(project);
GrExpression regex = factory.createExpressionFromText(buffer);
//don't use replaceWithExpression since it can revert regex to string if regex brakes syntax
element.replace(regex);
}
Aggregations