mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix DummyHolder copying and stubbed PSI mark/release after copying
fixes LambdaToAnonymousTransformTest
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user