From d8ec59b2214f90aabd70cd7f3b5f896f17b7acba Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Sun, 8 Dec 2013 21:24:39 +0100 Subject: [PATCH] no need to create strings of PsiFile's Text when we can avoid it or use charsequence --- .../codeInsight/completion/AllClassesGetter.java | 4 ++-- .../FileHeaderChecker.java | 3 ++- .../folding/impl/JavaFoldingBuilderBase.java | 2 +- .../completion/CompletionAssertions.java | 5 +++-- .../completion/impl/CompletionServiceImpl.java | 16 ++++++++-------- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java b/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java index 2367ce3deb11..81cb9b5e1185 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java @@ -193,14 +193,14 @@ public class AllClassesGetter { private static String getPackagePrefix(final PsiElement context, final int offset) { - final String fileText = context.getContainingFile().getText(); + final CharSequence fileText = context.getContainingFile().getViewProvider().getContents(); int i = offset - 1; while (i >= 0) { final char c = fileText.charAt(i); if (!Character.isJavaIdentifierPart(c) && c != '.') break; i--; } - String prefix = fileText.substring(i + 1, offset); + String prefix = fileText.subSequence(i + 1, offset).toString(); final int j = prefix.lastIndexOf('.'); return j > 0 ? prefix.substring(0, j) : ""; } diff --git a/java/java-impl/src/com/intellij/codeInspection/defaultFileTemplateUsage/FileHeaderChecker.java b/java/java-impl/src/com/intellij/codeInspection/defaultFileTemplateUsage/FileHeaderChecker.java index ffdd14fc0aa8..dd38725d739f 100644 --- a/java/java-impl/src/com/intellij/codeInspection/defaultFileTemplateUsage/FileHeaderChecker.java +++ b/java/java-impl/src/com/intellij/codeInspection/defaultFileTemplateUsage/FileHeaderChecker.java @@ -49,13 +49,14 @@ import java.util.regex.Pattern; public class FileHeaderChecker { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInspection.defaultFileTemplateUsage.FileHeaderChecker"); + // abcdfghdjsjd kfkdjekr dfhakdjfk dkfkjgk dfjgjfkg ekfk fkgkvv ggkk eefkgjkdd jfkkkssl dfghgk gkhller hhksl lfflgl static ProblemDescriptor checkFileHeader(@NotNull final PsiFile file, final InspectionManager manager, boolean onTheFly) { TIntObjectHashMap offsetToProperty = new TIntObjectHashMap(); Pattern pattern = getTemplatePattern(FileTemplateManager.getInstance() .getDefaultTemplate(FileTemplateManager.FILE_HEADER_TEMPLATE_NAME), file.getProject(), offsetToProperty ); - Matcher matcher = pattern.matcher(file.getText()); + Matcher matcher = pattern.matcher(file.getViewProvider().getContents()); if (matcher.matches()) { final int startOffset = matcher.start(1); final int endOffset = matcher.end(1); diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/JavaFoldingBuilderBase.java b/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/JavaFoldingBuilderBase.java index fe8804c617ef..712bbad96583 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/JavaFoldingBuilderBase.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/JavaFoldingBuilderBase.java @@ -150,7 +150,7 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem } public static boolean hasErrorElementsNearby(final PsiFile file, int startOffset, int endOffset) { - endOffset = CharArrayUtil.shiftForward(file.getText(), endOffset, " \t\n"); + endOffset = CharArrayUtil.shiftForward(file.getViewProvider().getContents(), endOffset, " \t\n"); for (PsiElement element : CollectHighlightsUtil.getElementsInRange(file, startOffset, endOffset)) { if (element instanceof PsiErrorElement) { return true; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionAssertions.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionAssertions.java index 4d1eea7f4133..76ca0b57c8f5 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionAssertions.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionAssertions.java @@ -145,8 +145,9 @@ class CompletionAssertions { } final TextRange range = insertedElement.getTextRange(); - String fileCopyText = fileCopy.getText(); - if ((range.getEndOffset() > fileCopyText.length()) || !range.substring(fileCopyText).equals(insertedElement.getText())) { + CharSequence fileCopyText = fileCopy.getViewProvider().getContents(); + if ((range.getEndOffset() > fileCopyText.length()) || + !fileCopyText.subSequence(range.getStartOffset(), range.getEndOffset()).toString().equals(insertedElement.getText())) { throw new LogEventException("Inconsistent completion tree", "range=" + range + "\n" + DebugUtil.currentStackTrace(), createFileTextAttachment(fileCopy, originalFile), createAstAttachment(fileCopy, originalFile), new Attachment("Element at caret.txt", insertedElement.getText())); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java index 4efaf7f78efc..1565d9e50671 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java @@ -84,7 +84,7 @@ public class CompletionServiceImpl extends CompletionService{ @NotNull final CompletionContributor contributor) { final PsiElement position = parameters.getPosition(); final String prefix = CompletionData.findPrefixStatic(position, parameters.getOffset()); - final String textBeforePosition = parameters.getPosition().getContainingFile().getText().substring(0, parameters.getOffset()); + final int lengthOfTextBeforePosition = parameters.getOffset(); ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator(); if (!(indicator instanceof CompletionProgressIndicator)) { throw new AssertionError("createResultSet may be invoked only from completion thread: " + indicator + "!=" + getCurrentCompletion() + "; phase set at " + ourPhaseTrace); @@ -92,7 +92,7 @@ public class CompletionServiceImpl extends CompletionService{ CompletionProgressIndicator process = (CompletionProgressIndicator)indicator; CamelHumpMatcher matcher = new CamelHumpMatcher(prefix); CompletionSorterImpl sorter = defaultSorter(parameters, matcher); - return new CompletionResultSetImpl(consumer, textBeforePosition, matcher, contributor,parameters, sorter, process, null); + return new CompletionResultSetImpl(consumer, lengthOfTextBeforePosition, matcher, contributor,parameters, sorter, process, null); } @Override @@ -105,13 +105,13 @@ public class CompletionServiceImpl extends CompletionService{ } private static class CompletionResultSetImpl extends CompletionResultSet { - private final String myTextBeforePosition; + private final int myLengthOfTextBeforePosition; private final CompletionParameters myParameters; private final CompletionSorterImpl mySorter; private final CompletionProgressIndicator myProcess; @Nullable private final CompletionResultSetImpl myOriginal; - public CompletionResultSetImpl(final Consumer consumer, final String textBeforePosition, + public CompletionResultSetImpl(final Consumer consumer, final int lengthOfTextBeforePosition, final PrefixMatcher prefixMatcher, CompletionContributor contributor, CompletionParameters parameters, @@ -119,7 +119,7 @@ public class CompletionServiceImpl extends CompletionService{ @NotNull CompletionProgressIndicator process, @Nullable CompletionResultSetImpl original) { super(prefixMatcher, consumer, contributor); - myTextBeforePosition = textBeforePosition; + myLengthOfTextBeforePosition = lengthOfTextBeforePosition; myParameters = parameters; mySorter = sorter; myProcess = process; @@ -142,7 +142,7 @@ public class CompletionServiceImpl extends CompletionService{ @Override @NotNull public CompletionResultSet withPrefixMatcher(@NotNull final PrefixMatcher matcher) { - return new CompletionResultSetImpl(getConsumer(), myTextBeforePosition, matcher, myContributor, myParameters, mySorter, myProcess, this); + return new CompletionResultSetImpl(getConsumer(), myLengthOfTextBeforePosition, matcher, myContributor, myParameters, mySorter, myProcess, this); } @Override @@ -165,7 +165,7 @@ public class CompletionServiceImpl extends CompletionService{ @NotNull @Override public CompletionResultSet withRelevanceSorter(@NotNull CompletionSorter sorter) { - return new CompletionResultSetImpl(getConsumer(), myTextBeforePosition, getPrefixMatcher(), myContributor, myParameters, (CompletionSorterImpl)sorter, myProcess, this); + return new CompletionResultSetImpl(getConsumer(), myLengthOfTextBeforePosition, getPrefixMatcher(), myContributor, myParameters, (CompletionSorterImpl)sorter, myProcess, this); } @Override @@ -183,7 +183,7 @@ public class CompletionServiceImpl extends CompletionService{ public void restartCompletionOnPrefixChange(ElementPattern prefixCondition) { final CompletionProgressIndicator indicator = getCompletionService().getCurrentCompletion(); if (indicator != null) { - indicator.addWatchedPrefix(myTextBeforePosition.length() - getPrefixMatcher().getPrefix().length(), prefixCondition); + indicator.addWatchedPrefix(myLengthOfTextBeforePosition - getPrefixMatcher().getPrefix().length(), prefixCondition); } }