diff options
Diffstat (limited to 'platform/core-impl/src/com/intellij/psi/impl')
3 files changed, 111 insertions, 7 deletions
diff --git a/platform/core-impl/src/com/intellij/psi/impl/DocumentCommitProcessor.java b/platform/core-impl/src/com/intellij/psi/impl/DocumentCommitProcessor.java index a42d7a1944f0..670aaf1d8493 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/DocumentCommitProcessor.java +++ b/platform/core-impl/src/com/intellij/psi/impl/DocumentCommitProcessor.java @@ -51,20 +51,20 @@ public abstract class DocumentCommitProcessor { public abstract void commitAsynchronously(@NotNull final Project project, @NotNull final Document document, @NonNls @NotNull Object reason); protected static class CommitTask { - public final Document document; - public final Project project; + @NotNull public final Document document; + @NotNull public final Project project; // when queued it's not started // when dequeued it's started // when failed it's canceled - public final ProgressIndicator indicator; // progress to commit this doc under. - public final Object reason; + @NotNull public final ProgressIndicator indicator; // progress to commit this doc under. + @NotNull public final Object reason; public boolean removed; // task marked as removed, should be ignored. public CommitTask(@NotNull Document document, - @NotNull Project project, - @NotNull ProgressIndicator indicator, - @NotNull Object reason) { + @NotNull Project project, + @NotNull ProgressIndicator indicator, + @NotNull Object reason) { this.document = document; this.project = project; this.indicator = indicator; diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/tree/PsiCommentImpl.java b/platform/core-impl/src/com/intellij/psi/impl/source/tree/PsiCommentImpl.java new file mode 100644 index 000000000000..70bc987a91f8 --- /dev/null +++ b/platform/core-impl/src/com/intellij/psi/impl/source/tree/PsiCommentImpl.java @@ -0,0 +1,45 @@ +/* + * 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; + +import com.intellij.psi.LiteralTextEscaper; +import com.intellij.psi.PsiLanguageInjectionHost; +import com.intellij.psi.impl.source.tree.injected.CommentLiteralEscaper; +import com.intellij.psi.tree.IElementType; +import org.jetbrains.annotations.NotNull; + +public class PsiCommentImpl extends PsiCoreCommentImpl implements PsiLanguageInjectionHost { + public PsiCommentImpl(IElementType type, CharSequence text) { + super(type, text); + } + + @Override + public boolean isValidHost() { + return true; + } + + @Override + public PsiLanguageInjectionHost updateText(@NotNull final String text) { + return (PsiCommentImpl)replaceWithText(text); + } + + @Override + @NotNull + public LiteralTextEscaper<PsiCommentImpl> createLiteralTextEscaper() { + return new CommentLiteralEscaper(this); + } +} 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 |