diff --git a/platform/core-api/src/com/intellij/psi/util/PsiTreeUtil.java b/platform/core-api/src/com/intellij/psi/util/PsiTreeUtil.java index ab7aae9b2bb9..e27e8943dfd2 100644 --- a/platform/core-api/src/com/intellij/psi/util/PsiTreeUtil.java +++ b/platform/core-api/src/com/intellij/psi/util/PsiTreeUtil.java @@ -1,6 +1,7 @@ // Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.psi.util; +import com.intellij.lang.ASTNode; import com.intellij.lang.Language; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Condition; @@ -879,13 +880,14 @@ public class PsiTreeUtil { } public static void mark(@NotNull PsiElement element, @NotNull Object marker) { - element.putCopyableUserData(MARKER, marker); + element.getNode().putCopyableUserData(MARKER, marker); } @Nullable public static PsiElement releaseMark(@NotNull PsiElement root, @NotNull Object marker) { - if (marker.equals(root.getCopyableUserData(MARKER))) { - root.putCopyableUserData(MARKER, null); + ASTNode node = root.getNode(); + if (marker.equals(node.getCopyableUserData(MARKER))) { + node.putCopyableUserData(MARKER, null); return root; } else { diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/DummyHolder.java b/platform/core-impl/src/com/intellij/psi/impl/source/DummyHolder.java index fd9227bcb12a..b1fd0328807c 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/DummyHolder.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/DummyHolder.java @@ -152,16 +152,13 @@ public class DummyHolder extends PsiFileImpl { } @Override - @SuppressWarnings({"CloneDoesntDeclareCloneNotSupportedException"}) + @SuppressWarnings({"CloneDoesntDeclareCloneNotSupportedException", "MethodDoesntCallSuperMethod"}) protected PsiFileImpl clone() { - final PsiFileImpl psiClone = cloneImpl(getTreeElement()); - final DummyHolderViewProvider dummyHolderViewProvider = new DummyHolderViewProvider(getManager()); - myViewProvider = dummyHolderViewProvider; - dummyHolderViewProvider.setDummyHolder((DummyHolder)psiClone); - final FileElement treeClone = (FileElement)calcTreeElement().clone(); - psiClone.setTreeElementPointer(treeClone); // should not use setTreeElement here because cloned file still have VirtualFile (SCR17963) + DummyHolder psiClone = (DummyHolder)cloneImpl((FileElement)calcTreeElement().clone()); + DummyHolderViewProvider dummyHolderViewProvider = new DummyHolderViewProvider(getManager()); + psiClone.myViewProvider = dummyHolderViewProvider; + dummyHolderViewProvider.setDummyHolder(psiClone); psiClone.myOriginalFile = isPhysical() ? this : myOriginalFile; - treeClone.setPsi(psiClone); return psiClone; }