preserve smart pointers' forInjected when recreating injection shreds

This commit is contained in:
peter
2018-06-04 12:41:56 +02:00
parent df34c3d206
commit 385470f54d
@@ -67,12 +67,13 @@ class ShredImpl implements PsiLanguageInjectionHost.Shred {
@NotNull PsiLanguageInjectionHost newHost) {
SmartPsiFileRange rangeMarker = relevantRangeInHost;
Segment oldRangeInHostElementPSI = calcRangeInsideHostElement(false);
SmartPointerManager pointerManager = SmartPointerManager.getInstance(rangeMarker.getProject());
SmartPsiElementPointer<PsiLanguageInjectionHost> newHostPointer = pointerManager.createSmartPsiElementPointer(newHost);
SmartPointerManagerImpl pointerManager = (SmartPointerManagerImpl)SmartPointerManager.getInstance(rangeMarker.getProject());
SmartPsiElementPointer<PsiLanguageInjectionHost> newHostPointer = pointerManager.createSmartPsiElementPointer(newHost, newHost.getContainingFile(), true);
if (!rangeInHostElementPSI.equals(TextRange.create(oldRangeInHostElementPSI))) {
Segment hostElementRange = newHostPointer.getRange();
rangeMarker = ((SmartPointerManagerImpl)pointerManager).createSmartPsiFileRangePointer(rangeMarker.getContainingFile(), rangeInHostElementPSI.shiftRight(hostElementRange.getStartOffset()), true);
rangeMarker = pointerManager
.createSmartPsiFileRangePointer(rangeMarker.getContainingFile(), rangeInHostElementPSI.shiftRight(hostElementRange.getStartOffset()), true);
}
return new ShredImpl(rangeMarker, newHostPointer, prefix, suffix, rangeInDecodedPSI, usePsiRange, isOneLine);
}