From 65ca67c7d79bb1b1aaa8f811669063100922e8be Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Mon, 18 Apr 2011 09:56:59 +0400 Subject: [PATCH] EA-14331 --- .../com/intellij/lang/folding/FoldingDescriptor.java | 5 +++++ .../codeInsight/folding/impl/FoldingUpdate.java | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/platform/lang-api/src/com/intellij/lang/folding/FoldingDescriptor.java b/platform/lang-api/src/com/intellij/lang/folding/FoldingDescriptor.java index 5833f4621267..b37f91d83d4c 100644 --- a/platform/lang-api/src/com/intellij/lang/folding/FoldingDescriptor.java +++ b/platform/lang-api/src/com/intellij/lang/folding/FoldingDescriptor.java @@ -147,4 +147,9 @@ public class FoldingDescriptor { public boolean isNonExpandable() { return myNeverExpands; } + + @Override + public String toString() { + return myRange + " for AST: " + myElement; + } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/FoldingUpdate.java b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/FoldingUpdate.java index 18bb76499f02..a610e4f67c55 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/FoldingUpdate.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/FoldingUpdate.java @@ -29,6 +29,7 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; import com.intellij.psi.util.CachedValueProvider; @@ -147,13 +148,22 @@ public class FoldingUpdate { }; } - private static void getFoldingsFor(PsiFile file, Document document, Map elementsToFoldMap, boolean quick) { + private static void getFoldingsFor(@NotNull PsiFile file, @NotNull Document document, @NotNull Map elementsToFoldMap, boolean quick) { final FileViewProvider viewProvider = file.getViewProvider(); for (final Language language : viewProvider.getLanguages()) { final PsiFile psi = viewProvider.getPsi(language); final FoldingBuilder foldingBuilder = LanguageFolding.INSTANCE.forLanguage(language); if (psi != null && foldingBuilder != null) { + TextRange docRange = TextRange.from(0, document.getTextLength()); for (FoldingDescriptor descriptor : LanguageFolding.buildFoldingDescriptors(foldingBuilder, psi, document, quick)) { + TextRange range = descriptor.getRange(); + if (!docRange.contains(range)) { + LOG.error("Folding descriptor " + descriptor + + " made by " + foldingBuilder + + " for " +language + + " and called on file " + psi + + " is outside document range: " + docRange); + } elementsToFoldMap.put(descriptor.getElement().getPsi(), descriptor); } }