don't allow to delete external/inferred annotations (EA-65757 - PIEAE: PsiUtilCore.ensureValid)

This commit is contained in:
peter
2015-06-29 17:29:27 +02:00
parent 0b96407b3f
commit c8a1a2d447
3 changed files with 11 additions and 0 deletions
@@ -30,6 +30,7 @@ import com.intellij.psi.search.ProjectScope;
import com.intellij.psi.util.CachedValueProvider;
import com.intellij.psi.util.CachedValuesManager;
import com.intellij.psi.util.PsiFormatUtil;
import com.intellij.testFramework.LightVirtualFile;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.Stack;
import com.intellij.util.indexing.FileBasedIndex;
@@ -385,6 +386,7 @@ public class ProjectBytecodeAnalysis {
private PsiAnnotation createAnnotationFromText(@NotNull final String text) throws IncorrectOperationException {
PsiAnnotation annotation = JavaPsiFacade.getElementFactory(myProject).createAnnotationFromText(text, null);
annotation.putUserData(INFERRED_ANNOTATION, Boolean.TRUE);
((LightVirtualFile)annotation.getContainingFile().getViewProvider().getVirtualFile()).markReadOnly();
return annotation;
}
}
@@ -28,6 +28,7 @@ import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.*;
import com.intellij.psi.util.PsiFormatUtil;
import com.intellij.testFramework.LightVirtualFile;
import com.intellij.util.Function;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.SmartList;
@@ -399,6 +400,7 @@ public abstract class BaseExternalAnnotationsManager extends ExternalAnnotations
private static PsiAnnotation markAsExternalAnnotation(@NotNull PsiAnnotation annotation) {
annotation.putUserData(EXTERNAL_ANNO_MARKER, Boolean.TRUE);
((LightVirtualFile)annotation.getContainingFile().getViewProvider().getVirtualFile()).markReadOnly();
return annotation;
}
@@ -34,6 +34,7 @@ import java.nio.charset.Charset;
public class LightVirtualFile extends LightVirtualFileBase {
private CharSequence myContent = "";
private Language myLanguage;
private boolean myReadOnly;
public LightVirtualFile() {
this("");
@@ -127,6 +128,7 @@ public class LightVirtualFile extends LightVirtualFileBase {
}
private void setContent(@NotNull CharSequence content) {
assert !myReadOnly;
//StringUtil.assertValidSeparators(content);
myContent = content;
}
@@ -136,6 +138,11 @@ public class LightVirtualFile extends LightVirtualFileBase {
return myContent;
}
public void markReadOnly() {
setWritable(false);
myReadOnly = true;
}
@Override
public String toString() {
return "LightVirtualFile: " + getPresentableUrl();