fix leaks in applet configurable

This commit is contained in:
Sergey Ignatov
2018-01-29 16:48:52 +03:00
parent 922b8433da
commit c4b98a7094
@@ -11,10 +11,7 @@ import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiManager;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiClassUtil;
import org.jetbrains.annotations.NotNull;
@@ -23,7 +20,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
public class AppletConfigurationProducer extends JavaRuntimeConfigurationProducerBase {
private PsiClass myPsiClass;
private SmartPsiElementPointer<PsiClass> myPointer;
protected AppletConfigurationProducer() {
super(AppletConfigurationType.getInstance());
@@ -31,7 +28,7 @@ public class AppletConfigurationProducer extends JavaRuntimeConfigurationProduce
@Override
public PsiElement getSourceElement() {
return myPsiClass;
return myPointer == null ? null : myPointer.getElement();
}
@Override
@@ -40,12 +37,13 @@ public class AppletConfigurationProducer extends JavaRuntimeConfigurationProduce
if (location == null) return null;
final Project project = location.getProject();
final PsiElement element = location.getPsiElement();
myPsiClass = getAppletClass(element, PsiManager.getInstance(project));
if (myPsiClass == null) return null;
PsiClass psiClass = getAppletClass(element, PsiManager.getInstance(project));
if (psiClass == null) return null;
myPointer = SmartPointerManager.createPointer(psiClass);
RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(project, context);
final AppletConfiguration configuration = (AppletConfiguration)settings.getConfiguration();
configuration.setMainClassName(JavaExecutionUtil.getRuntimeQualifiedName(myPsiClass));
configuration.setModule(myPsiClass.isValid() ? ModuleUtilCore.findModuleForPsiElement(myPsiClass) : null);
configuration.setMainClassName(JavaExecutionUtil.getRuntimeQualifiedName(psiClass));
configuration.setModule(psiClass.isValid() ? ModuleUtilCore.findModuleForPsiElement(psiClass) : null);
configuration.setGeneratedName();
return settings;
}
@@ -54,7 +52,6 @@ public class AppletConfigurationProducer extends JavaRuntimeConfigurationProduce
return PREFERED;
}
@Nullable
private static PsiClass getAppletClass(PsiElement element, final PsiManager manager) {
while (element != null) {