1 16 package com.google.gwt.dev.jjs.ast; 17 18 import com.google.gwt.dev.jjs.InternalCompilerException; 19 import com.google.gwt.dev.jjs.SourceInfo; 20 21 import java.util.ArrayList ; 22 import java.util.List ; 23 24 27 public class JMethod extends JNode implements HasEnclosingType, HasName, 28 HasType, HasSettableType, CanBeAbstract, CanBeFinal, CanBeSetFinal, 29 CanBeNative, CanBeStatic { 30 31 public final JBlock body; 32 public final ArrayList locals = new ArrayList (); 33 38 public final List overrides = new ArrayList (); 39 public final ArrayList params = new ArrayList (); 40 public final ArrayList thrownExceptions = new ArrayList (); 41 private final JReferenceType enclosingType; 42 private final boolean isAbstract; 43 private boolean isFinal; 44 private final boolean isPrivate; 45 private final boolean isStatic; 46 private final String name; 47 private ArrayList originalParamTypes; 48 private JType returnType; 49 50 53 public JMethod(JProgram program, SourceInfo info, String name, 54 JReferenceType enclosingType, JType returnType, boolean isAbstract, 55 boolean isStatic, boolean isFinal, boolean isPrivate) { 56 super(program, info); 57 this.name = name; 58 this.enclosingType = enclosingType; 59 this.returnType = returnType; 60 this.body = new JBlock(program, info); 61 this.isAbstract = isAbstract; 62 this.isStatic = isStatic; 63 this.isFinal = isFinal; 64 this.isPrivate = isPrivate; 65 } 66 67 public void freezeParamTypes() { 68 if (originalParamTypes != null) { 69 throw new InternalCompilerException("Param types already frozen"); 70 } 71 originalParamTypes = new ArrayList (); 72 for (int i = 0; i < params.size(); ++i) { 73 JParameter param = (JParameter) params.get(i); 74 originalParamTypes.add(param.getType()); 75 } 76 } 77 78 public JReferenceType getEnclosingType() { 79 return enclosingType; 80 } 81 82 public String getName() { 83 return name; 84 } 85 86 public List getOriginalParamTypes() { 87 if (originalParamTypes == null) { 88 return null; 89 } 90 return originalParamTypes; 91 } 92 93 public JType getType() { 94 return returnType; 95 } 96 97 public boolean isAbstract() { 98 return isAbstract; 99 } 100 101 public boolean isFinal() { 102 return isFinal; 103 } 104 105 public boolean isNative() { 106 return false; 107 } 108 109 public boolean isPrivate() { 110 return isPrivate; 111 } 112 113 public boolean isStatic() { 114 return isStatic; 115 } 116 117 public void setFinal(boolean b) { 118 isFinal = b; 119 } 120 121 public void setType(JType newType) { 122 returnType = newType; 123 } 124 125 public void traverse(JVisitor visitor, Context ctx) { 126 if (visitor.visit(this, ctx)) { 127 visitor.accept(params); 128 visitor.accept(locals); 129 visitor.accept(body); 130 } 131 visitor.endVisit(this, ctx); 132 } 133 134 } 135 | Popular Tags |