conserve memory: do not store PsiFile in a node

This commit is contained in:
Alexey Kudravtsev
2011-08-04 15:58:16 +04:00
parent 04b24f69a1
commit 53f66fda3b
2 changed files with 10 additions and 15 deletions
@@ -34,15 +34,16 @@ import java.awt.*;
* Date: 30-Jan-2006
*/
public class BasePsiNode<T extends PsiElement> extends PackageDependenciesNode {
private SmartPsiElementPointer myPsiElementPointer = null;
private PsiFile myFile = null;
private final SmartPsiElementPointer myPsiElementPointer;
public BasePsiNode(final T element) {
super(element.getProject());
if (element.isValid()) {
myPsiElementPointer = SmartPointerManager.getInstance(element.getProject()).createLazyPointer(element);
myFile = element.getContainingFile();
}
myPsiElementPointer = SmartPointerManager.getInstance(myProject).createSmartPsiElementPointer(element);
}
else {
myPsiElementPointer = null;
}
}
@Nullable
@@ -67,8 +68,8 @@ public class BasePsiNode<T extends PsiElement> extends PackageDependenciesNode {
@Nullable
public Color getColor() {
if (myColor == null && myFile != null) {
myColor = FileStatusManager.getInstance(myFile.getProject()).getStatus(myFile.getVirtualFile()).getColor();
if (myColor == null && getContainingFile() != null) {
myColor = FileStatusManager.getInstance(myProject).getStatus(myPsiElementPointer.getVirtualFile()).getColor();
if (myColor == null) {
myColor = NOT_CHANGED;
}
@@ -104,7 +105,7 @@ public class BasePsiNode<T extends PsiElement> extends PackageDependenciesNode {
}
public PsiFile getContainingFile() {
return myFile;
return myPsiElementPointer.getContainingFile();
}
public boolean isValid() {
@@ -16,7 +16,6 @@
package com.intellij.packageDependencies.ui;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Iconable;
import com.intellij.openapi.vcs.FileStatusManager;
@@ -33,10 +32,8 @@ import java.util.Map;
import java.util.Set;
public class FileNode extends PackageDependenciesNode {
private PsiFile myFile;
private final VirtualFile myVFile;
private final boolean myMarked;
private static final Logger LOG = Logger.getInstance("com.intellij.packageDependencies.ui.FileNode");
public FileNode(VirtualFile file, Project project, boolean marked) {
super(project);
@@ -125,9 +122,6 @@ public class FileNode extends PackageDependenciesNode {
@Nullable
private PsiFile getFile() {
if (myFile == null) {
myFile = PsiManager.getInstance(myProject).findFile(myVFile);
}
return myFile;
return PsiManager.getInstance(myProject).findFile(myVFile);
}
}