PageRenderTime 45ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/jEdit/tags/jedit-4-3-pre5/bsh/BSHFormalParameters.java

#
Java | 115 lines | 57 code | 18 blank | 40 comment | 9 complexity | e4bc2d98d7523d63eede718945f946a9 MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0, Apache-2.0, LGPL-2.0, LGPL-3.0, GPL-2.0, CC-BY-SA-3.0, LGPL-2.1, GPL-3.0, MPL-2.0-no-copyleft-exception, IPL-1.0
  1. /*****************************************************************************
  2. * *
  3. * This file is part of the BeanShell Java Scripting distribution. *
  4. * Documentation and updates may be found at http://www.beanshell.org/ *
  5. * *
  6. * Sun Public License Notice: *
  7. * *
  8. * The contents of this file are subject to the Sun Public License Version *
  9. * 1.0 (the "License"); you may not use this file except in compliance with *
  10. * the License. A copy of the License is available at http://www.sun.com *
  11. * *
  12. * The Original Code is BeanShell. The Initial Developer of the Original *
  13. * Code is Pat Niemeyer. Portions created by Pat Niemeyer are Copyright *
  14. * (C) 2000. All Rights Reserved. *
  15. * *
  16. * GNU Public License Notice: *
  17. * *
  18. * Alternatively, the contents of this file may be used under the terms of *
  19. * the GNU Lesser General Public License (the "LGPL"), in which case the *
  20. * provisions of LGPL are applicable instead of those above. If you wish to *
  21. * allow use of your version of this file only under the terms of the LGPL *
  22. * and not to allow others to use your version of this file under the SPL, *
  23. * indicate your decision by deleting the provisions above and replace *
  24. * them with the notice and other provisions required by the LGPL. If you *
  25. * do not delete the provisions above, a recipient may use your version of *
  26. * this file under either the SPL or the LGPL. *
  27. * *
  28. * Patrick Niemeyer (pat@pat.net) *
  29. * Author of Learning Java, O'Reilly & Associates *
  30. * http://www.pat.net/~pat/ *
  31. * *
  32. *****************************************************************************/
  33. package bsh;
  34. class BSHFormalParameters extends SimpleNode
  35. {
  36. private String [] paramNames;
  37. /**
  38. For loose type parameters the paramTypes are null.
  39. */
  40. // unsafe caching of types
  41. Class [] paramTypes;
  42. int numArgs;
  43. String [] typeDescriptors;
  44. BSHFormalParameters(int id) { super(id); }
  45. void insureParsed()
  46. {
  47. if ( paramNames != null )
  48. return;
  49. this.numArgs = jjtGetNumChildren();
  50. String [] paramNames = new String[numArgs];
  51. for(int i=0; i<numArgs; i++)
  52. {
  53. BSHFormalParameter param = (BSHFormalParameter)jjtGetChild(i);
  54. paramNames[i] = param.name;
  55. }
  56. this.paramNames = paramNames;
  57. }
  58. public String [] getParamNames() {
  59. insureParsed();
  60. return paramNames;
  61. }
  62. public String [] getTypeDescriptors(
  63. CallStack callstack, Interpreter interpreter, String defaultPackage )
  64. {
  65. if ( typeDescriptors != null )
  66. return typeDescriptors;
  67. insureParsed();
  68. String [] typeDesc = new String[numArgs];
  69. for(int i=0; i<numArgs; i++)
  70. {
  71. BSHFormalParameter param = (BSHFormalParameter)jjtGetChild(i);
  72. typeDesc[i] = param.getTypeDescriptor(
  73. callstack, interpreter, defaultPackage );
  74. }
  75. this.typeDescriptors = typeDesc;
  76. return typeDesc;
  77. }
  78. /**
  79. Evaluate the types.
  80. Note that type resolution does not require the interpreter instance.
  81. */
  82. public Object eval( CallStack callstack, Interpreter interpreter )
  83. throws EvalError
  84. {
  85. if ( paramTypes != null )
  86. return paramTypes;
  87. insureParsed();
  88. Class [] paramTypes = new Class[numArgs];
  89. for(int i=0; i<numArgs; i++)
  90. {
  91. BSHFormalParameter param = (BSHFormalParameter)jjtGetChild(i);
  92. paramTypes[i] = (Class)param.eval( callstack, interpreter );
  93. }
  94. this.paramTypes = paramTypes;
  95. return paramTypes;
  96. }
  97. }