IDEA-CR-65991 adjusted markers greediness computation
authorAlexandr Evstigneev <Alexandr.Evstigneev@jetbrains.com>
Thu, 13 Aug 2020 13:11:49 +0000 (16:11 +0300)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Thu, 13 Aug 2020 13:56:34 +0000 (13:56 +0000)
Markers should be handled separately in host and injected file, because they may be adjusted in different ways

IDEA-CR-65991

GitOrigin-RevId: fc14c1ccdf70a3e5b486ab653a3fe002ab20cc1d

platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/changesHandler/CommonInjectedFileChangesHandler.kt

index f17d470b6613b8eb5057ca6ac07bcbe9648b3ddc..8dc02f43384a64ea64cf4c1113502f9365720a6b 100644 (file)
@@ -33,7 +33,8 @@ open class CommonInjectedFileChangesHandler(
     val result = ArrayList<MarkersMapping>(shreds.size)
 
     val smartPointerManager = SmartPointerManager.getInstance(myProject)
-    var curOffset = -1
+    var currentOffsetInHostFile = -1
+    var currentOffsetInInjectedFile = -1
     for (shred in shreds) {
       val rangeMarker = fragmentMarkerFromShred(shred)
       val rangeInsideHost = shred.rangeInsideHost
@@ -44,11 +45,14 @@ open class CommonInjectedFileChangesHandler(
 
       origMarker.isGreedyToRight = true
       rangeMarker.isGreedyToRight = true
-      if (origMarker.startOffset > curOffset) {
+      if (origMarker.startOffset > currentOffsetInHostFile) {
         origMarker.isGreedyToLeft = true
+      }
+      if (rangeMarker.startOffset > currentOffsetInInjectedFile) {
         rangeMarker.isGreedyToLeft = true
       }
-      curOffset = origMarker.endOffset
+      currentOffsetInHostFile = origMarker.endOffset
+      currentOffsetInInjectedFile = rangeMarker.endOffset
     }
     return result
   }