类com.intellij.psi.LiteralTextEscaper源码实例Demo

下面列出了怎么用com.intellij.psi.LiteralTextEscaper的API类实例代码及写法,或者点击链接到github查看源代码。

@Test
public void testEncoding() throws Exception {
    PsiFile psiFile = myFixture.configureByText(BashFileType.BASH_FILE_TYPE, " 'abc\n'");

    BashWordImpl word = PsiTreeUtil.findChildOfType(psiFile, BashWordImpl.class);
    Assert.assertNotNull(word);

    LiteralTextEscaper<? extends PsiLanguageInjectionHost> escaper = word.createLiteralTextEscaper();
    Assert.assertTrue(escaper instanceof BashIdentityStringLiteralEscaper<?>);

    TextRange range = TextRange.allOf(word.getUnwrappedCharSequence());
    Assert.assertEquals(0, escaper.getOffsetInHost(0, range));
    Assert.assertEquals(1, escaper.getOffsetInHost(1, range));
    Assert.assertEquals(2, escaper.getOffsetInHost(2, range));
    Assert.assertEquals(3, escaper.getOffsetInHost(3, range));
    Assert.assertEquals(4, escaper.getOffsetInHost(4, range));
}
 
@Test
public void testEscaped1() throws Exception {
    BashWordImpl psiElement = (BashWordImpl) BashPsiElementFactory.createWord(myProject, "$'a\\'a'");
    Assert.assertNotNull(psiElement);

    LiteralTextEscaper<? extends PsiLanguageInjectionHost> textEscaper = psiElement.createLiteralTextEscaper();

    StringBuilder content = new StringBuilder();
    TextRange range = psiElement.getTextContentRange();
    textEscaper.decode(range, content);
    Assert.assertEquals("a'a", content.toString());

    //check the offsets
    Assert.assertEquals(2, textEscaper.getOffsetInHost(0, range)); // a at 2
    Assert.assertEquals(3, textEscaper.getOffsetInHost(1, range)); // ' at 3-4
    Assert.assertEquals(5, textEscaper.getOffsetInHost(2, range)); // a at 5
}
 
@Test
public void testEscaped2() throws Exception {
    // unescpaed content: a\\"'a
    // java escapes \\ to \\\\
    // bash escapes \\\\ to \\\\\\\\
    BashWordImpl psiElement = (BashWordImpl) BashPsiElementFactory.createWord(myProject, "$'a\\\\\\\\\"\\'a\\'");
    Assert.assertNotNull(psiElement);

    LiteralTextEscaper<? extends PsiLanguageInjectionHost> textEscaper = psiElement.createLiteralTextEscaper();

    StringBuilder content = new StringBuilder();
    TextRange range = psiElement.getTextContentRange();
    textEscaper.decode(range, content);

    //decoded text is a\\"'a
    Assert.assertEquals("a\\\\\"'a", content.toString());

    //check the offsets
    Assert.assertEquals(2, textEscaper.getOffsetInHost(0, range)); // a at 2
    Assert.assertEquals(3, textEscaper.getOffsetInHost(1, range)); // \ at 3-4
    Assert.assertEquals(5, textEscaper.getOffsetInHost(2, range)); // \ at 5-6
    Assert.assertEquals(7, textEscaper.getOffsetInHost(3, range)); // " at 7
    Assert.assertEquals(8, textEscaper.getOffsetInHost(4, range)); // ' at 8-9
    Assert.assertEquals(10, textEscaper.getOffsetInHost(5, range)); // a at 10
}
 
@Nonnull
@Override
@RequiredReadAction
public LiteralTextEscaper<? extends PsiLanguageInjectionHost> createLiteralTextEscaper()
{
	IElementType elementType = getLiteralType();
	if(elementType == CSharpTokens.STRING_LITERAL)
	{
		return new CSharpStringLiteralEscaper<>(this);
	}
	else if(elementType == CSharpTokens.VERBATIM_STRING_LITERAL)
	{
		return LiteralTextEscaper.createSimple(this);
	}
	throw new IllegalArgumentException("Unknown " + elementType);
}
 
源代码5 项目: reasonml-idea-plugin   文件: PsiRawBody.java
@NotNull
@Override
public LiteralTextEscaper<? extends PsiLanguageInjectionHost> createLiteralTextEscaper() {
    return new JSStringLiteralEscaper<PsiLanguageInjectionHost>(this) {
        @Override
        protected boolean isRegExpLiteral() {
            return false;
        }
    };
}
 
@NotNull
@Override
public LiteralTextEscaper<? extends PsiLanguageInjectionHost> createLiteralTextEscaper() {
    return new JSStringLiteralEscaper<PsiLanguageInjectionHost>(this) {
        @Override
        protected boolean isRegExpLiteral() {
            return false;
        }
    };
}
 
@Test
public void testUnescpaed() throws Exception {
    BashWordImpl psiElement = (BashWordImpl) BashPsiElementFactory.createWord(myProject, "$'a'");
    Assert.assertNotNull(psiElement);

    LiteralTextEscaper<? extends PsiLanguageInjectionHost> textEscaper = psiElement.createLiteralTextEscaper();

    StringBuilder content = new StringBuilder();
    TextRange range = psiElement.getTextContentRange();
    textEscaper.decode(range, content);
    Assert.assertEquals("a", content.toString());

    //check the offsets
    Assert.assertEquals(2, textEscaper.getOffsetInHost(0, range));
}
 
@NotNull
private StringBuilder unescapeContent(String source) {
    BashWordImpl psiElement = (BashWordImpl) BashPsiElementFactory.createWord(myProject, source);

    LiteralTextEscaper<? extends PsiLanguageInjectionHost> textEscaper = psiElement.createLiteralTextEscaper();

    StringBuilder content = new StringBuilder();
    TextRange range = psiElement.getTextContentRange();
    textEscaper.decode(range, content);
    return content;
}
 
@NotNull
@Override
public LiteralTextEscaper<? extends PsiLanguageInjectionHost> createLiteralTextEscaper() {
    return new FusionDslTextEscaper(this);
}
 
源代码10 项目: BashSupport   文件: BashHereDocImpl.java
@NotNull
@Override
public LiteralTextEscaper<? extends PsiLanguageInjectionHost> createLiteralTextEscaper() {
    return new HeredocLiteralEscaper<PsiLanguageInjectionHost>(this);
}
 
源代码11 项目: consulo-unity3d   文件: ShaderCGScript.java
@Nonnull
@Override
public LiteralTextEscaper<? extends PsiLanguageInjectionHost> createLiteralTextEscaper()
{
	return LiteralTextEscaper.createSimple(this);
}
 
源代码12 项目: consulo   文件: PsiCommentImpl.java
@Override
@Nonnull
public LiteralTextEscaper<PsiCommentImpl> createLiteralTextEscaper() {
  return new CommentLiteralEscaper(this);
}
 
 类所在包
 类方法
 同包方法