diff options
Diffstat (limited to 'platform/core-impl/src/com/intellij/psi/impl/source/tree/injected/CommentLiteralEscaper.java')
-rw-r--r-- | platform/core-impl/src/com/intellij/psi/impl/source/tree/injected/CommentLiteralEscaper.java | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/tree/injected/CommentLiteralEscaper.java b/platform/core-impl/src/com/intellij/psi/impl/source/tree/injected/CommentLiteralEscaper.java new file mode 100644 index 000000000000..3374a2b59f87 --- /dev/null +++ b/platform/core-impl/src/com/intellij/psi/impl/source/tree/injected/CommentLiteralEscaper.java @@ -0,0 +1,59 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.intellij.psi.impl.source.tree.injected; + +import com.intellij.openapi.util.ProperTextRange; +import com.intellij.lang.CodeDocumentationAwareCommenter; +import com.intellij.lang.Commenter; +import com.intellij.lang.LanguageCommenters; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.LiteralTextEscaper; +import com.intellij.psi.impl.source.tree.PsiCommentImpl; +import org.jetbrains.annotations.NotNull; + +/** + * @author cdr +*/ +public class CommentLiteralEscaper extends LiteralTextEscaper<PsiCommentImpl> { + public CommentLiteralEscaper(PsiCommentImpl host) { + super(host); + } + + @Override + public boolean decode(@NotNull final TextRange rangeInsideHost, @NotNull StringBuilder outChars) { + ProperTextRange.assertProperRange(rangeInsideHost); + outChars.append(myHost.getText(), rangeInsideHost.getStartOffset(), rangeInsideHost.getEndOffset()); + return true; + } + + @Override + public int getOffsetInHost(int offsetInDecoded, @NotNull final TextRange rangeInsideHost) { + int offset = offsetInDecoded + rangeInsideHost.getStartOffset(); + if (offset < rangeInsideHost.getStartOffset()) offset = rangeInsideHost.getStartOffset(); + if (offset > rangeInsideHost.getEndOffset()) offset = rangeInsideHost.getEndOffset(); + return offset; + } + + @Override + public boolean isOneLine() { + final Commenter commenter = LanguageCommenters.INSTANCE.forLanguage(myHost.getLanguage()); + if (commenter instanceof CodeDocumentationAwareCommenter) { + return myHost.getTokenType() == ((CodeDocumentationAwareCommenter) commenter).getLineCommentTokenType(); + } + return false; + } +}
\ No newline at end of file |