/*
C++ Class for reading info
from a Java Class file
AST 9/97
*/
#ifndef __JAVACLASSFILE_H__
#define __JAVACLASSFILE_H__
#include "CommonTypes.h"
#include "JavaConstPool.h"
class JavaClassFile
{
public:
// constructors/destructor
JavaClassFile();
JavaClassFile( const string &crstrFile );
virtual ~JavaClassFile();
// public methods
bool Open( const string &crstrFile );
bool Close();
bool IsOpen() const ;
WORD GetMinorVersion() const;
WORD GetMajorVersion() const;
wstring GetClassName();
wstring GetSuperClassName();
WORD GetClassAccess();
WORD GetInterfaceCount();
wstring GetInterfaceName( WORD wIndex );
enum
{
ACC_PUBLIC = 0x01,
ACC_PRIVATE = 0x02,
ACC_PROTECTED = 0x04,
ACC_STATIC = 0x08,
ACC_FINAL = 0x10,
ACC_SYNCHRONIZED = 0x20,
ACC_VOLATILE = 0x40,
ACC_TRANSIENT = 0x80,
ACC_NATIVE = 0x100,
ACC_INTERFACE = 0x200,
ACC_ABSTRACT = 0x400
};
WORD GetFieldCount();
wstring GetFieldName( WORD wIndex );
wstring GetFieldType( WORD wIndex );
WORD GetFieldAccess( WORD wIndex );
WORD GetMethodCount();
wstring GetMethodName( WORD wIndex );
WORD GetMethodArgCount( WORD wIndex );
wstring GetMethodArgType(
WORD wIndex, WORD wArgIndex );
wstring GetMethodReturnType(
WORD wIndex );
WORD GetMethodAccess( WORD wIndex );
protected:
// implementation details
bool IsValidClassFile() const;
DWORD ReadDWORD(DWORD dwIndex) const;
WORD ReadWORD(DWORD dwIndex) const;
BYTE *m_pbClassData;
// constant pool
bool m_bLoadedCP;
JavaConstPool *m_pConstPool;
friend class JavaConstPool;
WORD GetConstantPoolCount() const;
wstring GetConstantPoolEntry(
WORD wIndex );
// index helper functions
DWORD GetFieldDataIndex(WORD wIndex);
DWORD GetMethodDataIndex(WORD wIndex);
inline
DWORD GetHeaderSize()
{ return (sizeof(DWORD) +
(sizeof(WORD) * 3)); }
inline DWORD GetConstPoolSize()
{ return m_pConstPool->GetSize(); }
// datatype helper functions
wstring DecodeDataType(
const wstring &crwstrRawType);
WORD DataTypeLength(
const wstring &crwstrType );
};
#endif
/* End of File */