@Override protected void collectAdditionalElementsToRename(List<Pair<PsiElement, TextRange>> stringUsages) { if (isReplaceAllOccurrences()) { for (E expression : getOccurrences()) { LOG.assertTrue(expression.isValid(), expression.getText()); stringUsages.add( Pair.<PsiElement, TextRange>create( expression, new TextRange(0, expression.getTextLength()))); } } else if (getExpr() != null) { correctExpression(); final E expr = getExpr(); LOG.assertTrue(expr.isValid(), expr.getText()); stringUsages.add( Pair.<PsiElement, TextRange>create(expr, new TextRange(0, expr.getTextLength()))); } final V localVariable = getLocalVariable(); if (localVariable != null) { final PsiElement nameIdentifier = localVariable.getNameIdentifier(); if (nameIdentifier != null) { int length = nameIdentifier.getTextLength(); stringUsages.add( Pair.<PsiElement, TextRange>create(nameIdentifier, new TextRange(0, length))); } } }
protected void updateTitle(@Nullable V variable, String value) { if (variable == null) return; final String variableText = variable.getText(); final PsiElement identifier = variable.getNameIdentifier(); if (identifier != null) { final int startOffsetInParent = identifier.getStartOffsetInParent(); setPreviewText( variableText.substring(0, startOffsetInParent) + value + variableText.substring(startOffsetInParent + identifier.getTextLength())); } else { setPreviewText(variableText.replaceFirst(variable.getName(), value)); } revalidate(); }
@Override public String getUnescapedText(@NotNull final PsiElement injectedNode) { final StringBuilder text = new StringBuilder(injectedNode.getTextLength()); // gather text from (patched) leaves injectedNode.accept( new PsiRecursiveElementWalkingVisitor() { @Override public void visitElement(PsiElement element) { String leafText = InjectedLanguageUtil.getUnescapedLeafText(element, false); if (leafText != null) { text.append(leafText); return; } super.visitElement(element); } }); return text.toString(); }
@Override public String getUnescapedText(@NotNull final PsiElement injectedNode) { final StringBuilder text = new StringBuilder(injectedNode.getTextLength()); // gather text from (patched) leaves injectedNode.accept( new PsiRecursiveElementWalkingVisitor() { @Override public void visitElement(PsiElement element) { String unescaped = element.getCopyableUserData(UNESCAPED_TEXT); if (unescaped != null) { text.append(unescaped); return; } if (element.getFirstChild() == null) { text.append(element.getText()); return; } super.visitElement(element); } }); return text.toString(); }
public static boolean areParenthesesNecessary( @NotNull JetExpression innerExpression, @NotNull JetExpression currentInner, @NotNull JetExpression parentExpression) { if (parentExpression instanceof JetParenthesizedExpression || innerExpression instanceof JetParenthesizedExpression) { return false; } if (parentExpression instanceof JetWhenExpression || innerExpression instanceof JetWhenExpression) { return false; } if (innerExpression instanceof JetIfExpression) { PsiElement current = parentExpression; while (!(current instanceof JetBlockExpression || current instanceof JetDeclaration || current instanceof JetStatementExpression)) { if (current.getTextRange().getEndOffset() != currentInner.getTextRange().getEndOffset()) { return current.getText().charAt(current.getTextLength() - 1) != ')'; // if current expression is "guarded" by parenthesis, no extra parenthesis is // necessary } current = current.getParent(); } } IElementType innerOperation = getOperation(innerExpression); IElementType parentOperation = getOperation(parentExpression); // 'return (@label{...})' case if (parentExpression instanceof JetReturnExpression && innerOperation == JetTokens.LABEL_IDENTIFIER) { return true; } // '(x: Int) < y' case if (innerExpression instanceof JetBinaryExpressionWithTypeRHS && parentOperation == JetTokens.LT) { return true; } int innerPriority = getPriority(innerExpression); int parentPriority = getPriority(parentExpression); if (innerPriority == parentPriority) { if (parentExpression instanceof JetBinaryExpression) { if (innerOperation == JetTokens.ANDAND || innerOperation == JetTokens.OROR) { return false; } return ((JetBinaryExpression) parentExpression).getRight() == currentInner; } // '-(-x)' case if (parentExpression instanceof JetPrefixExpression && innerExpression instanceof JetPrefixExpression) { return innerOperation == parentOperation && (innerOperation == JetTokens.PLUS || innerOperation == JetTokens.MINUS); } return false; } return innerPriority < parentPriority; }