// This program will reflect(show) the details (like package , imports , superclass, interfaces, fields, constructor, methods ) of a compiled ".class" file.
//Note :The ".class" file needs to be in the same directory of this program for this program to dump the class.
import java.util.*;
import java.awt.*;
import java.lang.reflect.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.io.*;
import java.util.*;
import javax.swing.filechooser.*;
class ClassDescriber extends JFrame implements ActionListener {
private JPanel pnlBrowse,pnlTextEditor,pnlButtons;
private JButton btnload,btnSave,btnSaveExit,btnCancel,btnExplore;
private JTextField txtName;
private JTextArea txtEditor;
private JLabel lblname;
private JScrollPane scrollpane;
private File f;
private static String filename;
public ClassDescriber(String title){
super(title);
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,500);
setVisible(true);
addComponent();
}
public void addComponent(){
panelBrowse();
panelTextEditor();
panelButtons();
}
public static String getFileName(){
return filename;
}
public void setFileName(){
filename = txtName.getText().trim();
}
public void panelBrowse(){
pnlBrowse=new JPanel();
add(pnlBrowse,BorderLayout.NORTH);
pnlBrowse.setLayout(new FlowLayout());
lblname=new JLabel("Choose File Name: ");
pnlBrowse.add(lblname);
txtName=new JTextField(" ",30);
pnlBrowse.add(txtName);
btnExplore=new JButton("...");
pnlBrowse.add(btnExplore);
pnlBrowse.setBorder(BorderFactory.createEmptyBorder());
btnExplore.addActionListener(this);
}
public void panelTextEditor(){
pnlTextEditor=new JPanel();
add(pnlTextEditor,BorderLayout.CENTER);
pnlTextEditor.setLayout(new BorderLayout());
txtEditor=new JTextArea();
scrollpane = new JScrollPane(txtEditor);
pnlTextEditor.add(scrollpane,BorderLayout.CENTER);
pnlTextEditor.setBorder(BorderFactory.createEmptyBorder());
}
public void panelButtons(){
pnlButtons=new JPanel();
add(pnlButtons,BorderLayout.SOUTH);
pnlButtons.setLayout(new FlowLayout());
btnload=new JButton("Dump");
pnlButtons.add(btnload);
btnCancel= new JButton("Cancel");
pnlButtons.add(btnCancel);
pnlButtons.setBorder(BorderFactory.createEmptyBorder());
btnload.addActionListener(this);
btnCancel.addActionListener(this);
}
public void fileLoad(){}
public void print(JTextArea txteditor){}
public void actionPerformed(ActionEvent ae){
String cmd=ae.getActionCommand();
switch(cmd){
case "Dump":
setFileName();
fileLoad();
print(txtEditor);
break;
case "Cancel":
System.exit(0);
break;
case "...":
JFileChooser browse;
browse = new JFileChooser();
browse.setFileFilter(new FileNameExtensionFilter("class Files","class"));
browse.showOpenDialog(this);
try{
f = browse.getSelectedFile();
txtName.setText(f.getName());
}catch(Exception e){}
}
}
}
class DumpClass extends ClassDescriber {
private String pkgName,modifiers,superclass,name,returnType;
Collection<String> imports;
Collection<String> interfaces;
Collection<String> constructors;
Collection<String> exceptions;
Collection<String> methods;
Collection<String> fields;
Class[] arguments;
String filename;
Class c;
public DumpClass(String title){
super(title);
}
public void fileLoad(){
filename = "";
imports = new TreeSet<>();
interfaces = new TreeSet<>();
constructors = new TreeSet<>();
exceptions = new TreeSet<>();
methods = new TreeSet<>();
fields = new TreeSet<>();
filename = ClassDescriber.getFileName();
if(filename.contains("."))
filename = filename.substring(0,filename.indexOf("."));
try{
c = Class.forName(filename);
name = c.getName();
}catch(ClassNotFoundException e){
System.out.println ("Class not found");
}
try{
pkgName = c.getPackage().toString();
if(pkgName.contains(","))
pkgName = pkgName.substring(0,pkgName.indexOf(",")) + ";";
}catch(Exception e){
pkgName = "";
}
try{
String temp = c.getSuperclass().toString();
System.out.println ("temp" + temp);
if(!temp.contains("Object")){
superclass = temp;
superclass = checkMsg(superclass);
storeImports(superclass);
if(temp.contains("class"))
superclass = temp.substring(6);
if(temp.contains("."))
superclass = " extends " + temp.substring(temp.lastIndexOf(".")+1);
else
superclass = " extends " + superclass;
}
else{
superclass = "";
}
}catch(Exception e){
superclass = "";
}
try{
storeInterfaces();
}catch(Exception e){}
try{
storeConstructors();
}catch(Exception e){}
try{
storeMethods();
}catch(Exception e){}
try{
storeFields();
}catch(Exception e){}
Scanner input;
}
public void storeImports(String importss){
if(importss.contains(".")){
if(importss.contains("[]")){
importss = importss.replace("[]" , "");
}
if( importss.contains("class")){
importss = importss.substring(6,importss.length());
}
if(importss.contains("[")){
importss = importss.substring(2,importss.length());
}
if(importss.contains("interface") ){
importss = importss.substring(10,importss.length());
}
if( importss.contains(";")){
importss = importss.substring(0,importss.length()-1);
}
imports.add("import "+ importss + ";");
}
}
public void storeInterfaces(){
Object[] interfacess = c.getInterfaces();
for(int i = 0 ; i < interfacess.length ;i++){
String temp = interfacess[i].toString();
temp = checkMsg(temp);
storeImports(temp);
interfaces.add(temp.substring(temp.lastIndexOf(".")+1));
}
}
public void storeConstructors(){
Constructor[] cons = c.getDeclaredConstructors();
for(int i = 0 ; i < cons.length ; i++){
modifiers = Modifier.toString(cons[i].getModifiers());
// name = cons[i].getName().substring((cons[i].getName().lastIndexOf(".")+1));
arguments = cons[i].getParameterTypes();
String m = "" + modifiers + " " + name + "(";
String temp;
for(Class a : arguments ){
temp = a.getName();
temp = checkMsg(temp);
storeImports(temp);
m+=temp.substring(temp.lastIndexOf(".")+1) + ",";
}
if(m.contains(",")){
m = m.substring(0,m.lastIndexOf(","));
}
m+=");";
constructors.add(m);
}
}
public void storeMethods(){
Method[] method = c.getDeclaredMethods();
Object[] exception ;
String returnType;
for(int i = 0 ; i < method.length ; i++){
modifiers = Modifier.toString(method[i].getModifiers());
returnType = method[i].getGenericReturnType().toString();
returnType = checkMsg(returnType);
storeImports(returnType);
returnType = returnType.substring(returnType.lastIndexOf(".")+1);
String methodName = method[i].getName().substring((method[i].getName().lastIndexOf(".")+1));
arguments = method[i].getParameterTypes();
String m = ""+Modifier.toString(method[i].getModifiers()) + " " +returnType + " "+ methodName + "(";
String temp;
for(Class a : arguments ){
temp = a.getName();
temp = checkMsg(temp);
storeImports(temp);
m += temp.substring(temp.lastIndexOf(".")+1) + " ,";
}
if(m.endsWith(",")){
m = m.substring(0,m.length()-1);
}
m += ")";
exception = method[i].getExceptionTypes();
if(exception.length > 0)
m += " throws " ;
for(Object a : exception ){
m += a.toString().substring((a.toString().lastIndexOf(".")+1)) + " ,";
}
if(m.endsWith(",")){
m = m.substring(0,m.length()-2);
}
m += ";";
methods.add(m);
}
}
public void storeFields(){
Field[] field = c.getDeclaredFields();
String typeName;
for(int i = 0 ; i < field.length ; i++){
modifiers = Modifier.toString(field[i].getModifiers());
typeName = field[i].getType().getName();
typeName = checkMsg(typeName);
storeImports(typeName);
typeName = typeName.substring(typeName.lastIndexOf(".")+1);
String fieldName = field[i].getName().substring((field[i].getName().lastIndexOf(".")+1));
String m = modifiers + " " + typeName + " " + fieldName + "; ";
fields.add(m);
}
}
public void print(JTextArea txteditor){
try{
modifiers = Modifier.toString(c.getModifiers());
}catch(NullPointerException npe){
modifiers = "";
}
String msg = "";
if(pkgName.length() > 0)
msg += pkgName + "\n" + "\n";
for(String e: imports){
msg += e + "\n";
}
msg += "\n"+"\n";
msg +=modifiers + " class " + name + superclass;
if(interfaces.size() > 0)
msg += " implements ";
for(String e: interfaces){
msg += e + ",";
}
if(msg.contains(","))
msg = msg.substring(0,msg.lastIndexOf(","));
msg += "{" + "\n" +"\n";
for(String e: fields){
msg += "\t"+ e + "\n";
}
msg += "\n" + "\n";
for(String e: constructors){
msg += "\t" + e + "\n";
}
msg += "\n" + "\n";
for(String e: methods){
msg += "\t" + e + "\n";
}
msg +="}";
txteditor.setText(msg);
}
public String checkMsg(String msg){
if(msg.contains(";")){
msg = msg.replaceAll(";","");
}
if(msg.contains("["))
msg = msg.concat("[]");
while(msg.contains("[B")||msg.contains("[I") || msg.contains("[C")){
if(msg.contains("[B")){
msg = msg.replace("[B","byte[]");
}
if(msg.contains("[C")){
msg = msg.replace("[C","char[]");
}
if(msg.contains("[I")){
msg = msg.replace("[I","int[]");
}
}
return msg;
}
public static void main (String[] args) {
DumpClass textEditor = new DumpClass("Dumpclass");
}
}
//Note :The ".class" file needs to be in the same directory of this program for this program to dump the class.
The GUI Frame for Dumpclass
An example of the program for the Dump class defined in the program
import java.util.*;
import java.awt.*;
import java.lang.reflect.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.io.*;
import java.util.*;
import javax.swing.filechooser.*;
class ClassDescriber extends JFrame implements ActionListener {
private JPanel pnlBrowse,pnlTextEditor,pnlButtons;
private JButton btnload,btnSave,btnSaveExit,btnCancel,btnExplore;
private JTextField txtName;
private JTextArea txtEditor;
private JLabel lblname;
private JScrollPane scrollpane;
private File f;
private static String filename;
public ClassDescriber(String title){
super(title);
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,500);
setVisible(true);
addComponent();
}
public void addComponent(){
panelBrowse();
panelTextEditor();
panelButtons();
}
public static String getFileName(){
return filename;
}
public void setFileName(){
filename = txtName.getText().trim();
}
public void panelBrowse(){
pnlBrowse=new JPanel();
add(pnlBrowse,BorderLayout.NORTH);
pnlBrowse.setLayout(new FlowLayout());
lblname=new JLabel("Choose File Name: ");
pnlBrowse.add(lblname);
txtName=new JTextField(" ",30);
pnlBrowse.add(txtName);
btnExplore=new JButton("...");
pnlBrowse.add(btnExplore);
pnlBrowse.setBorder(BorderFactory.createEmptyBorder());
btnExplore.addActionListener(this);
}
public void panelTextEditor(){
pnlTextEditor=new JPanel();
add(pnlTextEditor,BorderLayout.CENTER);
pnlTextEditor.setLayout(new BorderLayout());
txtEditor=new JTextArea();
scrollpane = new JScrollPane(txtEditor);
pnlTextEditor.add(scrollpane,BorderLayout.CENTER);
pnlTextEditor.setBorder(BorderFactory.createEmptyBorder());
}
public void panelButtons(){
pnlButtons=new JPanel();
add(pnlButtons,BorderLayout.SOUTH);
pnlButtons.setLayout(new FlowLayout());
btnload=new JButton("Dump");
pnlButtons.add(btnload);
btnCancel= new JButton("Cancel");
pnlButtons.add(btnCancel);
pnlButtons.setBorder(BorderFactory.createEmptyBorder());
btnload.addActionListener(this);
btnCancel.addActionListener(this);
}
public void fileLoad(){}
public void print(JTextArea txteditor){}
public void actionPerformed(ActionEvent ae){
String cmd=ae.getActionCommand();
switch(cmd){
case "Dump":
setFileName();
fileLoad();
print(txtEditor);
break;
case "Cancel":
System.exit(0);
break;
case "...":
JFileChooser browse;
browse = new JFileChooser();
browse.setFileFilter(new FileNameExtensionFilter("class Files","class"));
browse.showOpenDialog(this);
try{
f = browse.getSelectedFile();
txtName.setText(f.getName());
}catch(Exception e){}
}
}
}
class DumpClass extends ClassDescriber {
private String pkgName,modifiers,superclass,name,returnType;
Collection<String> imports;
Collection<String> interfaces;
Collection<String> constructors;
Collection<String> exceptions;
Collection<String> methods;
Collection<String> fields;
Class[] arguments;
String filename;
Class c;
public DumpClass(String title){
super(title);
}
public void fileLoad(){
filename = "";
imports = new TreeSet<>();
interfaces = new TreeSet<>();
constructors = new TreeSet<>();
exceptions = new TreeSet<>();
methods = new TreeSet<>();
fields = new TreeSet<>();
filename = ClassDescriber.getFileName();
if(filename.contains("."))
filename = filename.substring(0,filename.indexOf("."));
try{
c = Class.forName(filename);
name = c.getName();
}catch(ClassNotFoundException e){
System.out.println ("Class not found");
}
try{
pkgName = c.getPackage().toString();
if(pkgName.contains(","))
pkgName = pkgName.substring(0,pkgName.indexOf(",")) + ";";
}catch(Exception e){
pkgName = "";
}
try{
String temp = c.getSuperclass().toString();
System.out.println ("temp" + temp);
if(!temp.contains("Object")){
superclass = temp;
superclass = checkMsg(superclass);
storeImports(superclass);
if(temp.contains("class"))
superclass = temp.substring(6);
if(temp.contains("."))
superclass = " extends " + temp.substring(temp.lastIndexOf(".")+1);
else
superclass = " extends " + superclass;
}
else{
superclass = "";
}
}catch(Exception e){
superclass = "";
}
try{
storeInterfaces();
}catch(Exception e){}
try{
storeConstructors();
}catch(Exception e){}
try{
storeMethods();
}catch(Exception e){}
try{
storeFields();
}catch(Exception e){}
Scanner input;
}
public void storeImports(String importss){
if(importss.contains(".")){
if(importss.contains("[]")){
importss = importss.replace("[]" , "");
}
if( importss.contains("class")){
importss = importss.substring(6,importss.length());
}
if(importss.contains("[")){
importss = importss.substring(2,importss.length());
}
if(importss.contains("interface") ){
importss = importss.substring(10,importss.length());
}
if( importss.contains(";")){
importss = importss.substring(0,importss.length()-1);
}
imports.add("import "+ importss + ";");
}
}
public void storeInterfaces(){
Object[] interfacess = c.getInterfaces();
for(int i = 0 ; i < interfacess.length ;i++){
String temp = interfacess[i].toString();
temp = checkMsg(temp);
storeImports(temp);
interfaces.add(temp.substring(temp.lastIndexOf(".")+1));
}
}
public void storeConstructors(){
Constructor[] cons = c.getDeclaredConstructors();
for(int i = 0 ; i < cons.length ; i++){
modifiers = Modifier.toString(cons[i].getModifiers());
// name = cons[i].getName().substring((cons[i].getName().lastIndexOf(".")+1));
arguments = cons[i].getParameterTypes();
String m = "" + modifiers + " " + name + "(";
String temp;
for(Class a : arguments ){
temp = a.getName();
temp = checkMsg(temp);
storeImports(temp);
m+=temp.substring(temp.lastIndexOf(".")+1) + ",";
}
if(m.contains(",")){
m = m.substring(0,m.lastIndexOf(","));
}
m+=");";
constructors.add(m);
}
}
public void storeMethods(){
Method[] method = c.getDeclaredMethods();
Object[] exception ;
String returnType;
for(int i = 0 ; i < method.length ; i++){
modifiers = Modifier.toString(method[i].getModifiers());
returnType = method[i].getGenericReturnType().toString();
returnType = checkMsg(returnType);
storeImports(returnType);
returnType = returnType.substring(returnType.lastIndexOf(".")+1);
String methodName = method[i].getName().substring((method[i].getName().lastIndexOf(".")+1));
arguments = method[i].getParameterTypes();
String m = ""+Modifier.toString(method[i].getModifiers()) + " " +returnType + " "+ methodName + "(";
String temp;
for(Class a : arguments ){
temp = a.getName();
temp = checkMsg(temp);
storeImports(temp);
m += temp.substring(temp.lastIndexOf(".")+1) + " ,";
}
if(m.endsWith(",")){
m = m.substring(0,m.length()-1);
}
m += ")";
exception = method[i].getExceptionTypes();
if(exception.length > 0)
m += " throws " ;
for(Object a : exception ){
m += a.toString().substring((a.toString().lastIndexOf(".")+1)) + " ,";
}
if(m.endsWith(",")){
m = m.substring(0,m.length()-2);
}
m += ";";
methods.add(m);
}
}
public void storeFields(){
Field[] field = c.getDeclaredFields();
String typeName;
for(int i = 0 ; i < field.length ; i++){
modifiers = Modifier.toString(field[i].getModifiers());
typeName = field[i].getType().getName();
typeName = checkMsg(typeName);
storeImports(typeName);
typeName = typeName.substring(typeName.lastIndexOf(".")+1);
String fieldName = field[i].getName().substring((field[i].getName().lastIndexOf(".")+1));
String m = modifiers + " " + typeName + " " + fieldName + "; ";
fields.add(m);
}
}
public void print(JTextArea txteditor){
try{
modifiers = Modifier.toString(c.getModifiers());
}catch(NullPointerException npe){
modifiers = "";
}
String msg = "";
if(pkgName.length() > 0)
msg += pkgName + "\n" + "\n";
for(String e: imports){
msg += e + "\n";
}
msg += "\n"+"\n";
msg +=modifiers + " class " + name + superclass;
if(interfaces.size() > 0)
msg += " implements ";
for(String e: interfaces){
msg += e + ",";
}
if(msg.contains(","))
msg = msg.substring(0,msg.lastIndexOf(","));
msg += "{" + "\n" +"\n";
for(String e: fields){
msg += "\t"+ e + "\n";
}
msg += "\n" + "\n";
for(String e: constructors){
msg += "\t" + e + "\n";
}
msg += "\n" + "\n";
for(String e: methods){
msg += "\t" + e + "\n";
}
msg +="}";
txteditor.setText(msg);
}
public String checkMsg(String msg){
if(msg.contains(";")){
msg = msg.replaceAll(";","");
}
if(msg.contains("["))
msg = msg.concat("[]");
while(msg.contains("[B")||msg.contains("[I") || msg.contains("[C")){
if(msg.contains("[B")){
msg = msg.replace("[B","byte[]");
}
if(msg.contains("[C")){
msg = msg.replace("[C","char[]");
}
if(msg.contains("[I")){
msg = msg.replace("[I","int[]");
}
}
return msg;
}
public static void main (String[] args) {
DumpClass textEditor = new DumpClass("Dumpclass");
}
}
No comments:
Post a Comment