Search in sources :

Example 11 with GrStringInjection

use of org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection in project intellij-community by JetBrains.

the class StringPartInfo method areInjectionsCut.

private static boolean areInjectionsCut(GrString literal, int startOffset, int endOffset) {
    TextRange selectionRange = new TextRange(startOffset, endOffset);
    GrStringInjection[] injections = literal.getInjections();
    for (GrStringInjection injection : injections) {
        TextRange range = injection.getTextRange();
        if (!selectionRange.contains(range) && !range.contains(selectionRange) && range.intersects(selectionRange)) {
            return true;
        }
    }
    return false;
}
Also used : TextRange(com.intellij.openapi.util.TextRange) GrStringInjection(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection)

Example 12 with GrStringInjection

use of org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection in project intellij-community by JetBrains.

the class ControlFlowBuilder method visitClosure.

@Override
public void visitClosure(@NotNull GrClosableBlock closure) {
    //do not go inside closures except gstring injections
    if (closure.getParent() instanceof GrStringInjection) {
        for (GrParameter parameter : closure.getAllParameters()) {
            if (myPolicy.isVariableInitialized(parameter)) {
                addNode(new ReadWriteVariableInstruction(parameter.getName(), parameter, ReadWriteVariableInstruction.WRITE));
            }
        }
        addNode(new ReadWriteVariableInstruction("owner", closure.getLBrace(), ReadWriteVariableInstruction.WRITE));
        super.visitClosure(closure);
        return;
    }
    ReadWriteVariableInstruction[] reads = ControlFlowBuilderUtil.getReadsWithoutPriorWrites(closure.getControlFlow(), false);
    for (ReadWriteVariableInstruction read : reads) {
        PsiElement element = read.getElement();
        if (!(element instanceof GrReferenceExpression) || myPolicy.isReferenceAccepted((GrReferenceExpression) element)) {
            addNodeAndCheckPending(new ReadWriteVariableInstruction(read.getVariableName(), closure, ReadWriteVariableInstruction.READ));
        }
    }
    addNodeAndCheckPending(new InstructionImpl(closure));
}
Also used : GrStringInjection(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection) GrParameter(org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter) GroovyPsiElement(org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement)

Example 13 with GrStringInjection

use of org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection 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);
    }
}
Also used : GrStringContent(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringContent) GroovyPsiElement(org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement) GrLiteralImpl(org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.literals.GrLiteralImpl) GrExpression(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression) GrStringImpl(org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.literals.GrStringImpl) TextRange(com.intellij.openapi.util.TextRange) IncorrectOperationException(com.intellij.util.IncorrectOperationException) GrStringInjection(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection)

Example 14 with GrStringInjection

use of org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection 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);
}
Also used : GroovyPsiElementFactory(org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory) GrStringContent(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringContent) GrLiteralImpl(org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.literals.GrLiteralImpl) GrString(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrString) GrExpression(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression) GrString(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrString) GrStringInjection(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection) GrLiteral(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrLiteral) PsiElement(com.intellij.psi.PsiElement)

Example 15 with GrStringInjection

use of org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection in project intellij-community by JetBrains.

the class GroovyGStringSelectioner method select.

@Override
public List<TextRange> select(PsiElement e, CharSequence editorText, int cursorOffset, Editor editor) {
    final List<TextRange> ranges = ContainerUtil.newArrayList();
    final PsiElement parent = e.getParent();
    if (parent instanceof GrStringContent && parent.getParent() instanceof GrString) {
        TextRange range = getLineTextRange(parent, cursorOffset);
        ranges.add(range);
    } else if (parent instanceof GrString) {
        PsiElement firstChild = parent.getFirstChild();
        PsiElement lastChild = parent.getLastChild();
        if (firstChild.getNode().getElementType() == GroovyTokenTypes.mGSTRING_BEGIN) {
            firstChild = firstChild.getNextSibling();
        }
        if (lastChild.getNode().getElementType() == GroovyTokenTypes.mGSTRING_END) {
            lastChild = lastChild.getPrevSibling();
        }
        if (firstChild != null && lastChild != null) {
            TextRange range = new TextRange(firstChild.getTextOffset(), lastChild.getTextOffset() + lastChild.getTextLength());
            ranges.add(range);
        }
        ranges.add(parent.getTextRange());
    } else if (parent instanceof GrStringInjection) {
        if (e instanceof GrReferenceExpression) {
            List<TextRange> r = new ArrayList<>(2);
            SelectWordUtil.addWordSelection(editor.getSettings().isCamelWords(), editorText, cursorOffset, r);
            for (TextRange textRange : r) {
                if (editorText.charAt(textRange.getStartOffset()) == '$') {
                    textRange = new TextRange(textRange.getStartOffset() + 1, textRange.getEndOffset());
                }
                ranges.add(textRange);
            }
        }
        ranges.add(parent.getTextRange());
        ranges.add(e.getTextRange());
    }
    return ranges;
}
Also used : GrStringContent(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringContent) GrString(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrString) ArrayList(java.util.ArrayList) TextRange(com.intellij.openapi.util.TextRange) GrStringInjection(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection) PsiElement(com.intellij.psi.PsiElement) GrReferenceExpression(org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression)

Aggregations

GrStringInjection (org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection)17 GrString (org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrString)7 TextRange (com.intellij.openapi.util.TextRange)6 GroovyPsiElement (org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement)6 GrExpression (org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression)6 PsiElement (com.intellij.psi.PsiElement)5 GrStringContent (org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringContent)5 Nullable (org.jetbrains.annotations.Nullable)4 GrClosableBlock (org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock)4 GrReferenceExpression (org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression)4 GrLiteral (org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrLiteral)4 GrLiteralImpl (org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.literals.GrLiteralImpl)3 ArrayList (java.util.ArrayList)2 GrStatement (org.jetbrains.plugins.groovy.lang.psi.api.statements.GrStatement)2 GrStringImpl (org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.literals.GrStringImpl)2 GradleResolvedVariable (com.android.tools.idea.gradle.dsl.parser.GradleResolvedVariable)1 ASTNode (com.intellij.lang.ASTNode)1 FoldingDescriptor (com.intellij.lang.folding.FoldingDescriptor)1 NamedFoldingDescriptor (com.intellij.lang.folding.NamedFoldingDescriptor)1 FoldingGroup (com.intellij.openapi.editor.FoldingGroup)1