at.dms.kjc
Class JMethodDeclaration

java.lang.Object
  |
  +--at.dms.util.Utils
        |
        +--at.dms.compiler.Phylum
              |
              +--at.dms.kjc.JPhylum
                    |
                    +--at.dms.kjc.JMemberDeclaration
                          |
                          +--at.dms.kjc.JMethodDeclaration
All Implemented Interfaces:
Constants, Constants
Direct Known Subclasses:
JConstructorDeclaration, JInitializerDeclaration

public class JMethodDeclaration
extends JMemberDeclaration

This class represents a java class in the syntax tree.


Fields inherited from class at.dms.kjc.JMemberDeclaration
ACCESSOR_PREFIX
 
Fields inherited from class at.dms.util.Utils
DBG_LEVEL_HIGH, DBG_LEVEL_LOW, DBG_LEVEL_NO
 
Fields inherited from interface at.dms.kjc.Constants
CMP_VERSION, JAV_CLASS, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_THIS, JAV_THROWABLE, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LE, OPE_LNOT, OPE_LT, OPE_MINUS, OPE_NE, OPE_PERCENT, OPE_PLUS, OPE_POSTDEC, OPE_POSTINC, OPE_PREDEC, OPE_PREINC, OPE_SIMPLE, OPE_SL, OPE_SLASH, OPE_SR, OPE_STAR, TID_ARRAY, TID_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_SHORT, TID_VOID
 
Fields inherited from interface at.dms.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_NBR_FLAGS, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_EXCEPTIONS, ATT_GENERIC, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_SOURCEFILE, ATT_SYNTHETIC, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_wide, opc_xxxunusedxxx, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Constructor Summary
JMethodDeclaration(TokenReference where, int modifiers, CType returnType, java.lang.String ident, JFormalParameter[] parameters, CClassType[] exceptions, JBlock body, JavadocComment javadoc, JavaStyleComment[] comments)
          Construct a node in the parsing tree.
 
Method Summary
 void accept(KjcVisitor p)
          Accepts the specified visitor
protected  void checkAccess(CClassContext context, CMethod superMethod)
          Checks whether access modifiers are valid with resprect to the method that it overrides; an overridden method cannot be more strict than the method that it overries.
protected  void checkBody(CClassContext context)
          Checks if the method is valid; if it has a body, it cannot occur in an interface, unless it is an initializer.
 CSourceMethod checkInterface(CClassContext context)
          Second pass (quick), check interface looks good.
protected  void checkOverriding(CClassContext context, CMethod superMethod)
           
 void checkStatement(CClassContext context)
          Check expression and evaluate and alter context.
 void genCode(CodeSequence code)
          Generates a sequence of bytecodes
 JBlock getBody()
           
 CClassType[] getExceptions()
           
 java.lang.String getIdent()
           
 int getModifiers()
           
 JFormalParameter[] getParameters()
           
 CType getReturnType()
           
 void setBody(JBlock body)
           
 
Methods inherited from class at.dms.kjc.JMemberDeclaration
checkOrder, genComments, getCClass, getField, getMethod, getModifierName, isDeprecated, isSynthetic, setInterface, setSynthetic
 
Methods inherited from class at.dms.kjc.JPhylum
check, check, check, check, fail
 
Methods inherited from class at.dms.compiler.Phylum
getTokenReference, setTokenReference
 
Methods inherited from class at.dms.util.Utils
assert, assert, fail, fail, hasFlag, hasMoreThanOneFlag, hasOtherFlags, splitQualifiedName, splitQualifiedName, vectorToArray, vectorToIntArray
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JMethodDeclaration

public JMethodDeclaration(TokenReference where,
                          int modifiers,
                          CType returnType,
                          java.lang.String ident,
                          JFormalParameter[] parameters,
                          CClassType[] exceptions,
                          JBlock body,
                          JavadocComment javadoc,
                          JavaStyleComment[] comments)
Construct a node in the parsing tree. This method is directly called by the parser.
Parameters:
where - the line of this node in the source code
parent - parent in which this methodclass is built
modifiers - list of modifiers
returnType - the return type of this method
ident - the name of this method
parameters - the parameters of this method
exceptions - the exceptions throw by this method
body - the body of this method
javadoc - is this method deprecated
Method Detail

getReturnType

public CType getReturnType()

getParameters

public JFormalParameter[] getParameters()

getExceptions

public CClassType[] getExceptions()

setBody

public void setBody(JBlock body)

getBody

public JBlock getBody()

getModifiers

public int getModifiers()

getIdent

public java.lang.String getIdent()

checkInterface

public CSourceMethod checkInterface(CClassContext context)
                             throws PositionedError
Second pass (quick), check interface looks good. Exceptions are not allowed here, this pass is just a tuning pass in order to create informations about exported elements such as Classes, Interfaces, Methods, Constructors and Fields
Returns:
true iff sub tree is correct enough to check code.
Throws:
PositionedError - An error with reference to the source file.

checkStatement

public void checkStatement(CClassContext context)
                    throws PositionedError
Check expression and evaluate and alter context.
Parameters:
context - the actual context of analyse.
Returns:
a pure java expression including promote node.
Throws:
PositionedError - Error catched as soon as possible.

checkOverriding

protected void checkOverriding(CClassContext context,
                               CMethod superMethod)
                        throws PositionedError

checkAccess

protected void checkAccess(CClassContext context,
                           CMethod superMethod)
                    throws PositionedError
Checks whether access modifiers are valid with resprect to the method that it overrides; an overridden method cannot be more strict than the method that it overries. Note from EJB: A private method cannot be overriddden at all. Is this check correct?

checkBody

protected void checkBody(CClassContext context)
                  throws PositionedError
Checks if the method is valid; if it has a body, it cannot occur in an interface, unless it is an initializer. And if it is native, it can't be abstract.

accept

public void accept(KjcVisitor p)
Accepts the specified visitor
Overrides:
accept in class JMemberDeclaration
Parameters:
p - the visitor

genCode

public void genCode(CodeSequence code)
Generates a sequence of bytecodes
Parameters:
code - the code list