UndefinedAccessor.java

  1. /***** BEGIN LICENSE BLOCK *****
  2.  * Version: EPL 1.0/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Eclipse Public
  5.  * License Version 1.0 (the "License"); you may not use this file
  6.  * except in compliance with the License. You may obtain a copy of
  7.  * the License at http://www.eclipse.org/legal/epl-v10.html
  8.  *
  9.  * Software distributed under the License is distributed on an "AS
  10.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  11.  * implied. See the License for the specific language governing
  12.  * rights and limitations under the License.
  13.  *
  14.  * Copyright (C) 2002 Anders Bengtsson <ndrsbngtssn@yahoo.se>
  15.  * Copyright (C) 2002-2004 Jan Arne Petersen <jpetersen@uni-bonn.de>
  16.  *
  17.  * Alternatively, the contents of this file may be used under the terms of
  18.  * either of the GNU General Public License Version 2 or later (the "GPL"),
  19.  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  20.  * in which case the provisions of the GPL or the LGPL are applicable instead
  21.  * of those above. If you wish to allow use of your version of this file only
  22.  * under the terms of either the GPL or the LGPL, and not to allow others to
  23.  * use your version of this file under the terms of the EPL, indicate your
  24.  * decision by deleting the provisions above and replace them with the notice
  25.  * and other provisions required by the GPL or the LGPL. If you do not delete
  26.  * the provisions above, a recipient may use your version of this file under
  27.  * the terms of any one of the EPL, the GPL or the LGPL.
  28.  ***** END LICENSE BLOCK *****/
  29. package org.jruby.internal.runtime;

  30. import org.jruby.Ruby;
  31. import org.jruby.common.IRubyWarnings.ID;
  32. import org.jruby.runtime.IAccessor;
  33. import org.jruby.runtime.builtin.IRubyObject;

  34. /**
  35.  *
  36.  * @author jpetersen
  37.  */
  38. public class UndefinedAccessor implements IAccessor {
  39.     private final Ruby runtime;
  40.     private final GlobalVariable globalVariable;
  41.     private final String name;

  42.     /**
  43.      * Constructor for UndefinedAccessor.
  44.      */
  45.     public UndefinedAccessor(Ruby runtime, GlobalVariable globalVariable, String name) {
  46.         assert runtime != null;
  47.         assert globalVariable != null;
  48.         assert name != null;

  49.         this.runtime = runtime;
  50.         this.globalVariable = globalVariable;
  51.         this.name = name;
  52.     }

  53.     /**
  54.      * @see org.jruby.runtime.IAccessor#getValue()
  55.      */
  56.     public IRubyObject getValue() {
  57.         if (runtime.isVerbose()) {
  58.             runtime.getWarnings().warning(ID.ACCESSOR_NOT_INITIALIZED, "global variable `" + name + "' not initialized");
  59.         }
  60.         return runtime.getNil();
  61.     }

  62.     /**
  63.      * @see org.jruby.runtime.IAccessor#setValue(IRubyObject)
  64.      */
  65.     public IRubyObject setValue(IRubyObject newValue) {
  66.         assert newValue != null;
  67.         globalVariable.setAccessor(new ValueAccessor(newValue));
  68.         return newValue;
  69.     }
  70. }