package consulo.csharp.lang.psi.impl.manipulator;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.AbstractElementManipulator;
import com.intellij.psi.PsiElement;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.IncorrectOperationException;
import consulo.annotations.RequiredReadAction;
import consulo.csharp.lang.psi.CSharpTokens;
import consulo.csharp.lang.psi.CSharpTokensImpl;
import consulo.csharp.lang.psi.impl.source.CSharpConstantExpressionImpl;
/**
* @author VISTALL
* @since 07-Jan-17
*/
public class CSharpConstantExpressionElementManipulator extends AbstractElementManipulator
{
@Override
@RequiredReadAction
public PsiElement handleContentChange(@NotNull PsiElement element, @NotNull TextRange textRange, String s) throws IncorrectOperationException
{
CSharpConstantExpressionImpl constantExpression = (CSharpConstantExpressionImpl) element;
StringBuilder builder = new StringBuilder();
IElementType elementType = ((CSharpConstantExpressionImpl) element).getLiteralType();
if(elementType == CSharpTokens.STRING_LITERAL)
{
builder.append("\"");
}
else if(elementType == CSharpTokens.VERBATIM_STRING_LITERAL)
{
builder.append("@\"");
}
else if(elementType == CSharpTokensImpl.INTERPOLATION_STRING_LITERAL)
{
builder.append("$\"");
}
builder.append(s);
builder.append("\"");
return constantExpression.updateText(builder.toString());
}
@NotNull
@Override
@RequiredReadAction
public TextRange getRangeInElement(@NotNull PsiElement element)
{
return CSharpConstantExpressionImpl.getStringValueTextRange((CSharpConstantExpressionImpl) element);
}
}