no need to create strings of PsiFile's Text when we can avoid it or use charsequence

This commit is contained in:
Maxim.Mossienko
2013-12-08 21:24:39 +01:00
parent b6ae811de9
commit d8ec59b221
5 changed files with 16 additions and 14 deletions
@@ -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) : "";
}
@@ -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<String> offsetToProperty = new TIntObjectHashMap<String>();
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);
@@ -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;
@@ -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()));
@@ -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<CompletionResult> consumer, final String textBeforePosition,
public CompletionResultSetImpl(final Consumer<CompletionResult> 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<String> prefixCondition) {
final CompletionProgressIndicator indicator = getCompletionService().getCurrentCompletion();
if (indicator != null) {
indicator.addWatchedPrefix(myTextBeforePosition.length() - getPrefixMatcher().getPrefix().length(), prefixCondition);
indicator.addWatchedPrefix(myLengthOfTextBeforePosition - getPrefixMatcher().getPrefix().length(), prefixCondition);
}
}