mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix leaks in run configuration producers
This commit is contained in:
+2
-4
@@ -20,15 +20,13 @@ import org.jetbrains.annotations.Nullable;
|
||||
import java.util.List;
|
||||
|
||||
public class AppletConfigurationProducer extends JavaRuntimeConfigurationProducerBase {
|
||||
private SmartPsiElementPointer<PsiClass> myPointer;
|
||||
|
||||
protected AppletConfigurationProducer() {
|
||||
super(AppletConfigurationType.getInstance());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement getSourceElement() {
|
||||
return myPointer == null ? null : myPointer.getElement();
|
||||
return restoreSourceElement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -39,7 +37,7 @@ public class AppletConfigurationProducer extends JavaRuntimeConfigurationProduce
|
||||
final PsiElement element = location.getPsiElement();
|
||||
PsiClass psiClass = getAppletClass(element, PsiManager.getInstance(project));
|
||||
if (psiClass == null) return null;
|
||||
myPointer = SmartPointerManager.createPointer(psiClass);
|
||||
storeSourceElement(psiClass);
|
||||
RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(project, context);
|
||||
final AppletConfiguration configuration = (AppletConfiguration)settings.getConfiguration();
|
||||
configuration.setMainClassName(JavaExecutionUtil.getRuntimeQualifiedName(psiClass));
|
||||
|
||||
+15
-5
@@ -15,6 +15,8 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.SmartPointerManager;
|
||||
import com.intellij.psi.SmartPsiElementPointer;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -33,6 +35,7 @@ public abstract class RuntimeConfigurationProducer implements Comparable, Clonea
|
||||
private final ConfigurationFactory myConfigurationFactory;
|
||||
private RunnerAndConfigurationSettings myConfiguration;
|
||||
protected boolean isClone;
|
||||
private SmartPsiElementPointer<PsiElement> myPointer;
|
||||
|
||||
public RuntimeConfigurationProducer(final ConfigurationType configurationType) {
|
||||
this(configurationType.getConfigurationFactories()[0]);
|
||||
@@ -53,13 +56,11 @@ public abstract class RuntimeConfigurationProducer implements Comparable, Clonea
|
||||
// replace with existing configuration if any
|
||||
final RunManager runManager = RunManager.getInstance(context.getProject());
|
||||
final ConfigurationType type = result.myConfiguration.getType();
|
||||
RunnerAndConfigurationSettings configuration = null;
|
||||
if (type != null) {
|
||||
configuration = result.findExistingByElement(_location, runManager.getConfigurationSettingsList(type), context);
|
||||
}
|
||||
RunnerAndConfigurationSettings configuration = result.findExistingByElement(_location, runManager.getConfigurationSettingsList(type), context);
|
||||
if (configuration != null) {
|
||||
result.myConfiguration = configuration;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
runManager.setUniqueNameIfNeed(result.myConfiguration);
|
||||
}
|
||||
}
|
||||
@@ -78,6 +79,15 @@ public abstract class RuntimeConfigurationProducer implements Comparable, Clonea
|
||||
|
||||
public abstract PsiElement getSourceElement();
|
||||
|
||||
protected void storeSourceElement(@NotNull PsiElement e) {
|
||||
myPointer = SmartPointerManager.createPointer(e);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected PsiElement restoreSourceElement() {
|
||||
return myPointer == null ? null : myPointer.getElement();
|
||||
}
|
||||
|
||||
public RunnerAndConfigurationSettings getConfiguration() {
|
||||
assert isClone;
|
||||
return myConfiguration;
|
||||
|
||||
+3
-5
@@ -44,15 +44,13 @@ import java.util.List;
|
||||
* @author ilyas
|
||||
*/
|
||||
public class GroovyScriptRunConfigurationProducer extends RuntimeConfigurationProducer implements Cloneable {
|
||||
private SmartPsiElementPointer<PsiElement> myPointer;
|
||||
|
||||
public GroovyScriptRunConfigurationProducer() {
|
||||
super(GroovyScriptRunConfigurationType.getInstance());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement getSourceElement() {
|
||||
return myPointer == null ? null : myPointer.getElement();
|
||||
return restoreSourceElement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -72,7 +70,7 @@ public class GroovyScriptRunConfigurationProducer extends RuntimeConfigurationPr
|
||||
if (aClass instanceof GroovyScriptClass || GroovyRunnerPsiUtil.isRunnable(aClass)) {
|
||||
final RunnerAndConfigurationSettings settings = createConfiguration(aClass);
|
||||
if (settings != null) {
|
||||
myPointer = SmartPointerManager.createPointer(element);
|
||||
storeSourceElement(element);
|
||||
final GroovyScriptRunConfiguration configuration = (GroovyScriptRunConfiguration)settings.getConfiguration();
|
||||
GroovyScriptUtil.getScriptType(groovyFile).tuneConfiguration(groovyFile, configuration, location);
|
||||
return settings;
|
||||
@@ -84,7 +82,7 @@ public class GroovyScriptRunConfigurationProducer extends RuntimeConfigurationPr
|
||||
ConfigurationFromContext settings = producer.createConfigurationFromContext(context);
|
||||
if (settings != null) {
|
||||
PsiElement src = settings.getSourceElement();
|
||||
myPointer = SmartPointerManager.createPointer(src);
|
||||
storeSourceElement(element);
|
||||
return createConfiguration(src instanceof PsiMethod ? ((PsiMethod)src).getContainingClass() : (PsiClass)src);
|
||||
}
|
||||
|
||||
|
||||
+2
-5
@@ -28,24 +28,21 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.maven.model.MavenExplicitProfiles;
|
||||
import org.jetbrains.idea.maven.project.MavenProjectsManager;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class MavenConfigurationProducer extends RuntimeConfigurationProducer {
|
||||
private PsiElement myPsiElement;
|
||||
|
||||
public MavenConfigurationProducer() {
|
||||
super(MavenRunConfigurationType.getInstance());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement getSourceElement() {
|
||||
return myPsiElement;
|
||||
return restoreSourceElement();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RunnerAndConfigurationSettings createConfigurationByElement(Location location, ConfigurationContext context) {
|
||||
myPsiElement = location.getPsiElement();
|
||||
storeSourceElement(location.getPsiElement());
|
||||
final MavenRunnerParameters params = createBuildParameters(location);
|
||||
if (params == null) return null;
|
||||
|
||||
|
||||
+5
-7
@@ -33,26 +33,24 @@ import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
public class XsltConfigurationProducer extends RuntimeConfigurationProducer{
|
||||
private XmlFile myFile;
|
||||
|
||||
public XsltConfigurationProducer() {
|
||||
super(XsltRunConfigType.getInstance());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement getSourceElement() {
|
||||
return myFile;
|
||||
return restoreSourceElement();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RunnerAndConfigurationSettings createConfigurationByElement(Location location, ConfigurationContext context) {
|
||||
final XmlFile file = PsiTreeUtil.getParentOfType(location.getPsiElement(), XmlFile.class, false);
|
||||
if (file != null && file.isPhysical() && XsltSupport.isXsltFile(file)) {
|
||||
myFile = file;
|
||||
final Project project = myFile.getProject();
|
||||
storeSourceElement(file);
|
||||
final Project project = file.getProject();
|
||||
final RunnerAndConfigurationSettings settings =
|
||||
RunManager.getInstance(project).createRunConfiguration(myFile.getName(), getConfigurationFactory());
|
||||
((XsltRunConfiguration)settings.getConfiguration()).initFromFile(myFile);
|
||||
RunManager.getInstance(project).createRunConfiguration(file.getName(), getConfigurationFactory());
|
||||
((XsltRunConfiguration)settings.getConfiguration()).initFromFile(file);
|
||||
return settings;
|
||||
}
|
||||
return null;
|
||||
|
||||
+4
-6
@@ -39,14 +39,12 @@ import java.util.List;
|
||||
* User : catherine
|
||||
*/
|
||||
public class DocutilsConfigurationProducer extends RuntimeConfigurationProducer implements Cloneable {
|
||||
private PsiFile mySourceFile = null;
|
||||
|
||||
public DocutilsConfigurationProducer() {
|
||||
super(RestRunConfigurationType.getInstance().DOCUTILS_FACTORY);
|
||||
}
|
||||
|
||||
public PsiElement getSourceElement() {
|
||||
return mySourceFile;
|
||||
return restoreSourceElement();
|
||||
}
|
||||
|
||||
protected RunnerAndConfigurationSettings createConfigurationByElement(final Location location, final ConfigurationContext context) {
|
||||
@@ -55,12 +53,12 @@ public class DocutilsConfigurationProducer extends RuntimeConfigurationProducer
|
||||
return null;
|
||||
}
|
||||
Module module = ModuleUtil.findModuleForPsiElement(script);
|
||||
mySourceFile = script;
|
||||
storeSourceElement(script);
|
||||
|
||||
final Project project = mySourceFile.getProject();
|
||||
final Project project = script.getProject();
|
||||
RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(project, context);
|
||||
DocutilsRunConfiguration configuration = (DocutilsRunConfiguration) settings.getConfiguration();
|
||||
final VirtualFile vFile = mySourceFile.getVirtualFile();
|
||||
final VirtualFile vFile = script.getVirtualFile();
|
||||
if (vFile == null) return null;
|
||||
configuration.setInputFile(vFile.getPath());
|
||||
configuration.setName(script.getName());
|
||||
|
||||
+6
-7
@@ -39,24 +39,23 @@ import java.util.List;
|
||||
* User : catherine
|
||||
*/
|
||||
public class SphinxConfigurationProducer extends RuntimeConfigurationProducer implements Cloneable {
|
||||
private PsiDirectory mySourceFile = null;
|
||||
|
||||
public SphinxConfigurationProducer() {
|
||||
super(RestRunConfigurationType.getInstance().SPHINX_FACTORY);
|
||||
}
|
||||
|
||||
public PsiElement getSourceElement() {
|
||||
return mySourceFile;
|
||||
return restoreSourceElement();
|
||||
}
|
||||
|
||||
protected RunnerAndConfigurationSettings createConfigurationByElement(final Location location, final ConfigurationContext context) {
|
||||
PsiElement element = location.getPsiElement();
|
||||
if (!(element instanceof PsiDirectory)) return null;
|
||||
|
||||
mySourceFile = (PsiDirectory)element;
|
||||
storeSourceElement(element);
|
||||
PsiDirectory directory = (PsiDirectory)element;
|
||||
boolean hasRstFile = false;
|
||||
boolean hasConf = false;
|
||||
for (PsiFile file : mySourceFile.getFiles()) {
|
||||
for (PsiFile file : directory.getFiles()) {
|
||||
if ("conf.py".equals(file.getName()))
|
||||
hasConf = true;
|
||||
if (file instanceof RestFile) {
|
||||
@@ -64,10 +63,10 @@ public class SphinxConfigurationProducer extends RuntimeConfigurationProducer im
|
||||
}
|
||||
}
|
||||
if (!hasRstFile || !hasConf) return null;
|
||||
final Project project = mySourceFile.getProject();
|
||||
final Project project = directory.getProject();
|
||||
RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(project, context);
|
||||
SphinxRunConfiguration configuration = (SphinxRunConfiguration) settings.getConfiguration();
|
||||
final VirtualFile vFile = mySourceFile.getVirtualFile();
|
||||
final VirtualFile vFile = directory.getVirtualFile();
|
||||
configuration.setInputFile(vFile.getPath());
|
||||
|
||||
configuration.setName(((PsiDirectory)element).getName());
|
||||
|
||||
Reference in New Issue
Block a user