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/11/23 15:54:15 UTC

svn commit: r883384 [44/47] - in /incubator/kato/trunk/org.apache.kato: ./ kato.anttasks/src/main/java/org/apache/kato/anttasks/ kato.anttasks/src/main/java/org/apache/kato/anttasks/sitebuilder/ kato.anttasks/src/main/java/org/apache/kato/anttasks/tck/...

Modified: incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoClassCommand.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoClassCommand.java?rev=883384&r1=883383&r2=883384&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoClassCommand.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoClassCommand.java Mon Nov 23 15:53:48 2009
@@ -1,407 +1,407 @@
-/*******************************************************************************
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
-package org.apache.kato.katoview.commands.infocommands;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Stack;
-import java.util.Iterator;
-
-import javax.tools.diagnostics.image.CorruptData;
-import javax.tools.diagnostics.image.CorruptDataException;
-import javax.tools.diagnostics.image.Image;
-import javax.tools.diagnostics.runtime.ManagedRuntime;
-import javax.tools.diagnostics.runtime.java.JavaClass;
-import javax.tools.diagnostics.runtime.java.JavaClassLoader;
-import javax.tools.diagnostics.runtime.java.JavaHeap;
-import javax.tools.diagnostics.runtime.java.JavaObject;
-import javax.tools.diagnostics.runtime.java.JavaRuntime;
-
-import org.apache.kato.katoview.Output;
-import org.apache.kato.katoview.commands.Command;
-import org.apache.kato.katoview.commands.helpers.ClassOutput;
-import org.apache.kato.katoview.commands.helpers.Exceptions;
-import org.apache.kato.katoview.commands.helpers.Utils;
-
-
-public class InfoClassCommand extends Command{
-	
-	public InfoClassCommand(Output o){
-		super(o, "class", "prints inheritance chain and other data for a given class", 
-				"parameters: none, class name\n\n" +
-				"if no parameters are passed to \"info class\", it prints the " +
-				"number of instances of each class and the total size of all " +
-				"instances of each class as well as the total number of instances " +
-				"of all classes and the total size of all objects.\n\n" +
-				"if a class name is passed to \"info class\", it prints the " +
-				"following information about that class:\n" +
-				"  - name\n" +
-				"  - ID\n" +
-				"  - superclass ID\n" +
-				"  - class loader ID\n" +
-				"  - modifiers\n" +
-				"  - number of instances and total size of instances\n" +
-				"  - inheritance chain\n" +
-				"  - fields with modifiers (and values for static fields)\n" +
-				"  - methods with modifiers\n"
-				);
-		child_commands = null;
-	}
-	
-	public void doCommand(Stack args, Image loadedImage, HashMap systemProperties){
-		if (args.isEmpty())
-		{
-			printImageClasses(loadedImage);
-			
-			return;
-		}
-
-		String className = (String)args.pop();
-		
-		if (!args.isEmpty())
-		{
-			out.error("\"info class\" takes at most one parameter, which, if " +
-					"specified, must be a class name");
-			return;
-		}
-		
-		printImageClass(loadedImage, className);
-	}
-	
-	private void printImageClass(Image loadedImage, String className)
-	{
-		ManagedRuntime mr;
-		Iterator itRuntime = Utils.getRuntimes(loadedImage);
-		int count = 1;
-
-		out.print("\n");
-		while (itRuntime.hasNext()) {
-			mr = (ManagedRuntime)itRuntime.next();
-			if (mr instanceof JavaRuntime)
-			{
-				out.print("Runtime #" + count + ": \n\n");
-				
-				printRuntimeClass((JavaRuntime)mr, className);
-			}
-			count++;
-		}
-	}
-	
-	private void printRuntimeClass(JavaRuntime jr, String className)
-	{
-		JavaClass jc = Utils.getClassGivenName(className, jr, out);
-		
-		// if we couldn't find a class of that name, return; the passed in class name could
-		//  still be an array type or it might not exist
-		if (null == jc)
-		{
-			out.print("\t  could not find class with name \"" + className + "\"\n\n");
-			return;
-		}
-
-		String spaces = "    ";
-		String cdeInfo = "N/A (CorruptDataException occurred)";
-		out.print("name = " + className);
-		out.print(spaces);
-		out.print("\n\n\t");
-		out.print("ID = 0x" + Long.toHexString(jc.getID().getAddress()));
-		
-		String superClassInfo;
-		try{
-			JavaClass superClass = jc.getSuperclass();
-			if (null == superClass) {
-				superClassInfo = "<no superclass>";
-			} else {
-				superClassInfo = "0x" + Long.toHexString(superClass.getID().getAddress());
-			}
-		}catch (CorruptDataException dce){
-			superClassInfo = cdeInfo;
-		}
-		out.print(spaces);
-		out.print("superID = " + superClassInfo);
-/*
- * Omitting size of class because that might differ between instances (ie. arrays)
- * 
-		sb.append(spaces);
-		sb.append("instance size = " + datum.getSize());
-*/
-		
-		String classLoaderInfo;
-		try{
-			JavaClassLoader jClassLoader = jc.getClassLoader();
-			classLoaderInfo = "0x" + Long.toHexString(jClassLoader.getObject().getJavaClass().getID().getAddress());
-		}catch (CorruptDataException cde){
-			classLoaderInfo = cdeInfo;
-		}
-		out.print(spaces);
-		out.print("\n\t");
-		out.print("classLoader = " + classLoaderInfo);
-		
-		String modifiersInfo;
-		try{
-			int modifiers = jc.getModifiers();
-			modifiersInfo = Utils.getModifierString(modifiers);
-		}catch (CorruptDataException cde){
-			modifiersInfo = cdeInfo;
-		}
-		out.print(spaces);
-		out.print("modifers: " + modifiersInfo);
-		out.print("\n\n");
-		
-		Map classMap = new HashMap();
-		classMap.put(jc, new Datum());
-		updateInstanceCount(jr, classMap);
-		Datum d = (Datum)classMap.get(jc);
-		
-		out.print("\tnumber of instances:     " + d.getCount() + "\n");
-		out.print("\ttotal size of instances: " + d.getSize() + " bytes");
-		
-		out.print("\n\n");
-		
-		printClassHierarchy(jc);
-		out.print("\n");
-		printFields(jc);
-		out.print("\n");
-		printMethods(jc);
-	}
-
-	private void printClassHierarchy(JavaClass jClass) {
-		Stack stack = new Stack();
-		while (null != jClass){
-			try{
-				stack.add(jClass.getName());
-				jClass = jClass.getSuperclass(); 
-			}catch(CorruptDataException cde){
-				stack.add("N/A (CorruptDataException occurred)");
-				break;
-			}
-		}
-		printStack(stack);
-	}
-	
-	private void printStack(Stack stack){
-		out.print("Inheritance chain....\n\n");
-		String tab = "\t";
-		String spaces = "";
-		while(stack.size() > 0){
-			out.print(tab + spaces + (String)stack.pop() + "\n");
-			spaces += "   ";
-		}
-	}
-	
-	private void printFields(JavaClass jClass) {
-		out.print("Fields......\n\n");
-		ClassOutput.printStaticFields(jClass, out);
-		ClassOutput.printNonStaticFields(jClass, out);
-	}
-	
-	private void printMethods(JavaClass jClass){
-		out.print("Methods......\n\n");
-		ClassOutput.printMethods(jClass.getDeclaredMethods().iterator(), out);
-		out.print("\n");
-	}
-	
-	
-	// below methods are for "info class" (with no parameters)
-	
-	private void printImageClasses(Image loadedImage) {
-		ManagedRuntime mr;
-		Iterator itRuntime = Utils.getRuntimes(loadedImage);
-		int count = 1;
-
-		out.print("\n");
-		while (itRuntime.hasNext()) {
-			mr = (ManagedRuntime)itRuntime.next();
-			if (mr instanceof JavaRuntime)
-			{
-				out.print("Runtime #" + count + ": \n\n");
-				
-				printRuntimeClasses((JavaRuntime)mr);
-				out.print("\n\n");
-			}
-			count++;
-		}
-	}
-	
-	private void printRuntimeClasses(JavaRuntime jr) {
-		Map javaClasses = new HashMap();
-		Iterator itClassLoader = jr.getJavaClassLoaders().iterator();
-		
-		// create Map of all classes in this JavaRuntime's class loaders
-		while (itClassLoader.hasNext()) {
-			JavaClassLoader jcl = (JavaClassLoader)itClassLoader.next();
-			
-			// Check for any corrupt data for this classloader
-			Iterator itCache = jcl.getCachedClasses().iterator();
-			while (itCache.hasNext()) {
-				Object next = itCache.next();
-				if (next instanceof CorruptData){
-					// Warn the user that the classloader data is corrupt
-					try {
-						long jclAddress = jcl.getObject().getID().getAddress();
-						out.print("\t classloader ID: " + Utils.toHex(jclAddress) + " " + Exceptions.getCorruptDataExceptionString() + "\n");
-					} catch (CorruptDataException e) {
-						out.print("\t classloader ID: <unknown> " + Exceptions.getCorruptDataExceptionString() + "\n");
-					}
-					break;
-				}
-			}
-			
-			Iterator itClass = jcl.getDefinedClasses().iterator();
-			while (itClass.hasNext()) {
-				javaClasses.put((JavaClass)itClass.next(), new Datum());
-			}
-		}
-		
-		// update count of objects and sizes in Map of classes
-		updateInstanceCount(jr, javaClasses);
-		
-		// print out results of object counting
-		long objCount = 0;
-		long totalSize = 0;
-		Iterator itClass = javaClasses.keySet().iterator();
-		if (itClass.hasNext()) {
-			printClassListHeader();
-		} else {
-			out.print("\n\t No information found for loaded classes\n");
-		}
-		while (itClass.hasNext()) {
-			JavaClass jc = (JavaClass)itClass.next();
-			String className;
-			
-			try {
-				className = jc.getName();
-			} catch (CorruptDataException cde) {
-				className = Exceptions.getCorruptDataExceptionString();
-			}
-			Datum d = (Datum)javaClasses.get(jc);
-			totalSize += d.getSize();
-			objCount += d.getCount();
-			printOneClass(className, d);
-		}
-		
-		out.print("\n");
-		if ( objCount > 0) {
-			out.print("\t Total number of objects: " + objCount + "\n");
-			out.print("\t Total size of objects: " + totalSize + "\n");
-		} 
-	}
-	
-	private void updateInstanceCount(JavaRuntime jr, Map javaClasses) {
-		Iterator itHeap = jr.getHeaps().iterator();
-		while (itHeap.hasNext()) {
-			JavaHeap jh = (JavaHeap)itHeap.next();
-			Iterator itObject = jh.getObjects().iterator();
-			while (itObject.hasNext()) {
-				Object next = itObject.next();
-				// Check that this is a JavaObject (there may be CorruptData objects in the 
-				// JavaHeap, we don't attempt to count these as instances of known classes). 
-				if (next instanceof JavaObject) {
-					JavaObject jo = (JavaObject)next;
-					Datum d = null;
-					JavaClass jc;
-				
-					try {
-						jc = jo.getJavaClass();
-					} catch (CorruptDataException cde) {
-						jc = null;
-					}
-				
-					if (null != jc) {
-						long size;
-					
-						d = (Datum)javaClasses.get(jc);
-						if (null == d) {
-							d = new Datum();
-							javaClasses.put(jc, d);
-							// FIXME: the below is for debugging purposes
-							//  this should not be needed when Kato reports array classes
-							//  in the class loaders
-/*							try {
-								out.print("\"" + jo.getJavaClass().getName() + "\"\n");
-							} catch (CorruptDataException cde) {
-							out.print(Exceptions.getCorruptDataExceptionString() + "\n");
-						}
-*/
-						}
-						try {
-							size = jo.getSize();
-						} catch (CorruptDataException cde) {
-							size = 0;
-						}
-						d.addToSize(size);
-						d.incrementCount();
-					} else {	// FIXME: DEBUG
-						try {
-							out.print(jo.getJavaClass().getName() + "\n");
-						} catch (CorruptDataException cde) {
-							out.print(Exceptions.getCorruptDataExceptionString() + "\n");
-						}
-					}
-				}
-			}
-		}
-	}
-
-	private void printClassListHeader() {
-		out.print("\t");
-		out.print(Utils.prePadWithSpaces("instances", 16));
-		out.print(Utils.prePadWithSpaces("total size", 16));
-		out.print("  class name");
-		out.print("\n");
-	}
-
-	private void printOneClass(String className, Datum datum){
-		out.print("\t");
-		out.print(Utils.prePadWithSpaces(String.valueOf(datum.getCount()), 16));
-		out.print(Utils.prePadWithSpaces(String.valueOf(datum.getSize()), 16));
-		out.print("  " + className);
-		out.print("\n");
-	}
-	
-/*
-	private void printOneClass(String className, Datum datum){
-		out.print("\t " + className + "\t"  
-				+ "has " + datum.getCount() + " instances "
-				+ "(total size = " + (long)datum.getSize()*datum.getCount() + ")"
-				+ "\n");
-	}
-*/
-	
-	public class Datum{
-		private int count;
-		private long size;
-		
-		public Datum(){
-			this.count = 0;
-			this.size = 0;
-		}
-		
-		public int getCount(){
-			return this.count;
-		}
-		
-		public long getSize(){
-			return this.size;
-		}
-		
-		public void incrementCount(){
-			this.count++;
-		}
-		
-		public void addToSize(long sizeToAdd){
-			this.size += sizeToAdd;
-		}
-	}
-}
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.katoview.commands.infocommands;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Stack;
+import java.util.Iterator;
+
+import javax.tools.diagnostics.image.CorruptData;
+import javax.tools.diagnostics.image.CorruptDataException;
+import javax.tools.diagnostics.image.Image;
+import javax.tools.diagnostics.runtime.ManagedRuntime;
+import javax.tools.diagnostics.runtime.java.JavaClass;
+import javax.tools.diagnostics.runtime.java.JavaClassLoader;
+import javax.tools.diagnostics.runtime.java.JavaHeap;
+import javax.tools.diagnostics.runtime.java.JavaObject;
+import javax.tools.diagnostics.runtime.java.JavaRuntime;
+
+import org.apache.kato.katoview.Output;
+import org.apache.kato.katoview.commands.Command;
+import org.apache.kato.katoview.commands.helpers.ClassOutput;
+import org.apache.kato.katoview.commands.helpers.Exceptions;
+import org.apache.kato.katoview.commands.helpers.Utils;
+
+
+public class InfoClassCommand extends Command{
+	
+	public InfoClassCommand(Output o){
+		super(o, "class", "prints inheritance chain and other data for a given class", 
+				"parameters: none, class name\n\n" +
+				"if no parameters are passed to \"info class\", it prints the " +
+				"number of instances of each class and the total size of all " +
+				"instances of each class as well as the total number of instances " +
+				"of all classes and the total size of all objects.\n\n" +
+				"if a class name is passed to \"info class\", it prints the " +
+				"following information about that class:\n" +
+				"  - name\n" +
+				"  - ID\n" +
+				"  - superclass ID\n" +
+				"  - class loader ID\n" +
+				"  - modifiers\n" +
+				"  - number of instances and total size of instances\n" +
+				"  - inheritance chain\n" +
+				"  - fields with modifiers (and values for static fields)\n" +
+				"  - methods with modifiers\n"
+				);
+		child_commands = null;
+	}
+	
+	public void doCommand(Stack args, Image loadedImage, HashMap systemProperties){
+		if (args.isEmpty())
+		{
+			printImageClasses(loadedImage);
+			
+			return;
+		}
+
+		String className = (String)args.pop();
+		
+		if (!args.isEmpty())
+		{
+			out.error("\"info class\" takes at most one parameter, which, if " +
+					"specified, must be a class name");
+			return;
+		}
+		
+		printImageClass(loadedImage, className);
+	}
+	
+	private void printImageClass(Image loadedImage, String className)
+	{
+		ManagedRuntime mr;
+		Iterator itRuntime = Utils.getRuntimes(loadedImage);
+		int count = 1;
+
+		out.print("\n");
+		while (itRuntime.hasNext()) {
+			mr = (ManagedRuntime)itRuntime.next();
+			if (mr instanceof JavaRuntime)
+			{
+				out.print("Runtime #" + count + ": \n\n");
+				
+				printRuntimeClass((JavaRuntime)mr, className);
+			}
+			count++;
+		}
+	}
+	
+	private void printRuntimeClass(JavaRuntime jr, String className)
+	{
+		JavaClass jc = Utils.getClassGivenName(className, jr, out);
+		
+		// if we couldn't find a class of that name, return; the passed in class name could
+		//  still be an array type or it might not exist
+		if (null == jc)
+		{
+			out.print("\t  could not find class with name \"" + className + "\"\n\n");
+			return;
+		}
+
+		String spaces = "    ";
+		String cdeInfo = "N/A (CorruptDataException occurred)";
+		out.print("name = " + className);
+		out.print(spaces);
+		out.print("\n\n\t");
+		out.print("ID = 0x" + Long.toHexString(jc.getID().getAddress()));
+		
+		String superClassInfo;
+		try{
+			JavaClass superClass = jc.getSuperclass();
+			if (null == superClass) {
+				superClassInfo = "<no superclass>";
+			} else {
+				superClassInfo = "0x" + Long.toHexString(superClass.getID().getAddress());
+			}
+		}catch (CorruptDataException dce){
+			superClassInfo = cdeInfo;
+		}
+		out.print(spaces);
+		out.print("superID = " + superClassInfo);
+/*
+ * Omitting size of class because that might differ between instances (ie. arrays)
+ * 
+		sb.append(spaces);
+		sb.append("instance size = " + datum.getSize());
+*/
+		
+		String classLoaderInfo;
+		try{
+			JavaClassLoader jClassLoader = jc.getClassLoader();
+			classLoaderInfo = "0x" + Long.toHexString(jClassLoader.getObject().getJavaClass().getID().getAddress());
+		}catch (CorruptDataException cde){
+			classLoaderInfo = cdeInfo;
+		}
+		out.print(spaces);
+		out.print("\n\t");
+		out.print("classLoader = " + classLoaderInfo);
+		
+		String modifiersInfo;
+		try{
+			int modifiers = jc.getModifiers();
+			modifiersInfo = Utils.getModifierString(modifiers);
+		}catch (CorruptDataException cde){
+			modifiersInfo = cdeInfo;
+		}
+		out.print(spaces);
+		out.print("modifers: " + modifiersInfo);
+		out.print("\n\n");
+		
+		Map classMap = new HashMap();
+		classMap.put(jc, new Datum());
+		updateInstanceCount(jr, classMap);
+		Datum d = (Datum)classMap.get(jc);
+		
+		out.print("\tnumber of instances:     " + d.getCount() + "\n");
+		out.print("\ttotal size of instances: " + d.getSize() + " bytes");
+		
+		out.print("\n\n");
+		
+		printClassHierarchy(jc);
+		out.print("\n");
+		printFields(jc);
+		out.print("\n");
+		printMethods(jc);
+	}
+
+	private void printClassHierarchy(JavaClass jClass) {
+		Stack stack = new Stack();
+		while (null != jClass){
+			try{
+				stack.add(jClass.getName());
+				jClass = jClass.getSuperclass(); 
+			}catch(CorruptDataException cde){
+				stack.add("N/A (CorruptDataException occurred)");
+				break;
+			}
+		}
+		printStack(stack);
+	}
+	
+	private void printStack(Stack stack){
+		out.print("Inheritance chain....\n\n");
+		String tab = "\t";
+		String spaces = "";
+		while(stack.size() > 0){
+			out.print(tab + spaces + (String)stack.pop() + "\n");
+			spaces += "   ";
+		}
+	}
+	
+	private void printFields(JavaClass jClass) {
+		out.print("Fields......\n\n");
+		ClassOutput.printStaticFields(jClass, out);
+		ClassOutput.printNonStaticFields(jClass, out);
+	}
+	
+	private void printMethods(JavaClass jClass){
+		out.print("Methods......\n\n");
+		ClassOutput.printMethods(jClass.getDeclaredMethods().iterator(), out);
+		out.print("\n");
+	}
+	
+	
+	// below methods are for "info class" (with no parameters)
+	
+	private void printImageClasses(Image loadedImage) {
+		ManagedRuntime mr;
+		Iterator itRuntime = Utils.getRuntimes(loadedImage);
+		int count = 1;
+
+		out.print("\n");
+		while (itRuntime.hasNext()) {
+			mr = (ManagedRuntime)itRuntime.next();
+			if (mr instanceof JavaRuntime)
+			{
+				out.print("Runtime #" + count + ": \n\n");
+				
+				printRuntimeClasses((JavaRuntime)mr);
+				out.print("\n\n");
+			}
+			count++;
+		}
+	}
+	
+	private void printRuntimeClasses(JavaRuntime jr) {
+		Map javaClasses = new HashMap();
+		Iterator itClassLoader = jr.getJavaClassLoaders().iterator();
+		
+		// create Map of all classes in this JavaRuntime's class loaders
+		while (itClassLoader.hasNext()) {
+			JavaClassLoader jcl = (JavaClassLoader)itClassLoader.next();
+			
+			// Check for any corrupt data for this classloader
+			Iterator itCache = jcl.getCachedClasses().iterator();
+			while (itCache.hasNext()) {
+				Object next = itCache.next();
+				if (next instanceof CorruptData){
+					// Warn the user that the classloader data is corrupt
+					try {
+						long jclAddress = jcl.getObject().getID().getAddress();
+						out.print("\t classloader ID: " + Utils.toHex(jclAddress) + " " + Exceptions.getCorruptDataExceptionString() + "\n");
+					} catch (CorruptDataException e) {
+						out.print("\t classloader ID: <unknown> " + Exceptions.getCorruptDataExceptionString() + "\n");
+					}
+					break;
+				}
+			}
+			
+			Iterator itClass = jcl.getDefinedClasses().iterator();
+			while (itClass.hasNext()) {
+				javaClasses.put((JavaClass)itClass.next(), new Datum());
+			}
+		}
+		
+		// update count of objects and sizes in Map of classes
+		updateInstanceCount(jr, javaClasses);
+		
+		// print out results of object counting
+		long objCount = 0;
+		long totalSize = 0;
+		Iterator itClass = javaClasses.keySet().iterator();
+		if (itClass.hasNext()) {
+			printClassListHeader();
+		} else {
+			out.print("\n\t No information found for loaded classes\n");
+		}
+		while (itClass.hasNext()) {
+			JavaClass jc = (JavaClass)itClass.next();
+			String className;
+			
+			try {
+				className = jc.getName();
+			} catch (CorruptDataException cde) {
+				className = Exceptions.getCorruptDataExceptionString();
+			}
+			Datum d = (Datum)javaClasses.get(jc);
+			totalSize += d.getSize();
+			objCount += d.getCount();
+			printOneClass(className, d);
+		}
+		
+		out.print("\n");
+		if ( objCount > 0) {
+			out.print("\t Total number of objects: " + objCount + "\n");
+			out.print("\t Total size of objects: " + totalSize + "\n");
+		} 
+	}
+	
+	private void updateInstanceCount(JavaRuntime jr, Map javaClasses) {
+		Iterator itHeap = jr.getHeaps().iterator();
+		while (itHeap.hasNext()) {
+			JavaHeap jh = (JavaHeap)itHeap.next();
+			Iterator itObject = jh.getObjects().iterator();
+			while (itObject.hasNext()) {
+				Object next = itObject.next();
+				// Check that this is a JavaObject (there may be CorruptData objects in the 
+				// JavaHeap, we don't attempt to count these as instances of known classes). 
+				if (next instanceof JavaObject) {
+					JavaObject jo = (JavaObject)next;
+					Datum d = null;
+					JavaClass jc;
+				
+					try {
+						jc = jo.getJavaClass();
+					} catch (CorruptDataException cde) {
+						jc = null;
+					}
+				
+					if (null != jc) {
+						long size;
+					
+						d = (Datum)javaClasses.get(jc);
+						if (null == d) {
+							d = new Datum();
+							javaClasses.put(jc, d);
+							// FIXME: the below is for debugging purposes
+							//  this should not be needed when Kato reports array classes
+							//  in the class loaders
+/*							try {
+								out.print("\"" + jo.getJavaClass().getName() + "\"\n");
+							} catch (CorruptDataException cde) {
+							out.print(Exceptions.getCorruptDataExceptionString() + "\n");
+						}
+*/
+						}
+						try {
+							size = jo.getSize();
+						} catch (CorruptDataException cde) {
+							size = 0;
+						}
+						d.addToSize(size);
+						d.incrementCount();
+					} else {	// FIXME: DEBUG
+						try {
+							out.print(jo.getJavaClass().getName() + "\n");
+						} catch (CorruptDataException cde) {
+							out.print(Exceptions.getCorruptDataExceptionString() + "\n");
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private void printClassListHeader() {
+		out.print("\t");
+		out.print(Utils.prePadWithSpaces("instances", 16));
+		out.print(Utils.prePadWithSpaces("total size", 16));
+		out.print("  class name");
+		out.print("\n");
+	}
+
+	private void printOneClass(String className, Datum datum){
+		out.print("\t");
+		out.print(Utils.prePadWithSpaces(String.valueOf(datum.getCount()), 16));
+		out.print(Utils.prePadWithSpaces(String.valueOf(datum.getSize()), 16));
+		out.print("  " + className);
+		out.print("\n");
+	}
+	
+/*
+	private void printOneClass(String className, Datum datum){
+		out.print("\t " + className + "\t"  
+				+ "has " + datum.getCount() + " instances "
+				+ "(total size = " + (long)datum.getSize()*datum.getCount() + ")"
+				+ "\n");
+	}
+*/
+	
+	public class Datum{
+		private int count;
+		private long size;
+		
+		public Datum(){
+			this.count = 0;
+			this.size = 0;
+		}
+		
+		public int getCount(){
+			return this.count;
+		}
+		
+		public long getSize(){
+			return this.size;
+		}
+		
+		public void incrementCount(){
+			this.count++;
+		}
+		
+		public void addToSize(long sizeToAdd){
+			this.size += sizeToAdd;
+		}
+	}
+}

Propchange: incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoClassCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoHeapCommand.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoHeapCommand.java?rev=883384&r1=883383&r2=883384&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoHeapCommand.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoHeapCommand.java Mon Nov 23 15:53:48 2009
@@ -1,199 +1,199 @@
-/*******************************************************************************
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
-package org.apache.kato.katoview.commands.infocommands;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Stack;
-
-import javax.tools.diagnostics.image.CorruptDataException;
-import javax.tools.diagnostics.image.DataUnavailable;
-import javax.tools.diagnostics.image.Image;
-import javax.tools.diagnostics.image.ImageSection;
-import javax.tools.diagnostics.runtime.ManagedRuntime;
-import javax.tools.diagnostics.runtime.java.JavaHeap;
-import javax.tools.diagnostics.runtime.java.JavaObject;
-import javax.tools.diagnostics.runtime.java.JavaRuntime;
-
-import org.apache.kato.katoview.Output;
-import org.apache.kato.katoview.commands.Command;
-import org.apache.kato.katoview.commands.helpers.Utils;
-
-
-public class InfoHeapCommand extends Command {
-	
-	public InfoHeapCommand(Output o){
-		super(o, "heap", "displays information about Java heaps",
-				"parameters: none, \"*\", or heap name\n\n" +
-				" none prints:\n" +
-				" - heap name\n" +
-				" - heap section\n" +
-				" \"*\" or heap name prints the following information\n" +
-				" about all heaps or the specified heap, respectively:\n" +
-				" - heap name\n" +
-				" - (heap size and occupancy)\n" +
-				" - heap sections\n" +
-				"  - section name\n" +
-				"  - section size\n" +
-				"  - whether the section is shared\n" +
-				"  - whether the section is executable\n" +
-				"  - whether the section is read only\n"
-				);
-		child_commands = null;
-	}
-	public void doCommand(Stack args, Image loadedImage, HashMap properties){
-		
-		
-		String param = null;
-		StringBuffer paramsToString = new StringBuffer(); 
-		if (!args.isEmpty()){
-			for (int i = (args.size())-1; i>=0; i--){
-				paramsToString.append(((String) args.get(i)) + " ");
-			}
-			if (paramsToString != null){
-				param = paramsToString.toString();
-				param = param.trim();
-			}
-		}
-		
-		ManagedRuntime mr;
-		Iterator itRuntime = Utils.getRuntimes(loadedImage);
-		int count = 1;
-
-		out.print("\n");
-		while (itRuntime.hasNext()) {
-			mr = (ManagedRuntime)itRuntime.next();
-			if (mr instanceof JavaRuntime)
-			{
-				out.print("\tRuntime #" + count);
-				out.print("\n");
-				
-				if (args.isEmpty()){
-					printHeapInfo(null,(JavaRuntime)mr, out);
-					out.print("\nUse \"info heap *\" or \"info heap <heap_name>\" " +
-							"for more information.\n");
-				} else if (param.indexOf("*")>=0){
-					printHeapInfo(param,(JavaRuntime)mr, out);
-				} else {
-					
-					boolean foundHeap = searchForHeap(param, (JavaRuntime)mr, out);
-					
-					if (!foundHeap){
-						out.error("Unable to locate heap: \"" + param +"\".");
-						out.print("\tAvailable heaps: \n");
-						printHeapInfo(null,(JavaRuntime)mr, out);
-					}
-				}
-			
-			}
-			count++;
-		}
-	}
-	private void printHeapInfo(String param, JavaRuntime runtime, Output out){
-		
-		Iterator itHeaps = runtime.getHeaps().iterator();
-		int countheaps = 1;
-		
-		while (itHeaps.hasNext())
-		{
-			JavaHeap theHeap = (JavaHeap)itHeaps.next();
-			out.print("\t Heap #" + countheaps + ":  " + theHeap.getName()+ "\n");
-			if (param != null){
-				printSectionInfo(theHeap, out);
-			}
-			countheaps++;
-		}
-	}
-	private void printSectionInfo(JavaHeap theHeap, Output out){
-		
-		Iterator itSections = theHeap.getSections().iterator();
-		int countSections = 1;
-		
-		while (itSections.hasNext()){
-			
-			ImageSection theSection = (ImageSection)itSections.next();
-			out.print("\t  Section #"+ countSections + ":  " + theSection.getName() + "\n");
-			out.print("\t   Size:        " + theSection.getSize() + " bytes\n");
-			try 
-			{
-				out.print("\t   Shared:      " + theSection.isShared() + "\n");
-				out.print("\t   Executable:  " + theSection.isExecutable() +"\n");
-				out.print("\t   Read Only:   " + theSection.isReadOnly() + "\n");
-			}
-			catch(DataUnavailable e){
-				out.print("\t   Shared:      <unknown>\n");
-				out.print("\t   Executable:  <unknown>\n");
-				out.print("\t   Read Only:   <unknown>\n");
-			}
-			countSections++;
-		}
-	}
-	private boolean searchForHeap(String param, JavaRuntime jr, Output out){
-		
-		boolean foundHeap = false;
-		
-		Iterator itHeaps = jr.getHeaps().iterator();
-		int countheaps = 1;
-		
-		while (itHeaps.hasNext())
-		{
-			JavaHeap theHeap = (JavaHeap)itHeaps.next();
-			if (theHeap.getName().indexOf(param)==0){
-				out.print("\t Heap #" + countheaps + ":  " + theHeap.getName()+"\n");
-				printOccupancyInfo(theHeap, out);
-				printSectionInfo(theHeap, out);
-				foundHeap = true;
-			}
-			countheaps++;
-		}
-		
-		return foundHeap;
-	}
-
-	private void printOccupancyInfo(JavaHeap theHeap, Output out){
-		/*
-		 * This method takes a lot of time and hence this information is only included 
-		 * when using "info heap <heapname>". If this method was run for every heap 
-		 * when using "info heap *" the amount of time it would take would be astronomical.
-		 */
-		long size = 0;
-		long totalObjectSize = 0;
-		
-		Iterator itSections = theHeap.getSections().iterator();
-		while (itSections.hasNext()){
-			ImageSection theSection = (ImageSection)itSections.next();
-			size = size + theSection.getSize();
-		}
-		out.print("\t  Size of heap: "+ size + " bytes\n");
-		
-		Iterator itObjects = theHeap.getObjects().iterator();
-		try{
-			while (itObjects.hasNext()){
-				JavaObject theObject = (JavaObject)itObjects.next();
-				totalObjectSize = totalObjectSize + theObject.getSize();
-			}
-			
-			float percentage = ((float)totalObjectSize/(float)size)*10000; 
-			int trimmedPercent = ((int)percentage); // Sending this float through an int gets it down to 2 decimal places.
-			percentage = ((float)trimmedPercent)/100;
-			
-			out.print("\t  Occupancy :   "+ totalObjectSize + " bytes  (" + percentage + "%)\n");
-		
-		} catch (CorruptDataException e){
-			out.print("\t  Occupancy :   <unknown>\n");
-		}
-		
-	}
-	
-}
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.katoview.commands.infocommands;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Stack;
+
+import javax.tools.diagnostics.image.CorruptDataException;
+import javax.tools.diagnostics.image.DataUnavailable;
+import javax.tools.diagnostics.image.Image;
+import javax.tools.diagnostics.image.ImageSection;
+import javax.tools.diagnostics.runtime.ManagedRuntime;
+import javax.tools.diagnostics.runtime.java.JavaHeap;
+import javax.tools.diagnostics.runtime.java.JavaObject;
+import javax.tools.diagnostics.runtime.java.JavaRuntime;
+
+import org.apache.kato.katoview.Output;
+import org.apache.kato.katoview.commands.Command;
+import org.apache.kato.katoview.commands.helpers.Utils;
+
+
+public class InfoHeapCommand extends Command {
+	
+	public InfoHeapCommand(Output o){
+		super(o, "heap", "displays information about Java heaps",
+				"parameters: none, \"*\", or heap name\n\n" +
+				" none prints:\n" +
+				" - heap name\n" +
+				" - heap section\n" +
+				" \"*\" or heap name prints the following information\n" +
+				" about all heaps or the specified heap, respectively:\n" +
+				" - heap name\n" +
+				" - (heap size and occupancy)\n" +
+				" - heap sections\n" +
+				"  - section name\n" +
+				"  - section size\n" +
+				"  - whether the section is shared\n" +
+				"  - whether the section is executable\n" +
+				"  - whether the section is read only\n"
+				);
+		child_commands = null;
+	}
+	public void doCommand(Stack args, Image loadedImage, HashMap properties){
+		
+		
+		String param = null;
+		StringBuffer paramsToString = new StringBuffer(); 
+		if (!args.isEmpty()){
+			for (int i = (args.size())-1; i>=0; i--){
+				paramsToString.append(((String) args.get(i)) + " ");
+			}
+			if (paramsToString != null){
+				param = paramsToString.toString();
+				param = param.trim();
+			}
+		}
+		
+		ManagedRuntime mr;
+		Iterator itRuntime = Utils.getRuntimes(loadedImage);
+		int count = 1;
+
+		out.print("\n");
+		while (itRuntime.hasNext()) {
+			mr = (ManagedRuntime)itRuntime.next();
+			if (mr instanceof JavaRuntime)
+			{
+				out.print("\tRuntime #" + count);
+				out.print("\n");
+				
+				if (args.isEmpty()){
+					printHeapInfo(null,(JavaRuntime)mr, out);
+					out.print("\nUse \"info heap *\" or \"info heap <heap_name>\" " +
+							"for more information.\n");
+				} else if (param.indexOf("*")>=0){
+					printHeapInfo(param,(JavaRuntime)mr, out);
+				} else {
+					
+					boolean foundHeap = searchForHeap(param, (JavaRuntime)mr, out);
+					
+					if (!foundHeap){
+						out.error("Unable to locate heap: \"" + param +"\".");
+						out.print("\tAvailable heaps: \n");
+						printHeapInfo(null,(JavaRuntime)mr, out);
+					}
+				}
+			
+			}
+			count++;
+		}
+	}
+	private void printHeapInfo(String param, JavaRuntime runtime, Output out){
+		
+		Iterator itHeaps = runtime.getHeaps().iterator();
+		int countheaps = 1;
+		
+		while (itHeaps.hasNext())
+		{
+			JavaHeap theHeap = (JavaHeap)itHeaps.next();
+			out.print("\t Heap #" + countheaps + ":  " + theHeap.getName()+ "\n");
+			if (param != null){
+				printSectionInfo(theHeap, out);
+			}
+			countheaps++;
+		}
+	}
+	private void printSectionInfo(JavaHeap theHeap, Output out){
+		
+		Iterator itSections = theHeap.getSections().iterator();
+		int countSections = 1;
+		
+		while (itSections.hasNext()){
+			
+			ImageSection theSection = (ImageSection)itSections.next();
+			out.print("\t  Section #"+ countSections + ":  " + theSection.getName() + "\n");
+			out.print("\t   Size:        " + theSection.getSize() + " bytes\n");
+			try 
+			{
+				out.print("\t   Shared:      " + theSection.isShared() + "\n");
+				out.print("\t   Executable:  " + theSection.isExecutable() +"\n");
+				out.print("\t   Read Only:   " + theSection.isReadOnly() + "\n");
+			}
+			catch(DataUnavailable e){
+				out.print("\t   Shared:      <unknown>\n");
+				out.print("\t   Executable:  <unknown>\n");
+				out.print("\t   Read Only:   <unknown>\n");
+			}
+			countSections++;
+		}
+	}
+	private boolean searchForHeap(String param, JavaRuntime jr, Output out){
+		
+		boolean foundHeap = false;
+		
+		Iterator itHeaps = jr.getHeaps().iterator();
+		int countheaps = 1;
+		
+		while (itHeaps.hasNext())
+		{
+			JavaHeap theHeap = (JavaHeap)itHeaps.next();
+			if (theHeap.getName().indexOf(param)==0){
+				out.print("\t Heap #" + countheaps + ":  " + theHeap.getName()+"\n");
+				printOccupancyInfo(theHeap, out);
+				printSectionInfo(theHeap, out);
+				foundHeap = true;
+			}
+			countheaps++;
+		}
+		
+		return foundHeap;
+	}
+
+	private void printOccupancyInfo(JavaHeap theHeap, Output out){
+		/*
+		 * This method takes a lot of time and hence this information is only included 
+		 * when using "info heap <heapname>". If this method was run for every heap 
+		 * when using "info heap *" the amount of time it would take would be astronomical.
+		 */
+		long size = 0;
+		long totalObjectSize = 0;
+		
+		Iterator itSections = theHeap.getSections().iterator();
+		while (itSections.hasNext()){
+			ImageSection theSection = (ImageSection)itSections.next();
+			size = size + theSection.getSize();
+		}
+		out.print("\t  Size of heap: "+ size + " bytes\n");
+		
+		Iterator itObjects = theHeap.getObjects().iterator();
+		try{
+			while (itObjects.hasNext()){
+				JavaObject theObject = (JavaObject)itObjects.next();
+				totalObjectSize = totalObjectSize + theObject.getSize();
+			}
+			
+			float percentage = ((float)totalObjectSize/(float)size)*10000; 
+			int trimmedPercent = ((int)percentage); // Sending this float through an int gets it down to 2 decimal places.
+			percentage = ((float)trimmedPercent)/100;
+			
+			out.print("\t  Occupancy :   "+ totalObjectSize + " bytes  (" + percentage + "%)\n");
+		
+		} catch (CorruptDataException e){
+			out.print("\t  Occupancy :   <unknown>\n");
+		}
+		
+	}
+	
+}

Propchange: incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoHeapCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoJitmCommand.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoJitmCommand.java?rev=883384&r1=883383&r2=883384&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoJitmCommand.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoJitmCommand.java Mon Nov 23 15:53:48 2009
@@ -1,116 +1,116 @@
-/*******************************************************************************
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
-package org.apache.kato.katoview.commands.infocommands;
-
-import java.util.HashMap;
-import java.util.Stack;
-import java.util.Iterator;
-
-import javax.tools.diagnostics.image.CorruptDataException;
-import javax.tools.diagnostics.image.Image;
-import javax.tools.diagnostics.image.ImageSection;
-import javax.tools.diagnostics.runtime.java.JavaClass;
-import javax.tools.diagnostics.runtime.java.JavaClassLoader;
-import javax.tools.diagnostics.runtime.java.JavaMethod;
-import javax.tools.diagnostics.runtime.java.JavaRuntime;
-
-import org.apache.kato.katoview.Output;
-import org.apache.kato.katoview.commands.Command;
-import org.apache.kato.katoview.commands.helpers.Exceptions;
-import org.apache.kato.katoview.commands.helpers.Utils;
-
-
-public class InfoJitmCommand extends Command {
-
-	public InfoJitmCommand(Output o){
-		super(o, "jitm", "displays JIT'ed methods and their addresses",
-				"parameters: none\n\n" +
-				"prints the following information about each JIT'ed method\n\n" +
-				"  - method name and signature\n" +
-				"  - method start address\n" +
-				"  - method end address\n"
-		);
-		child_commands = null;
-	}
-	
-	public void doCommand(Stack args, Image loadedImage, HashMap properties){
-		if (!args.isEmpty())
-		{
-			out.error("\"info jitm\" command does not take any parameters");
-		}
-		else
-		{
-			Iterator itJavaRuntime = Utils.getRuntimes(loadedImage);
-			while (itJavaRuntime.hasNext())
-			{
-				JavaRuntime jr = (JavaRuntime)itJavaRuntime.next();
-				Iterator itJavaClassLoader = jr.getJavaClassLoaders().iterator();
-				while (itJavaClassLoader.hasNext())
-				{
-					JavaClassLoader jcl = (JavaClassLoader)itJavaClassLoader.next();
-					Iterator itJavaClass = jcl.getDefinedClasses().iterator();
-					
-					while (itJavaClass.hasNext())
-					{
-						JavaClass jc = (JavaClass)itJavaClass.next();
-						Iterator itJavaMethod = jc.getDeclaredMethods().iterator();
-						
-						String jcName;
-						try {
-							jcName = jc.getName();
-						} catch (CorruptDataException e) {
-							jcName = Exceptions.getCorruptDataExceptionString();
-						}
-						
-						while (itJavaMethod.hasNext())
-						{
-							JavaMethod jm = (JavaMethod)itJavaMethod.next();
-							String name;
-							String sig;
-							
-							try {
-								name = jm.getName();
-							} catch (CorruptDataException e) {
-								name = Exceptions.getCorruptDataExceptionString();
-							}
-							
-							try {
-								sig = jm.getSignature();
-							} catch (CorruptDataException e) {
-								sig = Exceptions.getCorruptDataExceptionString();
-							}
-
-							if (jm.getCompiledSections().isEmpty()==false)
-							{
-								Iterator itImageSection = jm.getCompiledSections().iterator();
-								while (itImageSection.hasNext())
-								{
-									ImageSection is = (ImageSection)itImageSection.next();
-									long startAddr = is.getBaseAddress().getAddress();
-									long size = is.getSize();
-									long endAddr = startAddr + size;
-									
-									out.print("\n\t" + "start=" + Utils.toHex(startAddr) +
-											"  " + "end=" + Utils.toHex(endAddr) +
-											"   " + jcName + "::" + name + sig);
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-		out.print("\n");
-	}
-}
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.katoview.commands.infocommands;
+
+import java.util.HashMap;
+import java.util.Stack;
+import java.util.Iterator;
+
+import javax.tools.diagnostics.image.CorruptDataException;
+import javax.tools.diagnostics.image.Image;
+import javax.tools.diagnostics.image.ImageSection;
+import javax.tools.diagnostics.runtime.java.JavaClass;
+import javax.tools.diagnostics.runtime.java.JavaClassLoader;
+import javax.tools.diagnostics.runtime.java.JavaMethod;
+import javax.tools.diagnostics.runtime.java.JavaRuntime;
+
+import org.apache.kato.katoview.Output;
+import org.apache.kato.katoview.commands.Command;
+import org.apache.kato.katoview.commands.helpers.Exceptions;
+import org.apache.kato.katoview.commands.helpers.Utils;
+
+
+public class InfoJitmCommand extends Command {
+
+	public InfoJitmCommand(Output o){
+		super(o, "jitm", "displays JIT'ed methods and their addresses",
+				"parameters: none\n\n" +
+				"prints the following information about each JIT'ed method\n\n" +
+				"  - method name and signature\n" +
+				"  - method start address\n" +
+				"  - method end address\n"
+		);
+		child_commands = null;
+	}
+	
+	public void doCommand(Stack args, Image loadedImage, HashMap properties){
+		if (!args.isEmpty())
+		{
+			out.error("\"info jitm\" command does not take any parameters");
+		}
+		else
+		{
+			Iterator itJavaRuntime = Utils.getRuntimes(loadedImage);
+			while (itJavaRuntime.hasNext())
+			{
+				JavaRuntime jr = (JavaRuntime)itJavaRuntime.next();
+				Iterator itJavaClassLoader = jr.getJavaClassLoaders().iterator();
+				while (itJavaClassLoader.hasNext())
+				{
+					JavaClassLoader jcl = (JavaClassLoader)itJavaClassLoader.next();
+					Iterator itJavaClass = jcl.getDefinedClasses().iterator();
+					
+					while (itJavaClass.hasNext())
+					{
+						JavaClass jc = (JavaClass)itJavaClass.next();
+						Iterator itJavaMethod = jc.getDeclaredMethods().iterator();
+						
+						String jcName;
+						try {
+							jcName = jc.getName();
+						} catch (CorruptDataException e) {
+							jcName = Exceptions.getCorruptDataExceptionString();
+						}
+						
+						while (itJavaMethod.hasNext())
+						{
+							JavaMethod jm = (JavaMethod)itJavaMethod.next();
+							String name;
+							String sig;
+							
+							try {
+								name = jm.getName();
+							} catch (CorruptDataException e) {
+								name = Exceptions.getCorruptDataExceptionString();
+							}
+							
+							try {
+								sig = jm.getSignature();
+							} catch (CorruptDataException e) {
+								sig = Exceptions.getCorruptDataExceptionString();
+							}
+
+							if (jm.getCompiledSections().isEmpty()==false)
+							{
+								Iterator itImageSection = jm.getCompiledSections().iterator();
+								while (itImageSection.hasNext())
+								{
+									ImageSection is = (ImageSection)itImageSection.next();
+									long startAddr = is.getBaseAddress().getAddress();
+									long size = is.getSize();
+									long endAddr = startAddr + size;
+									
+									out.print("\n\t" + "start=" + Utils.toHex(startAddr) +
+											"  " + "end=" + Utils.toHex(endAddr) +
+											"   " + jcName + "::" + name + sig);
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		out.print("\n");
+	}
+}

Propchange: incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoJitmCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoLockCommand.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoLockCommand.java?rev=883384&r1=883383&r2=883384&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoLockCommand.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoLockCommand.java Mon Nov 23 15:53:48 2009
@@ -1,139 +1,139 @@
-/*******************************************************************************
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
-package org.apache.kato.katoview.commands.infocommands;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Stack;
-import java.util.Vector;
-
-import javax.tools.diagnostics.image.CorruptDataException;
-import javax.tools.diagnostics.image.DataUnavailable;
-import javax.tools.diagnostics.image.Image;
-import javax.tools.diagnostics.runtime.java.JavaClass;
-import javax.tools.diagnostics.runtime.java.JavaMonitor;
-import javax.tools.diagnostics.runtime.java.JavaObject;
-import javax.tools.diagnostics.runtime.java.JavaRuntime;
-import javax.tools.diagnostics.runtime.java.JavaThread;
-
-import org.apache.kato.katoview.Output;
-import org.apache.kato.katoview.commands.Command;
-import org.apache.kato.katoview.commands.helpers.Exceptions;
-import org.apache.kato.katoview.commands.helpers.Utils;
-
-
-public class InfoLockCommand extends Command{
-	
-	public InfoLockCommand(Output o){
-		super(o, "lock", "outputs a list of system monitors and locked objects",
-				"parameters: none\n\n" +
-				"The info lock command outputs a list of system monitors and locked objects.");
-		child_commands = null;
-	}
-	
-	public void doCommand(Stack args, Image loadedImage, HashMap properties){
-		Vector vMonitorsWithLockedObjects = new Vector();
-		Iterator runtimes = Utils.getRuntimes(loadedImage);
-		
-		while(runtimes.hasNext()){
-			JavaRuntime jRuntime = (JavaRuntime)runtimes.next();
-			Iterator monitors = jRuntime.getMonitors().iterator();
-			
-			out.println("\nSystem locks...");
-			while (monitors.hasNext()){
-				JavaMonitor jMonitor = (JavaMonitor)monitors.next();
-				JavaObject jObject = jMonitor.getObject();
-				try {
-					String monitorName = jMonitor.getName().trim();
-					if (monitorName.equalsIgnoreCase("")) {
-						monitorName = "<un-named monitor>";
-					}
-					out.println("id: 0x" + jMonitor.getID() + " name: " + jMonitor.getName());
-
-					JavaThread owner = jMonitor.getOwner();
-					if (null != owner) {
-						try {
-							out.println("\towner thread id: " + owner.getImageThread().getID()
-									+ " name: " + owner.getName());
-						} catch (DataUnavailable e) {
-							out.println("\towner thread id: " + Exceptions.getDataUnavailableString());
-						}
-					}
-					
-					// List any threads waiting on enter or notify for this monitor
-					Iterator itEnterWaiter = jMonitor.getEnterWaiters().iterator();
-					while (itEnterWaiter.hasNext()) {
-						JavaThread jThread = (JavaThread)itEnterWaiter.next();
-						try {
-							out.println("\twaiting thread id: " + jThread.getImageThread().getID() 
-									+ " name: " + jThread.getName());
-						} catch (DataUnavailable dae) {
-							out.println("\twaiting thread id: <unknown>");
-						}
-					}
-					Iterator itNotifyWaiter = jMonitor.getNotifyWaiters().iterator();
-					while (itNotifyWaiter.hasNext()) {
-						JavaThread jThread = (JavaThread)itNotifyWaiter.next();
-						try {
-							out.println("\twaiting thread id: " + jThread.getImageThread().getID() 
-									+ " name: " + jThread.getName());
-						} catch (DataUnavailable dae) {
-							out.println("\twaiting thread id: <unknown>");
-						}
-					}
-					
-				} catch(CorruptDataException cde) {
-					out.println("\nwarning, corrupt data encountered during scan for system locks...");
-				}
-				if (null != jObject) {
-					// Remember object monitors (flat or inflated) for later
-					vMonitorsWithLockedObjects.add(jMonitor);
-				}
-			}
-		}
-		
-		out.println("\nLocked objects...");
-		if (0 == vMonitorsWithLockedObjects.size()){
-			out.println("\t...None.");
-			return;
-		}
-		Iterator lockedObjects = vMonitorsWithLockedObjects.iterator();
-		while(lockedObjects.hasNext()){
-			JavaMonitor jMonitor = (JavaMonitor)lockedObjects.next();
-			JavaObject jObject = jMonitor.getObject();
-			try{
-				JavaThread owner = jMonitor.getOwner();
-				String className = "<unknown class>";
-				JavaClass jClass = jObject.getJavaClass();	
-				if (null != jClass) {
-				    className = jClass.getName();
-				}
-				String jObjectID = Long.toHexString(jObject.getID().getAddress());
-				if (null == owner) {
-					out.println(className + "@0x" + jObjectID + " locked by an unknown thread");
-				} else {
-					String owningThreadID = null;
-					try {
-						owningThreadID = owner.getImageThread().getID();
-					} catch (DataUnavailable e) {
-						owningThreadID = Exceptions.getDataUnavailableString();
-					}
-					out.println(className + "@0x" + jObjectID + "\n\tlocked by thread id: "
-								+ owningThreadID + " name: " + owner.getName());
-				}
-			}catch(CorruptDataException cde){
-			}
-		}
-	}
-}
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.katoview.commands.infocommands;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Stack;
+import java.util.Vector;
+
+import javax.tools.diagnostics.image.CorruptDataException;
+import javax.tools.diagnostics.image.DataUnavailable;
+import javax.tools.diagnostics.image.Image;
+import javax.tools.diagnostics.runtime.java.JavaClass;
+import javax.tools.diagnostics.runtime.java.JavaMonitor;
+import javax.tools.diagnostics.runtime.java.JavaObject;
+import javax.tools.diagnostics.runtime.java.JavaRuntime;
+import javax.tools.diagnostics.runtime.java.JavaThread;
+
+import org.apache.kato.katoview.Output;
+import org.apache.kato.katoview.commands.Command;
+import org.apache.kato.katoview.commands.helpers.Exceptions;
+import org.apache.kato.katoview.commands.helpers.Utils;
+
+
+public class InfoLockCommand extends Command{
+	
+	public InfoLockCommand(Output o){
+		super(o, "lock", "outputs a list of system monitors and locked objects",
+				"parameters: none\n\n" +
+				"The info lock command outputs a list of system monitors and locked objects.");
+		child_commands = null;
+	}
+	
+	public void doCommand(Stack args, Image loadedImage, HashMap properties){
+		Vector vMonitorsWithLockedObjects = new Vector();
+		Iterator runtimes = Utils.getRuntimes(loadedImage);
+		
+		while(runtimes.hasNext()){
+			JavaRuntime jRuntime = (JavaRuntime)runtimes.next();
+			Iterator monitors = jRuntime.getMonitors().iterator();
+			
+			out.println("\nSystem locks...");
+			while (monitors.hasNext()){
+				JavaMonitor jMonitor = (JavaMonitor)monitors.next();
+				JavaObject jObject = jMonitor.getObject();
+				try {
+					String monitorName = jMonitor.getName().trim();
+					if (monitorName.equalsIgnoreCase("")) {
+						monitorName = "<un-named monitor>";
+					}
+					out.println("id: 0x" + jMonitor.getID() + " name: " + jMonitor.getName());
+
+					JavaThread owner = jMonitor.getOwner();
+					if (null != owner) {
+						try {
+							out.println("\towner thread id: " + owner.getImageThread().getID()
+									+ " name: " + owner.getName());
+						} catch (DataUnavailable e) {
+							out.println("\towner thread id: " + Exceptions.getDataUnavailableString());
+						}
+					}
+					
+					// List any threads waiting on enter or notify for this monitor
+					Iterator itEnterWaiter = jMonitor.getEnterWaiters().iterator();
+					while (itEnterWaiter.hasNext()) {
+						JavaThread jThread = (JavaThread)itEnterWaiter.next();
+						try {
+							out.println("\twaiting thread id: " + jThread.getImageThread().getID() 
+									+ " name: " + jThread.getName());
+						} catch (DataUnavailable dae) {
+							out.println("\twaiting thread id: <unknown>");
+						}
+					}
+					Iterator itNotifyWaiter = jMonitor.getNotifyWaiters().iterator();
+					while (itNotifyWaiter.hasNext()) {
+						JavaThread jThread = (JavaThread)itNotifyWaiter.next();
+						try {
+							out.println("\twaiting thread id: " + jThread.getImageThread().getID() 
+									+ " name: " + jThread.getName());
+						} catch (DataUnavailable dae) {
+							out.println("\twaiting thread id: <unknown>");
+						}
+					}
+					
+				} catch(CorruptDataException cde) {
+					out.println("\nwarning, corrupt data encountered during scan for system locks...");
+				}
+				if (null != jObject) {
+					// Remember object monitors (flat or inflated) for later
+					vMonitorsWithLockedObjects.add(jMonitor);
+				}
+			}
+		}
+		
+		out.println("\nLocked objects...");
+		if (0 == vMonitorsWithLockedObjects.size()){
+			out.println("\t...None.");
+			return;
+		}
+		Iterator lockedObjects = vMonitorsWithLockedObjects.iterator();
+		while(lockedObjects.hasNext()){
+			JavaMonitor jMonitor = (JavaMonitor)lockedObjects.next();
+			JavaObject jObject = jMonitor.getObject();
+			try{
+				JavaThread owner = jMonitor.getOwner();
+				String className = "<unknown class>";
+				JavaClass jClass = jObject.getJavaClass();	
+				if (null != jClass) {
+				    className = jClass.getName();
+				}
+				String jObjectID = Long.toHexString(jObject.getID().getAddress());
+				if (null == owner) {
+					out.println(className + "@0x" + jObjectID + " locked by an unknown thread");
+				} else {
+					String owningThreadID = null;
+					try {
+						owningThreadID = owner.getImageThread().getID();
+					} catch (DataUnavailable e) {
+						owningThreadID = Exceptions.getDataUnavailableString();
+					}
+					out.println(className + "@0x" + jObjectID + "\n\tlocked by thread id: "
+								+ owningThreadID + " name: " + owner.getName());
+				}
+			}catch(CorruptDataException cde){
+			}
+		}
+	}
+}

Propchange: incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoLockCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoMmapCommand.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoMmapCommand.java?rev=883384&r1=883383&r2=883384&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoMmapCommand.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoMmapCommand.java Mon Nov 23 15:53:48 2009
@@ -1,50 +1,50 @@
-/*******************************************************************************
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
-package org.apache.kato.katoview.commands.infocommands;
-
-import java.util.HashMap;
-import java.util.Stack;
-import java.util.Iterator;
-
-import javax.tools.diagnostics.image.Image;
-import javax.tools.diagnostics.image.ImageSection;
-
-import org.apache.kato.katoview.Output;
-import org.apache.kato.katoview.commands.Command;
-import org.apache.kato.katoview.commands.helpers.Utils;
-
-
-public class InfoMmapCommand extends Command{
-	
-	public InfoMmapCommand(Output o){
-		super(o, "mmap", "outputs a list of all memory segments in the address space", 
-				"parameters: none\n\n" +
-				"outputs a list all memory segments (ImageSections) " +
-				"in the address space: " +
-				"start address and size"
-				 );
-		child_commands = null;
-	}
-	
-	public void doCommand(Stack args, Image loadedImage, HashMap properties){
-		Iterator imageSections = Utils.getAddressSapceSectionInfo(loadedImage);
-		while(imageSections.hasNext()){
-			ImageSection imageSection = (ImageSection)imageSections.next();
-			long startAddress = imageSection.getBaseAddress().getAddress();
-			long size = imageSection.getSize();
-			out.println("Address: 0x" + Long.toHexString(startAddress) + "   size: 0x" + 
-					Long.toHexString(size) + " (" + size + ")");
-		}
-	}
-}
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.katoview.commands.infocommands;
+
+import java.util.HashMap;
+import java.util.Stack;
+import java.util.Iterator;
+
+import javax.tools.diagnostics.image.Image;
+import javax.tools.diagnostics.image.ImageSection;
+
+import org.apache.kato.katoview.Output;
+import org.apache.kato.katoview.commands.Command;
+import org.apache.kato.katoview.commands.helpers.Utils;
+
+
+public class InfoMmapCommand extends Command{
+	
+	public InfoMmapCommand(Output o){
+		super(o, "mmap", "outputs a list of all memory segments in the address space", 
+				"parameters: none\n\n" +
+				"outputs a list all memory segments (ImageSections) " +
+				"in the address space: " +
+				"start address and size"
+				 );
+		child_commands = null;
+	}
+	
+	public void doCommand(Stack args, Image loadedImage, HashMap properties){
+		Iterator imageSections = Utils.getAddressSapceSectionInfo(loadedImage);
+		while(imageSections.hasNext()){
+			ImageSection imageSection = (ImageSection)imageSections.next();
+			long startAddress = imageSection.getBaseAddress().getAddress();
+			long size = imageSection.getSize();
+			out.println("Address: 0x" + Long.toHexString(startAddress) + "   size: 0x" + 
+					Long.toHexString(size) + " (" + size + ")");
+		}
+	}
+}

Propchange: incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoMmapCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoProcCommand.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoProcCommand.java?rev=883384&r1=883383&r2=883384&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoProcCommand.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoProcCommand.java Mon Nov 23 15:53:48 2009
@@ -1,183 +1,183 @@
-/*******************************************************************************
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
-package org.apache.kato.katoview.commands.infocommands;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Stack;
-import java.util.Properties;
-import java.util.Enumeration;
-
-import javax.tools.diagnostics.image.CorruptData;
-import javax.tools.diagnostics.image.CorruptDataException;
-import javax.tools.diagnostics.image.DataUnavailable;
-import javax.tools.diagnostics.image.Image;
-import javax.tools.diagnostics.image.ImageAddressSpace;
-import javax.tools.diagnostics.image.ImageProcess;
-import javax.tools.diagnostics.image.ImageThread;
-
-import org.apache.kato.katoview.Output;
-import org.apache.kato.katoview.commands.Command;
-import org.apache.kato.katoview.commands.helpers.Exceptions;
-
-
-public class InfoProcCommand extends Command {
-
-	public InfoProcCommand(Output o){
-		super(o, "proc", "displays threads, command line arguments, environment " +
-				"variables, and shared modules of current process",
-				
-				"parameters: none\n\n" +
-				"prints the following information about the current process\n\n" +
-				"  - thread IDs for all its threads\n" +
-				"  - the command line arguments it's using\n" +
-				"  - its environment variables\n\n" +
-				"note: to view the shared modules used by a process, use the " +
-				"\"info sym\" command\n"
-		);
-		child_commands = null;
-	}
-	
-	public void doCommand(Stack args, Image loadedImage, HashMap properties){
-		if (args.isEmpty())
-		{
-			out.print("\n");
-			printAddressSpaceInfo(loadedImage, out);
-			out.print("\n");
-		}
-		else
-		{
-			out.error("\"info proc\" does not take any parameters");
-			return;
-		}
-	}
-	
-	private void printAddressSpaceInfo(Image loadedImage, Output out)
-	{
-		Iterator itAddressSpace;
-		ImageAddressSpace ias;
-		int asnum = 0;
-		
-		itAddressSpace = loadedImage.getAddressSpaces().iterator();
-		while (itAddressSpace.hasNext()) 
-		{
-			ias = (ImageAddressSpace)itAddressSpace.next();
-			out.print("\taddress space # " + asnum + "\n");
-			
-			ImageProcess ip = ias.getCurrentProcess();
-			if (ip == null) 
-			{
-				out.print("\t(No current process in this address space)\n");
-			} 
-			else 
-			{
-					printProcessInfo(ip, out);
-			}
-			asnum++;
-		}
-	}
-	
-	private void printProcessInfo(ImageProcess ip, Output out)
-	{
-		out.print("\n");
-		printThreads(ip, out);
-		out.print("\n");
-		printCommandLine(ip, out);
-		out.print("\n");
-		printEnvironmentVariables(ip, out);
-		out.print("\n");
-	}
-	
-	private void printThreads(ImageProcess ip, Output out)
-	{
-		out.print("\t Native thread IDs for current process:");
-		out.print("\n\t  ");
-		int lineLength = 10; // normal tab plus 2 spaces
-
-		// FIXME: should output architecture (32/64-bit), endianness before threads
-
-		Iterator itThread = ip.getThreads().iterator();
-		while (itThread.hasNext())
-		{
-			Object next = itThread.next();
-			if (next instanceof CorruptData)
-		        continue;
-			ImageThread it = (ImageThread)next;
-
-			try {
-				String threadID = it.getID();
-				if (threadID != null) {
-					if (lineLength + threadID.length() > 80) {
-						out.print("\n\t  ");
-						lineLength = 10;
-					}
-					out.print(it.getID() + " ");
-					lineLength += threadID.length() + 1;
-				}
-			} catch (CorruptDataException e) {
-				out.print(Exceptions.getCorruptDataExceptionString());
-			}
-		}
-	out.print("\n");
-	}
-
-	private void printCommandLine(ImageProcess ip, Output out)
-	{
-		out.print("\t Command line arguments used for current process:");
-		out.print("\n");
-		out.print("\t  ");
-		
-		try {
-			String commandLine = ip.getCommandLine();
-			if (null == commandLine)
-				out.print("<null>");
-			else
-				out.print(commandLine);
-		} catch (CorruptDataException e) {
-			out.print(Exceptions.getCorruptDataExceptionString());
-		} catch (DataUnavailable e) {
-			out.print(Exceptions.getDataUnavailableString());
-		}
-		out.print("\n");
-	}
-	
-	private void printEnvironmentVariables(ImageProcess ip, Output out)
-	{
-		out.print("\t Environment variables for current process:");
-		out.print("\n");
-		
-		Properties variables;
-		try {
-			variables = ip.getEnvironment();
-		} catch (CorruptDataException e) {
-			out.print("\t  " + Exceptions.getCorruptDataExceptionString() + "\n");
-			return;
-		} catch (DataUnavailable e) {
-			out.print("\t  " + Exceptions.getDataUnavailableString() + "\n");
-			return;
-		}
-		
-		Enumeration keys = variables.propertyNames();
-		while (keys.hasMoreElements())
-		{
-			String key = (String)keys.nextElement();
-			printVariableInfo(key, variables.getProperty(key), out);
-		}
-	}
-	
-	private void printVariableInfo(String key, String value, Output out)
-	{
-		out.print("\t  " + key + "=" + value + "\n");
-	}
-}
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.katoview.commands.infocommands;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Stack;
+import java.util.Properties;
+import java.util.Enumeration;
+
+import javax.tools.diagnostics.image.CorruptData;
+import javax.tools.diagnostics.image.CorruptDataException;
+import javax.tools.diagnostics.image.DataUnavailable;
+import javax.tools.diagnostics.image.Image;
+import javax.tools.diagnostics.image.ImageAddressSpace;
+import javax.tools.diagnostics.image.ImageProcess;
+import javax.tools.diagnostics.image.ImageThread;
+
+import org.apache.kato.katoview.Output;
+import org.apache.kato.katoview.commands.Command;
+import org.apache.kato.katoview.commands.helpers.Exceptions;
+
+
+public class InfoProcCommand extends Command {
+
+	public InfoProcCommand(Output o){
+		super(o, "proc", "displays threads, command line arguments, environment " +
+				"variables, and shared modules of current process",
+				
+				"parameters: none\n\n" +
+				"prints the following information about the current process\n\n" +
+				"  - thread IDs for all its threads\n" +
+				"  - the command line arguments it's using\n" +
+				"  - its environment variables\n\n" +
+				"note: to view the shared modules used by a process, use the " +
+				"\"info sym\" command\n"
+		);
+		child_commands = null;
+	}
+	
+	public void doCommand(Stack args, Image loadedImage, HashMap properties){
+		if (args.isEmpty())
+		{
+			out.print("\n");
+			printAddressSpaceInfo(loadedImage, out);
+			out.print("\n");
+		}
+		else
+		{
+			out.error("\"info proc\" does not take any parameters");
+			return;
+		}
+	}
+	
+	private void printAddressSpaceInfo(Image loadedImage, Output out)
+	{
+		Iterator itAddressSpace;
+		ImageAddressSpace ias;
+		int asnum = 0;
+		
+		itAddressSpace = loadedImage.getAddressSpaces().iterator();
+		while (itAddressSpace.hasNext()) 
+		{
+			ias = (ImageAddressSpace)itAddressSpace.next();
+			out.print("\taddress space # " + asnum + "\n");
+			
+			ImageProcess ip = ias.getCurrentProcess();
+			if (ip == null) 
+			{
+				out.print("\t(No current process in this address space)\n");
+			} 
+			else 
+			{
+					printProcessInfo(ip, out);
+			}
+			asnum++;
+		}
+	}
+	
+	private void printProcessInfo(ImageProcess ip, Output out)
+	{
+		out.print("\n");
+		printThreads(ip, out);
+		out.print("\n");
+		printCommandLine(ip, out);
+		out.print("\n");
+		printEnvironmentVariables(ip, out);
+		out.print("\n");
+	}
+	
+	private void printThreads(ImageProcess ip, Output out)
+	{
+		out.print("\t Native thread IDs for current process:");
+		out.print("\n\t  ");
+		int lineLength = 10; // normal tab plus 2 spaces
+
+		// FIXME: should output architecture (32/64-bit), endianness before threads
+
+		Iterator itThread = ip.getThreads().iterator();
+		while (itThread.hasNext())
+		{
+			Object next = itThread.next();
+			if (next instanceof CorruptData)
+		        continue;
+			ImageThread it = (ImageThread)next;
+
+			try {
+				String threadID = it.getID();
+				if (threadID != null) {
+					if (lineLength + threadID.length() > 80) {
+						out.print("\n\t  ");
+						lineLength = 10;
+					}
+					out.print(it.getID() + " ");
+					lineLength += threadID.length() + 1;
+				}
+			} catch (CorruptDataException e) {
+				out.print(Exceptions.getCorruptDataExceptionString());
+			}
+		}
+	out.print("\n");
+	}
+
+	private void printCommandLine(ImageProcess ip, Output out)
+	{
+		out.print("\t Command line arguments used for current process:");
+		out.print("\n");
+		out.print("\t  ");
+		
+		try {
+			String commandLine = ip.getCommandLine();
+			if (null == commandLine)
+				out.print("<null>");
+			else
+				out.print(commandLine);
+		} catch (CorruptDataException e) {
+			out.print(Exceptions.getCorruptDataExceptionString());
+		} catch (DataUnavailable e) {
+			out.print(Exceptions.getDataUnavailableString());
+		}
+		out.print("\n");
+	}
+	
+	private void printEnvironmentVariables(ImageProcess ip, Output out)
+	{
+		out.print("\t Environment variables for current process:");
+		out.print("\n");
+		
+		Properties variables;
+		try {
+			variables = ip.getEnvironment();
+		} catch (CorruptDataException e) {
+			out.print("\t  " + Exceptions.getCorruptDataExceptionString() + "\n");
+			return;
+		} catch (DataUnavailable e) {
+			out.print("\t  " + Exceptions.getDataUnavailableString() + "\n");
+			return;
+		}
+		
+		Enumeration keys = variables.propertyNames();
+		while (keys.hasMoreElements())
+		{
+			String key = (String)keys.nextElement();
+			printVariableInfo(key, variables.getProperty(key), out);
+		}
+	}
+	
+	private void printVariableInfo(String key, String value, Output out)
+	{
+		out.print("\t  " + key + "=" + value + "\n");
+	}
+}

Propchange: incubator/kato/trunk/org.apache.kato/kato.tools.katoview/src/main/java/org/apache/kato/katoview/commands/infocommands/InfoProcCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native