You are viewing a plain text version of this content. The canonical link for it is here.
Posted to kato-commits@incubator.apache.org by mo...@apache.org on 2009/10/20 16:56:01 UTC

svn commit: r827732 - in /incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti: javaruntime/ javaruntime/model/ process/ reader/

Author: monteith
Date: Tue Oct 20 16:56:00 2009
New Revision: 827732

URL: http://svn.apache.org/viewvc?rev=827732&view=rev
Log:
Fixed code to throw DataUnavailable where appropriate, put generics in place, wrap some public fields.

Modified:
    incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/JavaRuntimeImpl.java
    incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JClassLoader.java
    incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JLocation.java
    incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JMethod.java
    incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JMonitor.java
    incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JObject.java
    incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JStackFrame.java
    incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JThread.java
    incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/Model.java
    incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/process/ImageImpl.java
    incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/reader/CJVMTIBinReader.java

Modified: incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/JavaRuntimeImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/JavaRuntimeImpl.java?rev=827732&r1=827731&r2=827732&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/JavaRuntimeImpl.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/JavaRuntimeImpl.java Tue Oct 20 16:56:00 2009
@@ -24,30 +24,40 @@
 import javax.tools.diagnostics.image.DataUnavailable;
 import javax.tools.diagnostics.image.ImagePointer;
 import javax.tools.diagnostics.image.MemoryAccessException;
+import javax.tools.diagnostics.runtime.java.JavaClassLoader;
 import javax.tools.diagnostics.runtime.java.JavaHeap;
+import javax.tools.diagnostics.runtime.java.JavaMethod;
+import javax.tools.diagnostics.runtime.java.JavaMonitor;
 import javax.tools.diagnostics.runtime.java.JavaObject;
+import javax.tools.diagnostics.runtime.java.JavaReference;
 import javax.tools.diagnostics.runtime.java.JavaRuntime;
 import javax.tools.diagnostics.runtime.java.JavaThread;
 import javax.tools.diagnostics.runtime.java.JavaVMInitArgs;
 
+import org.apache.kato.jvmti.javaruntime.model.EmptyList;
 import org.apache.kato.jvmti.javaruntime.model.Model;
 import org.apache.kato.jvmti.reader.CLogger;
 
 public class JavaRuntimeImpl implements JavaRuntime {
+	private static final String VERSION = "0.1.0";
+	private static final String FULL_VERSION = "CJVMTI v0.1";
+	
 	private Model model=null;
+	private File source;
 	
-	public JavaRuntimeImpl(Model model) throws IOException {
+	public JavaRuntimeImpl(Model model, File source) throws IOException {
 		this.model=model;
+		this.source = source;
 	}
 	
 	@Override
-	public List getCompiledMethods() {
-		return new LinkedList();
+	public List<JavaMethod> getCompiledMethods() {
+		return new EmptyList<JavaMethod>();
 	}
 
 	@Override
-	public List getHeapRoots() {
-		return new LinkedList();
+	public List<JavaReference> getHeapRoots() {
+		return new EmptyList<JavaReference>();
 	}
 
 	private List<JavaHeap> heap = null;
@@ -61,14 +71,12 @@
 	}
 
 	@Override
-	public List getJavaClassLoaders() {
-		
+	public List<JavaClassLoader> getJavaClassLoaders() {		
 		return model.getJavaClassLoader();
 	}
 
 	@Override
 	public ImagePointer getJavaVM() throws CorruptDataException {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
@@ -79,8 +87,7 @@
 	}
 
 	@Override
-	public List getMonitors() {
-		
+	public List<JavaMonitor> getMonitors() {		
 		return model.getJavaMonitors();
 	}
 
@@ -113,19 +120,17 @@
 
 	@Override
 	public String getFullVersion() throws CorruptDataException {
-
-		return "CJVMTI v0.1";
+		return FULL_VERSION;
 	}
 
 	@Override
 	public String getVersion() throws CorruptDataException {
-		return "0.1.0";
+		return VERSION;
 	}
 
 	@Override
 	public File getSource() {
-		// TODO Auto-generated method stub
-		return null;
+		return this.source;
 	}
 
 }

Modified: incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JClassLoader.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JClassLoader.java?rev=827732&r1=827731&r2=827732&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JClassLoader.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JClassLoader.java Tue Oct 20 16:56:00 2009
@@ -42,12 +42,12 @@
 	}
 
 	@Override
-	public List getCachedClasses() {
-		return classes;
+	public List<JavaClass> getCachedClasses() {
+		return new EmptyList<JavaClass>();
 	}
 
 	@Override
-	public List getDefinedClasses() {
+	public List<JavaClass> getDefinedClasses() {
 		if(classes==null) classes=new LinkedList<JavaClass>();
 		return classes;
 	}

Modified: incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JLocation.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JLocation.java?rev=827732&r1=827731&r2=827732&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JLocation.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JLocation.java Tue Oct 20 16:56:00 2009
@@ -21,8 +21,6 @@
 import javax.tools.diagnostics.runtime.java.JavaMethod;
 
 public class JLocation implements JavaLocation {
-
-	
 	public JMethod method=null;
 	public String filename=null;
 	public int linenumber=0;
@@ -30,9 +28,9 @@
 	public JLocation() {
 		
 	}
+	
 	@Override
 	public ImagePointer getAddress() throws CorruptDataException {
-		// TODO Auto-generated method stub
 		return p;
 	}
 	
@@ -42,7 +40,6 @@
 
 	@Override
 	public int getCompilationLevel() throws CorruptDataException {
-		// TODO Auto-generated method stub
 		return 0;
 	}
 

Modified: incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JMethod.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JMethod.java?rev=827732&r1=827731&r2=827732&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JMethod.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JMethod.java Tue Oct 20 16:56:00 2009
@@ -24,6 +24,7 @@
 
 import javax.tools.diagnostics.image.CorruptDataException;
 import javax.tools.diagnostics.image.DataUnavailable;
+import javax.tools.diagnostics.image.ImageSection;
 import javax.tools.diagnostics.runtime.java.JavaClass;
 import javax.tools.diagnostics.runtime.java.JavaMethod;
 
@@ -31,10 +32,7 @@
 
 public class JMethod implements JavaMethod {
 
-	
-	public String genericsignature;
-	public int nativemethod;
-	public int argumentsize;
+	private int argumentsize;
 	public int maxlocals;
 	public String name=null;
 	public String signature=null;
@@ -45,9 +43,10 @@
 	public JMethod() {
 	}
 	
-	public void setParent(JClass class1) {
-		parent=class1;	
+	public void setParent(JClass clazz) {
+		parent=clazz;	
 	}
+	
 
 	public void addLocalVariableTableEntry(JLocalVariableTableEntry entry) {
 		if(localVars==null) {
@@ -82,26 +81,23 @@
 	
 
 	@Override
-	public List getBytecodeSections() {
-	
-		return new LinkedList();
+	public List<ImageSection> getBytecodeSections() {
+		return new EmptyList<ImageSection>();
 	}
 
 	@Override
-	public List getCompiledSections() {
-		return new LinkedList();
+	public List<ImageSection> getCompiledSections() {
+		return new EmptyList<ImageSection>();
 	}
 
 	@Override
 	public JavaClass getDeclaringClass() throws CorruptDataException,
-			DataUnavailable {
-		
+			DataUnavailable {		
 		return parent;
 	}
 
 	@Override
-	public int getModifiers() throws CorruptDataException {
-		
+	public int getModifiers() throws CorruptDataException {	
 		return mods;
 	}
 
@@ -145,5 +141,25 @@
 		}
 		return null;
 	}
+
+	/** 
+	 * Store generic signature for this method.
+	 * Currently unimplemented as API doesn't require it.
+	 *  
+	 * @param signature
+	 */
+	public void setGenericsignature(String signature) {
+		// Unimplemented
+	}
+
+	/**
+	 * Returns the generic signature of this method.
+	 * Currently not implemented.
+	 * 
+	 * @return null
+	 */
+	public String getGenericsignature() {
+		return null;
+	}
 	
 }
\ No newline at end of file

Modified: incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JMonitor.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JMonitor.java?rev=827732&r1=827731&r2=827732&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JMonitor.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JMonitor.java Tue Oct 20 16:56:00 2009
@@ -24,18 +24,19 @@
 import javax.tools.diagnostics.runtime.java.JavaThread;
 
 public class JMonitor implements JavaMonitor {
-	public static Model model;
+	private Model model;
 	private long owner=0;
-	public long monitorObject=0;
-	public long id=0;
-	List<Long> waiters=new LinkedList<Long>();
+	private long monitorObject=0;
+	private long id=0;
+	private List<Long> waiters=new LinkedList<Long>();
 	
-	public JMonitor(long monitorid) {
-		this.id=monitorid;
+	public JMonitor(long monitorid, Model model) {
+		this.id = monitorid;
+		this.model = model;
 	}
 
 	@Override
-	public List getEnterWaiters() {
+	public List<JavaThread> getEnterWaiters() {
 		List<JavaThread> waitingThreads= new LinkedList<JavaThread>();
 		for (Long l: waiters){
 			waitingThreads.add(model.getThread(l));
@@ -45,7 +46,6 @@
 
 	public void addWaiter(Long t) {
 		waiters.add(t);
-		
 	}
 
 	@Override
@@ -56,12 +56,11 @@
 
 	@Override
 	public String getName() throws CorruptDataException {
-		// TODO Auto-generated method stub
-		return "Monitor "+id;
+		return "Monitor 0x"+Long.toHexString(getId());
 	}
 
 	@Override
-	public List getNotifyWaiters() {
+	public List<JavaThread> getNotifyWaiters() {
 		List<JavaThread> waitingThreads= new LinkedList<JavaThread>();
 		for (Long l: waiters){
 			waitingThreads.add(model.getThread(l));
@@ -71,7 +70,7 @@
 
 	@Override
 	public JavaObject getObject() {
-		return model.getObjectAtAddress(monitorObject);
+		return model.getObjectAtAddress(getMonitorObject());
 	}
 
 	@Override
@@ -87,5 +86,13 @@
 		this.owner=thread;
 		
 	}
+
+	public long getId() {
+		return id;
+	}
+
+	public long getMonitorObject() {
+		return monitorObject;
+	}
 	
 }
\ No newline at end of file

Modified: incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JObject.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JObject.java?rev=827732&r1=827731&r2=827732&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JObject.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JObject.java Tue Oct 20 16:56:00 2009
@@ -15,7 +15,6 @@
 package org.apache.kato.jvmti.javaruntime.model;
 
 import java.util.HashMap;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.logging.Level;
@@ -23,18 +22,18 @@
 import javax.tools.diagnostics.image.CorruptDataException;
 import javax.tools.diagnostics.image.DataUnavailable;
 import javax.tools.diagnostics.image.ImagePointer;
+import javax.tools.diagnostics.image.ImageSection;
 import javax.tools.diagnostics.image.MemoryAccessException;
 import javax.tools.diagnostics.runtime.java.JavaClass;
 import javax.tools.diagnostics.runtime.java.JavaHeap;
 import javax.tools.diagnostics.runtime.java.JavaObject;
+import javax.tools.diagnostics.runtime.java.JavaReference;
 
 import org.apache.kato.jvmti.reader.CLogger;
 
 /**
  * Represents a Java object.
  * 
- * 
- *
  */
 public class JObject implements JavaObject {
 
@@ -43,9 +42,11 @@
 	private Map<Long, Object> data = new HashMap<Long, Object>();
 	private JClass clazz = null;
 	private boolean visited = false;
-	public boolean isArray = false;
+	
+	public boolean isArray = false;	
 	public Object[] objArray;
 	public int objectSize = 0;
+	
 	private JObject superClazzObject = null;
 	private Model model;
 	
@@ -279,8 +280,7 @@
 
 	@Override
 	public long getHashcode() throws DataUnavailable, CorruptDataException {
-		// TODO Auto-generated method stub
-		return 0;
+		throw new DataUnavailable("Hashcode not available.");
 	}
 
 	@Override
@@ -303,24 +303,21 @@
 	@Override
 	public long getPersistentHashcode() throws DataUnavailable,
 			CorruptDataException {
-		// TODO Auto-generated method stub
-		return 0;
+		throw new DataUnavailable("Persistent Hashcode not available in CJVMTI.");
 	}
 
 	@Override
-	public List getReferences() {
-		return new LinkedList();
+	public List<JavaReference> getReferences() {
+		return new EmptyList<JavaReference>();
 	}
 
 	@Override
-	public List getSections() {
-
-		return new LinkedList();
+	public List<ImageSection> getSections() {
+		return new EmptyList<ImageSection>();
 	}
 
 	@Override
 	public long getSize() throws CorruptDataException {
-
 		return size;
 	}
 

Modified: incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JStackFrame.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JStackFrame.java?rev=827732&r1=827731&r2=827732&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JStackFrame.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JStackFrame.java Tue Oct 20 16:56:00 2009
@@ -14,7 +14,6 @@
 
 package org.apache.kato.jvmti.javaruntime.model;
 
-import java.util.LinkedList;
 import java.util.List;
 import java.util.logging.Level;
 
@@ -22,6 +21,7 @@
 import javax.tools.diagnostics.image.DataUnavailable;
 import javax.tools.diagnostics.image.ImagePointer;
 import javax.tools.diagnostics.runtime.java.JavaLocation;
+import javax.tools.diagnostics.runtime.java.JavaReference;
 import javax.tools.diagnostics.runtime.java.JavaStackFrame;
 import javax.tools.diagnostics.runtime.java.JavaVariable;
 
@@ -48,8 +48,8 @@
 		this.location=loc;
 	}
 	@Override
-	public List getHeapRoots() {
-		return new LinkedList();
+	public List<JavaReference> getHeapRoots() {
+		return new EmptyList<JavaReference>();
 	}
 
 	@Override
@@ -94,4 +94,4 @@
 		addVariable(var);
 		
 	}
-}
\ No newline at end of file
+}

Modified: incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JThread.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JThread.java?rev=827732&r1=827731&r2=827732&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JThread.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/JThread.java Tue Oct 20 16:56:00 2009
@@ -21,6 +21,7 @@
 import javax.tools.diagnostics.image.CorruptDataException;
 import javax.tools.diagnostics.image.DataUnavailable;
 import javax.tools.diagnostics.image.ImagePointer;
+import javax.tools.diagnostics.image.ImageSection;
 import javax.tools.diagnostics.image.ImageThread;
 import javax.tools.diagnostics.image.MemoryAccessException;
 import javax.tools.diagnostics.runtime.java.JavaClass;
@@ -49,17 +50,15 @@
 
 	@Override
 	public ImageThread getImageThread() throws CorruptDataException,
-			DataUnavailable {
-		
+			DataUnavailable {		
 			throw new DataUnavailable();
 	}
 	
 
 	public void addStackFrame(JStackFrame frame) {
 		frames.add(frame);
-		
-		
 	}
+	
 	@Override
 	public ImagePointer getJNIEnv() throws CorruptDataException {
 		
@@ -147,24 +146,25 @@
 		
 		
 	}
+	
 	@Override
 	public int getPriority() throws CorruptDataException {
-		
 		return priority;
 	}
+	
 	@Override
-	public List getStackFrames() {
+	public List<JavaStackFrame> getStackFrames() {
 		CLogger.logr.log(Level.FINEST,"Asked for stack frames");
 		return frames;
 	}
+	
 	@Override
-	public List getStackSections() {
-		// TODO Auto-generated method stub
-		return null;
+	public List<ImageSection> getStackSections() {
+		return new EmptyList<ImageSection>();
 	}
+	
 	@Override
-	public int getState() throws CorruptDataException {
-		
-		return 0;
+	public int getState() throws CorruptDataException {		
+		return STATE_ALIVE | STATE_RUNNABLE;
 	}
 }
\ No newline at end of file

Modified: incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/Model.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/Model.java?rev=827732&r1=827731&r2=827732&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/Model.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/javaruntime/model/Model.java Tue Oct 20 16:56:00 2009
@@ -98,20 +98,20 @@
 	
 	public JMonitor getMonitor(long monitorid) {
 		if(monitorid==0) return null;
-		JMonitor m=(JMonitor) monitorsMap.get(monitorid);
-		if(m==null) {
-			m=new JMonitor(monitorid);
-			monitorsMap.put(monitorid,m);
+		JMonitor monitor=(JMonitor) monitorsMap.get(monitorid);
+		if(monitor==null) {
+			monitor=new JMonitor(monitorid, this);
+			monitorsMap.put(monitorid,monitor);
 		}
-		return m;
+		return monitor;
 	}
 	public List<JavaThread> getThreads() {
 		return threadMap.values();
 	}
-	public List getJavaClassLoader() {
+	public List<JavaClassLoader> getJavaClassLoader() {
 		return loadersMap.values();
 	}
-	public List getJavaMonitors() {
+	public List<JavaMonitor> getJavaMonitors() {
 		return monitorsMap.values();
 	}
 	

Modified: incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/process/ImageImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/process/ImageImpl.java?rev=827732&r1=827731&r2=827732&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/process/ImageImpl.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/process/ImageImpl.java Tue Oct 20 16:56:00 2009
@@ -16,6 +16,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.net.InetAddress;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
@@ -28,153 +29,137 @@
 import javax.tools.diagnostics.image.ImageModule;
 import javax.tools.diagnostics.image.ImagePointer;
 import javax.tools.diagnostics.image.ImageProcess;
+import javax.tools.diagnostics.image.ImageSection;
 import javax.tools.diagnostics.image.ImageThread;
 import javax.tools.diagnostics.runtime.ManagedRuntime;
 
 import org.apache.kato.jvmti.javaruntime.JavaRuntimeImpl;
+import org.apache.kato.jvmti.javaruntime.model.EmptyList;
 import org.apache.kato.jvmti.javaruntime.model.SimpleImagePointer;
-import org.apache.kato.jvmti.process.ImageImpl.ImageAddressSpaceImpl.ImageProcessImpl;
 import org.apache.kato.jvmti.reader.CJVMTIBinReader;
 
-public class ImageImpl implements Image {
+/**
+ * Implements the main Image hierarchy.
+ * There is only one instance of Image, ImageAddressSpace and ImageProcess
+ * in each dump, and data may be shared between all.
+ *
+ */
+public class ImageImpl implements Image, ImageAddressSpace, ImageProcess {
+
+	private List<ManagedRuntime> runtimes = new LinkedList<ManagedRuntime>();
+	private List<ImageAddressSpace> spaces = new LinkedList<ImageAddressSpace>();
+	private List<ImageProcess> processes = new LinkedList<ImageProcess>();
+	private File file = null;
 
-	public final class ImageAddressSpaceImpl implements ImageAddressSpace {
-		public final class ImageProcessImpl implements ImageProcess {
-			private List<ManagedRuntime> runtimes = null;
-
-			@Override
-			public String getCommandLine() throws DataUnavailable,
-					CorruptDataException {
-				return "<none>";
-			}
-
-			@Override
-			public ImageThread getCurrentThread() throws CorruptDataException {
-				// TODO Auto-generated method stub
-				return null;
-			}
-
-			@Override
-			public Properties getEnvironment() throws DataUnavailable,
-					CorruptDataException {
-
-				return new Properties();
-			}
-
-			@Override
-			public ImageModule getExecutable() throws DataUnavailable,
-					CorruptDataException {
-				throw new DataUnavailable("no env");
-			}
-
-			@Override
-			public String getID() throws DataUnavailable, CorruptDataException {
-				throw new DataUnavailable("no env");
-			}
-
-			@Override
-			public List getLibraries() throws DataUnavailable,
-					CorruptDataException {
-				throw new DataUnavailable("no env");
-			}
-
-			@Override
-			public int getPointerSize() {
-				// TODO Auto-generated method stub
-				return 0;
-			}
-
-			@Override
-			public List getRuntimes() {
-				if (runtimes == null) {
-					runtimes = new LinkedList<ManagedRuntime>();
-					// BinReader br=new BinReader(file);
-					try {
-						CJVMTIBinReader br = null;
-						br = new CJVMTIBinReader(file);
-						runtimes.add(new JavaRuntimeImpl(br.getModel()));
-					} catch (IOException e) {
-						e.printStackTrace();
-					}
-
-				}
-				return runtimes;
-			}
-
-			@Override
-			public String getSignalName() throws DataUnavailable,
-					CorruptDataException {
-				throw new DataUnavailable("no env");
-			}
-
-			@Override
-			public int getSignalNumber() throws DataUnavailable,
-					CorruptDataException {
-				throw new DataUnavailable("no env");
-			}
-
-			@Override
-			public List getThreads() {
-				// TODO Auto-generated method stub
-				return null;
-			}
-		}
-
-		private List<ImageProcess> processes = null;
-
-		@Override
-		public ImageProcess getCurrentProcess() {
-			fill();
-			return processes.get(0);
-		}
-
-		private void fill() {
-			if (processes == null) {
-				processes = new LinkedList<ImageProcess>();
-				processes.add(new ImageProcessImpl());
-			}
-
-		}
-
-		@Override
-		public List getImageSections() {
-			// TODO Auto-generated method stub
-			return null;
-		}
-
-		@Override
-		public ImagePointer getPointer(long arg0) {
-			// TODO Auto-generated method stub
-			return new SimpleImagePointer(arg0);
-		}
-
-		@Override
-		public List getProcesses() {
-			fill();
-			return processes;
-		}
+	private CJVMTIBinReader br;
+	public ImageImpl(File base) throws IOException {
+		this.file = base;
+		br = new CJVMTIBinReader(file);
+		runtimes.add(new JavaRuntimeImpl(br.getModel(), file));
+		spaces.add(this);
+		processes.add(this);
+	}
+	
+	/* ImageProcess methods */
+	
+	@Override
+	public String getCommandLine() throws DataUnavailable,
+	CorruptDataException {
+		throw new DataUnavailable("Command line not present in CJVMTI dump.");
 	}
 
-	private List<ImageAddressSpace> spaces = null;
-	private File file = null;
+	@Override
+	public ImageThread getCurrentThread() throws CorruptDataException {
+		return null;
+	}
 
-	public ImageImpl(File base) {
-		this.file = base;
+	@Override
+	public Properties getEnvironment() throws DataUnavailable,
+	CorruptDataException {
+		throw new DataUnavailable("Environment variables are not present in CJVMTI dump.");
 	}
 
 	@Override
-	public List getAddressSpaces() {
-		if (spaces == null) {
-			spaces = new LinkedList<ImageAddressSpace>();
-			spaces.add(new ImageAddressSpaceImpl());
-		}
-		return spaces;
+	public ImageModule getExecutable() throws DataUnavailable,
+	CorruptDataException {
+		throw new DataUnavailable("no env");
+	}
+
+	@Override
+	public String getID() throws DataUnavailable, CorruptDataException {
+		throw new DataUnavailable("no env");
+	}
+
+	@Override
+	public List<ImageModule> getLibraries() throws DataUnavailable,
+	CorruptDataException {
+		throw new DataUnavailable("no env");
+	}
+
+	/**
+	 * Regardless of the bittedness of the JVM the agent was run on,
+	 * the dump itself is 64 bits.
+	 * 
+	 * @return 64 
+	 */
+	@Override
+	public int getPointerSize() {
+		return 64;
+	}
+
+	@Override
+	public List<ManagedRuntime> getRuntimes() {
+		return runtimes;
+	}
 
+	/* Image methods */
+	
+	
+	@Override
+	public String getSignalName() throws DataUnavailable,
+	CorruptDataException {
+		throw new DataUnavailable("no env");
+	}
+
+	@Override
+	public int getSignalNumber() throws DataUnavailable,
+	CorruptDataException {
+		throw new DataUnavailable("no env");
+	}
+
+	@Override
+	public List<ImageThread> getThreads() {
+		return new EmptyList<ImageThread>();
+	}
+
+	@Override
+	public ImageProcess getCurrentProcess() {
+		return this;
+	}
+
+	@Override
+	public List<ImageSection> getImageSections() {
+		return new EmptyList<ImageSection>();
+	}
+
+	@Override
+	public ImagePointer getPointer(long arg0) {
+		return new SimpleImagePointer(arg0);
+	}
+
+	@Override
+	public List<ImageProcess> getProcesses() {
+		return processes;
+	}
+
+	@Override
+	public List<ImageAddressSpace> getAddressSpaces() {
+		return spaces;
 	}
 
 	@Override
 	public long getCreationTime() throws DataUnavailable {
-		return 0;
+		return br.getCreationTime();
 	}
 
 	@Override
@@ -183,41 +168,41 @@
 	}
 
 	@Override
-	public Iterator getIPAddresses() throws DataUnavailable {
+	public Iterator<InetAddress> getIPAddresses() throws DataUnavailable {
 		throw new DataUnavailable();
 	}
 
 	@Override
 	public long getInstalledMemory() throws DataUnavailable {
-		return 0;
+		throw new DataUnavailable("Installed memory not available.");
 	}
 
 	@Override
 	public int getProcessorCount() throws DataUnavailable {
-		return 1;
+		throw new DataUnavailable("Processor count not available.");
 	}
 
 	@Override
 	public String getProcessorSubType() throws DataUnavailable,
-			CorruptDataException {
-		return "sub";
+	CorruptDataException {
+		throw new DataUnavailable("Processor subtype not available.");
 	}
 
 	@Override
 	public String getProcessorType() throws DataUnavailable,
-			CorruptDataException {
-		return "proc";
+	CorruptDataException {
+		throw new DataUnavailable("Processor type not available");
 	}
 
 	@Override
 	public String getSystemSubType() throws DataUnavailable,
-			CorruptDataException {
-		return "syssub";
+	CorruptDataException {
+		throw new DataUnavailable("System subtype not available");
 	}
 
 	@Override
 	public String getSystemType() throws DataUnavailable, CorruptDataException {
-		return "sys";
+		throw new DataUnavailable("System type not available.");
 	}
 
 	@Override

Modified: incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/reader/CJVMTIBinReader.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/reader/CJVMTIBinReader.java?rev=827732&r1=827731&r2=827732&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/reader/CJVMTIBinReader.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.cjvmti/src/main/java/org/apache/kato/jvmti/reader/CJVMTIBinReader.java Tue Oct 20 16:56:00 2009
@@ -229,12 +229,11 @@
 		log.log(Level.INFO, "CJVMTI Format V0.01");
 		log.log(Level.INFO, "Starting reading in..");
 
-		Long time = variablesIn.readLong();
+		time = variablesIn.readLong();
 
 		Date creationDate = new Date((time * 1000));
 		log.log(Level.INFO, "Date of creation: " + creationDate.toString());
 
-		JMonitor.model = model;
 		generateClassLoaderForReader();
 		generatePrimitiveArrayClasses();
 
@@ -329,9 +328,9 @@
 		jm.name = mName;
 		jm.signature = mSig;
 		if (mGenSig.equals(" ")) {
-			jm.genericsignature = null; // Not currently keeping it null, left as reminder
+			jm.setGenericsignature(null); // Not currently keeping it null, left as reminder
 		}
-		jm.genericsignature = mGenSig;
+		jm.setGenericsignature(mGenSig);
 		jm.mods = modifiers;
 
 		for (int i = 0; i < count; i++) {
@@ -569,6 +568,7 @@
 	}
 
 	private List<Long> unresolvedReferences = new LinkedList<Long>();
+	private Long time;
 	
 	/**
 	 * Reads an object at the current file position
@@ -1034,7 +1034,7 @@
 			nreadReference(objID); // Follow reference
 			variablesIn.seek(cPos); // Return to read point
 			JMonitor monitor = model.getMonitor(objID);
-			monitor.setObject(monitor.id);
+			monitor.setObject(monitor.getId());
 			monitor.setOwner(t.id);
 		}
 	}
@@ -1121,4 +1121,13 @@
 		return model;
 	}
 
+
+	/**
+	 * Returns the creation time, in millis, since the epoch.
+	 * 
+	 * @return long
+	 */
+	public long getCreationTime() {
+		return time;
+	}
 }