mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
more diagnostics for EA-100155 - IAE: UsageInfo.<init>
This commit is contained in:
@@ -35,7 +35,7 @@ public class UsageInfo {
|
||||
public final boolean isNonCodeUsage;
|
||||
protected boolean myDynamicUsage;
|
||||
|
||||
public UsageInfo(@NotNull PsiElement element, int startOffset, int endOffset, boolean isNonCodeUsage) {
|
||||
public UsageInfo(@NotNull PsiElement element, final int startOffset, final int endOffset, boolean isNonCodeUsage) {
|
||||
element = element.getNavigationElement();
|
||||
PsiFile file = element.getContainingFile();
|
||||
PsiElement topElement = file == null ? element : file;
|
||||
@@ -45,30 +45,32 @@ public class UsageInfo {
|
||||
if (elementRange == null) {
|
||||
throw new IllegalArgumentException("text range null for " + element + "; " + element.getClass());
|
||||
}
|
||||
int effectiveStart;
|
||||
int effectiveEnd;
|
||||
if (startOffset == -1 && endOffset == -1) {
|
||||
// calculate natural element range
|
||||
startOffset = element.getTextOffset() - elementRange.getStartOffset();
|
||||
endOffset = elementRange.getEndOffset() - elementRange.getStartOffset();
|
||||
effectiveStart = element.getTextOffset() - elementRange.getStartOffset();
|
||||
effectiveEnd = elementRange.getLength();
|
||||
}
|
||||
else {
|
||||
effectiveStart = startOffset;
|
||||
effectiveEnd = endOffset;
|
||||
}
|
||||
|
||||
if (startOffset < 0) {
|
||||
throw new IllegalArgumentException("element " + element + "; startOffset " +startOffset);
|
||||
}
|
||||
if (startOffset > endOffset) {
|
||||
throw new IllegalArgumentException("element " + element + "; diff " + (endOffset-startOffset));
|
||||
if (effectiveStart < 0 || effectiveStart > effectiveEnd) {
|
||||
throw new IllegalArgumentException("element " + element + "; startOffset " +startOffset+"; endOffset="+endOffset+
|
||||
"; effectiveStart="+effectiveStart+"; effectiveEnd="+effectiveEnd+
|
||||
"; elementRange="+elementRange+"; element.getTextOffset()="+element.getTextOffset());
|
||||
}
|
||||
|
||||
Project project = topElement.getProject();
|
||||
SmartPointerManager smartPointerManager = SmartPointerManager.getInstance(project);
|
||||
mySmartPointer = smartPointerManager.createSmartPsiElementPointer(element, file);
|
||||
if (startOffset != element.getTextOffset() - elementRange.getStartOffset() || endOffset != elementRange.getLength()) {
|
||||
TextRange rangeToStore;
|
||||
if (file != null && InjectedLanguageManager.getInstance(project).isInjectedFragment(file)) {
|
||||
rangeToStore = elementRange;
|
||||
}
|
||||
else {
|
||||
rangeToStore = TextRange.create(startOffset, endOffset).shiftRight(elementRange.getStartOffset());
|
||||
}
|
||||
if (file != null &&
|
||||
(effectiveStart != element.getTextOffset() - elementRange.getStartOffset() || effectiveEnd != elementRange.getLength())) {
|
||||
TextRange rangeToStore = InjectedLanguageManager.getInstance(project).isInjectedFragment(file)
|
||||
? elementRange
|
||||
: TextRange.create(effectiveStart, effectiveEnd).shiftRight(elementRange.getStartOffset());
|
||||
myPsiFileRange = smartPointerManager.createSmartPsiFileRangePointer(file, rangeToStore);
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user