1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-25 18:05:33 +02:00

[cleanup] added some observability to track filter pool reference lifecycle

This commit is contained in:
David Dykstal 2006-09-20 02:05:52 +00:00
parent c932705105
commit 70809f5f59
4 changed files with 61 additions and 18 deletions

View file

@ -26,14 +26,16 @@ import org.eclipse.rse.core.references.IRSEBasePersistableReferencedObject;
* specific object, in memory.
*/
public class SystemPersistableReferencedObjectHelper extends SystemReferencedObjectHelper implements IRSEBasePersistableReferencedObject {
private String referenceName;
/**
* Constructor for SystemPersistableReferencedObjectHelper
* @param parent the SystemPersistableReferencedObject that uses this helper.
* @param referenceName The unique name that can be stored to identify this object.
*/
protected SystemPersistableReferencedObjectHelper(String referenceName) {
super();
protected SystemPersistableReferencedObjectHelper(IRSEBasePersistableReferencedObject parent, String referenceName) {
super(parent);
setReferenceName(referenceName);
}

View file

@ -29,19 +29,18 @@ import org.eclipse.rse.core.references.IRSEReferencedObject;
* <p>
* These references are not persistent. Persistent references are managed
* by the subclass SystemPersistableReferencedObject.
*/
/**
* @lastgen class SystemReferencedObjectImpl Impl implements SystemReferencedObject, EObject {}
* <p>
* SystemFilter is a known concrete subclass.
*/
public abstract class SystemReferencedObject extends RSEModelObject implements IRSEReferencedObject {
protected SystemReferencedObjectHelper helper = null;
/**
* Default constructor. Typically called by EMF factory method.
*/
protected SystemReferencedObject() {
super();
helper = new SystemReferencedObjectHelper();
helper = new SystemReferencedObjectHelper(this);
}
// ----------------------------------

View file

@ -16,10 +16,16 @@
package org.eclipse.rse.internal.references;
import java.text.MessageFormat;
import java.util.Vector;
import org.eclipse.rse.core.filters.ISystemFilterPool;
import org.eclipse.rse.core.filters.ISystemFilterPoolReference;
import org.eclipse.rse.core.filters.ISystemFilterPoolReferenceManagerProvider;
import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.references.IRSEBaseReferencedObject;
import org.eclipse.rse.core.references.IRSEBaseReferencingObject;
import org.eclipse.rse.core.subsystems.ISubSystem;
/**
* This is a class that implements all the methods in the IRSEReferencedObject.
@ -28,31 +34,63 @@ import org.eclipse.rse.core.references.IRSEBaseReferencingObject;
* always possible, it is not abstract and hence can be leveraged via containment.
*/
public class SystemReferencedObjectHelper implements IRSEBaseReferencedObject {
private Vector referencingObjects = new Vector();
private IRSEBaseReferencedObject parent = null;
/**
* Constructor for SystemReferencedObjectHelper
* @param parent the SystemReferencedObject creating this helper
*/
public SystemReferencedObjectHelper() {
super();
public SystemReferencedObjectHelper(IRSEBaseReferencedObject parent) {
this.parent = parent;
}
/**
* @see IRSEBaseReferencedObject#addReference(IRSEBaseReferencingObject)
*/
public int addReference(IRSEBaseReferencingObject ref) {
// String fromName = getReferencingName(ref);
// String toName = getReferencedName();
// System.out.println(MessageFormat.format("Adding reference from {0} to {1}", new Object[] {fromName, toName}));
referencingObjects.addElement(ref);
return referencingObjects.size();
}
private String getReferencedName() {
String toName = "unknown";
if (parent instanceof ISystemFilterPool) {
ISystemFilterPool fp = (ISystemFilterPool) parent;
toName = fp.getName();
}
return toName;
}
private String getReferencingName(IRSEBaseReferencingObject object) {
String fromName = "unknown";
if (object instanceof ISystemFilterPoolReference) {
ISystemFilterPoolReference fpr = (ISystemFilterPoolReference) object;
ISystemFilterPoolReferenceManagerProvider provider = fpr.getProvider();
String prefix = "unknown|unknown|unknown";
if (provider instanceof ISubSystem) {
ISubSystem subsystem = (ISubSystem) provider;
IHost host = subsystem.getHost();
prefix = host.getAliasName() + "|" + subsystem.getName();
fromName = prefix + fpr.getName();
}
}
return fromName;
}
/**
* @see IRSEBaseReferencedObject#removeReference(IRSEBaseReferencingObject)
*/
public int removeReference(IRSEBaseReferencingObject ref) {
int before = referencingObjects.size();
referencingObjects.removeElement(ref);
int after = referencingObjects.size();
assertThis((after == (before - 1)), "removeReference failed for " + ref); //$NON-NLS-1$
// String fromName = getReferencingName(ref);
// String toName = getReferencedName();
// System.out.println(MessageFormat.format("Removing reference from {0} to {1}", new Object[] {fromName, toName}));
boolean found = referencingObjects.removeElement(ref);
assertThis(!found, "removeReference failed for " + ref); //$NON-NLS-1$
return referencingObjects.size();
}
@ -67,7 +105,12 @@ public class SystemReferencedObjectHelper implements IRSEBaseReferencedObject {
* Clear the list of referenced objects.
*/
public void removeAllReferences() {
referencingObjects.removeAllElements();
IRSEBaseReferencingObject[] references = getReferencingObjects();
for (int i = 0; i < references.length; i++) {
IRSEBaseReferencingObject reference = references[i];
removeReference(reference);
}
// referencingObjects.removeAllElements();
}
/**
@ -75,8 +118,7 @@ public class SystemReferencedObjectHelper implements IRSEBaseReferencedObject {
*/
public IRSEBaseReferencingObject[] getReferencingObjects() {
IRSEBaseReferencingObject[] references = new IRSEBaseReferencingObject[referencingObjects.size()];
for (int idx = 0; idx < referencingObjects.size(); idx++)
references[idx] = (IRSEBaseReferencingObject) referencingObjects.elementAt(idx);
referencingObjects.toArray(references);
return references;
}
@ -87,7 +129,7 @@ public class SystemReferencedObjectHelper implements IRSEBaseReferencedObject {
* @param msg the message printed on System.out
*/
protected void assertThis(boolean assertion, String msg) {
if (!assertion) System.out.println("ASSERTION FAILED IN SystemReferencedObject: " + msg); //$NON-NLS-1$
// if (!assertion) System.out.println("ASSERTION FAILED IN SystemReferencedObject: " + msg); //$NON-NLS-1$
}
}

View file

@ -92,7 +92,7 @@ public class SystemFilterString extends RSEModelObject implements ISystemFilterS
protected SystemFilterString()
{
super();
helper = new SystemReferencedObjectHelper();
helper = new SystemReferencedObjectHelper(this);
}
/**
* This is the method required by the IAdaptable interface.