diff --git a/gsf.testrunner/src/org/netbeans/modules/gsf/testrunner/api/Report.java --- a/gsf.testrunner/src/org/netbeans/modules/gsf/testrunner/api/Report.java +++ b/gsf.testrunner/src/org/netbeans/modules/gsf/testrunner/api/Report.java @@ -45,10 +45,13 @@ package org.netbeans.modules.gsf.testrunner.api; import java.awt.EventQueue; +import java.lang.ref.WeakReference; +import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import org.netbeans.api.extexecution.print.LineConvertors.FileLocator; +import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; /** @@ -75,7 +78,8 @@ private int detectedPassedTests; private Collection tests; private FileLocator fileLocator; - private Project project; + private WeakReference project; + private final URI projectURI; private boolean aborted; private boolean skipped; @@ -85,7 +89,8 @@ */ public Report(String suiteClassName, Project project) { this.suiteClassName = suiteClassName; - this.project = project; + this.project = new WeakReference(project); + this.projectURI = project.getProjectDirectory().toURI(); this.fileLocator = project.getLookup().lookup(FileLocator.class); this.tests = new ArrayList(10); this.completed = true; @@ -98,7 +103,12 @@ } public Project getProject() { - return project; + Project prj = project.get(); + if(prj == null) { + prj = FileOwnerQuery.getOwner(projectURI); + project = new WeakReference(prj); + } + return prj; } /** @@ -324,7 +334,7 @@ * @param project the project to set */ public void setProject(Project project) { - this.project = project; + this.project = new WeakReference(project); } public boolean isAborted() { diff --git a/gsf.testrunner/src/org/netbeans/modules/gsf/testrunner/api/TestMethodNode.java --- a/gsf.testrunner/src/org/netbeans/modules/gsf/testrunner/api/TestMethodNode.java +++ b/gsf.testrunner/src/org/netbeans/modules/gsf/testrunner/api/TestMethodNode.java @@ -46,6 +46,7 @@ import java.awt.Image; import java.io.CharConversionException; +import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Map; import javax.swing.Action; @@ -72,7 +73,7 @@ /** */ protected final Testcase testcase; - protected final Project project; + protected final WeakReference project; /** * Creates a new instance of TestcaseNode @@ -87,7 +88,7 @@ : Children.LEAF, lookup); this.testcase = testcase; - this.project = project; + this.project = new WeakReference(project); setDisplayName(); diff --git a/gsf.testrunner/src/org/netbeans/modules/gsf/testrunner/api/TestSession.java --- a/gsf.testrunner/src/org/netbeans/modules/gsf/testrunner/api/TestSession.java +++ b/gsf.testrunner/src/org/netbeans/modules/gsf/testrunner/api/TestSession.java @@ -41,9 +41,12 @@ */ package org.netbeans.modules.gsf.testrunner.api; +import java.lang.ref.WeakReference; +import java.net.URI; import java.util.ArrayList; import java.util.List; import org.netbeans.api.extexecution.print.LineConvertors.FileLocator; +import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectUtils; import org.netbeans.modules.gsf.testrunner.DefaultTestRunnerNodeFactory; @@ -78,7 +81,8 @@ /** * The project where this session is invoked. */ - private final Project project; + private WeakReference project; + private final URI projectURI; /** * The suites that were executed. */ @@ -135,7 +139,8 @@ Parameters.notNull("project", project); Parameters.notNull("nodeFactory", nodeFactory); this.name = name; - this.project = project; + this.project = new WeakReference(project); + this.projectURI = project.getProjectDirectory().toURI(); this.fileLocator = project.getLookup().lookup(FileLocator.class); this.sessionType = sessionType; this.result = new SessionResult(); @@ -201,7 +206,12 @@ * @return the project where this session for invoked. */ public Project getProject() { - return project; + Project prj = project.get(); + if(prj == null) { + prj = FileOwnerQuery.getOwner(projectURI); + project = new WeakReference(prj); + } + return prj; } /** @@ -277,7 +287,12 @@ * @return */ public Report getReport(long timeInMillis) { - Report report = new Report(getCurrentSuite().getName(), project); + Project prj = project.get(); + if(prj == null) { + prj = FileOwnerQuery.getOwner(projectURI); + project = new WeakReference(prj); + } + Report report = new Report(getCurrentSuite().getName(), prj); report.setElapsedTimeMillis(timeInMillis); for (Testcase testcase : getCurrentSuite().getTestcases()) { report.reportTest(testcase); @@ -329,7 +344,12 @@ * @see #name */ public String getName() { - return name.length() != 0 ? name : ProjectUtils.getInformation(project).getDisplayName(); + Project prj = project.get(); + if(prj == null) { + prj = FileOwnerQuery.getOwner(projectURI); + project = new WeakReference(prj); + } + return name.length() != 0 ? name : ProjectUtils.getInformation(prj).getDisplayName(); } /**