/*
***** BEGIN LICENSE BLOCK *****
* Version: EPL 2.0/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Eclipse Public
* License Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.eclipse.org/legal/epl-v20.html
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* Copyright (C) 2002-2004 Anders Bengtsson <ndrsbngtssn@yahoo.se>
* Copyright (C) 2002-2004 Jan Arne Petersen <jpetersen@uni-bonn.de>
* Copyright (C) 2004 Thomas E Enebo <enebo@acm.org>
* Copyright (C) 2004 Charles O Nutter <headius@headius.com>
* Copyright (C) 2004 Stefan Matthias Aust <sma@3plus4.de>
* Copyright (C) 2006 Ola Bini <ola.bini@ki.se>
* Copyright (C) 2007 William N Dortch <bill.dortch@gmail.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the EPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the EPL, the GPL or the LGPL.
***** END LICENSE BLOCK *****/
package org.jruby.runtime.builtin;
import java.util.List;
import org.jruby.Ruby;
import org.jruby.RubyArray;
import org.jruby.RubyClass;
import org.jruby.RubyFloat;
import org.jruby.RubyHash;
import org.jruby.RubyInteger;
import org.jruby.RubyString;
import org.jruby.runtime.Block;
import org.jruby.runtime.JavaSites;
import org.jruby.runtime.ThreadContext;
Object is the parent class of all classes in Ruby. Its methods are
therefore available to all objects unless explicitly overridden.
/**
* Object is the parent class of all classes in Ruby. Its methods are
* therefore available to all objects unless explicitly overridden.
*/
public interface IRubyObject {
// Create an array instance of IRubyObjects. It is so easy to miss using NULL_ARRAY in our
// codebase this array method is a helper to prevent that pattern.
static IRubyObject[] array(int length) {
return length == 0 ? NULL_ARRAY : new IRubyObject[length];
}
IRubyObject[] NULL_ARRAY = new IRubyObject[0];
@Deprecated
public IRubyObject callSuper(ThreadContext context, IRubyObject[] args, Block block);
public IRubyObject callMethod(ThreadContext context, String name);
public IRubyObject callMethod(ThreadContext context, String name, IRubyObject arg);
public IRubyObject callMethod(ThreadContext context, String name, IRubyObject[] args);
public IRubyObject callMethod(ThreadContext context, String name, IRubyObject[] args, Block block);
@Deprecated
public IRubyObject callMethod(ThreadContext context, int methodIndex, String name);
@Deprecated
public IRubyObject callMethod(ThreadContext context, int methodIndex, String name, IRubyObject arg);
public IRubyObject checkCallMethod(ThreadContext context, String name);
public IRubyObject checkCallMethod(ThreadContext context, JavaSites.CheckedSites sites);
Check whether this object is nil.
Returns: true for nil
only
/**
* Check whether this object is nil.
* @return true for <code>nil</code> only
*/
boolean isNil();
Check whether this object is truthy.
Returns: false for nil
and false
, true otherwise
/**
* Check whether this object is truthy.
* @return false for <code>nil</code> and <code>false</code>, true otherwise
*/
boolean isTrue();
RubyMethod isTaint.
Returns: boolean
/**
* RubyMethod isTaint.
* @return boolean
*/
boolean isTaint();
RubyMethod setTaint.
Params: - taint – the taint flag
/**
* RubyMethod setTaint.
* @param taint the taint flag
*/
void setTaint(boolean taint);
Infect this object using the taint of another object.
Params: - obj –
Returns: infected (self)
/**
* Infect this object using the taint of another object.
* @param obj
* @return infected (self)
*/
IRubyObject infectBy(IRubyObject obj);
RubyMethod isFrozen.
Returns: boolean
/**
* RubyMethod isFrozen.
* @return boolean
*/
boolean isFrozen();
RubyMethod setFrozen.
Params: - b –
/**
* RubyMethod setFrozen.
* @param b
*/
void setFrozen(boolean b);
RubyMethod isUntrusted.
Returns: boolean
/**
* RubyMethod isUntrusted.
* @return boolean
*/
boolean isUntrusted();
RubyMethod setUntrusted.
Params: - b –
/**
* RubyMethod setUntrusted.
* @param b
*/
void setUntrusted(boolean b);
Returns:
/**
*
* @return
*/
boolean isImmediate();
Returns:
/**
*
* @return
*/
boolean isSpecialConst();
Retrieve self.class<
.
Returns: the Ruby (meta) class
/**
* Retrieve <code></>self.class<</code>.
* @return the Ruby (meta) class
*/
RubyClass getMetaClass();
Retrieve self.singleton_class<
.
Returns: the Ruby singleton class
/**
* Retrieve <code></>self.singleton_class<</code>.
* @return the Ruby singleton class
*/
RubyClass getSingletonClass();
RubyMethod getType.
Returns: RubyClass
/**
* RubyMethod getType.
* @return RubyClass
*/
RubyClass getType();
RubyMethod respondsTo.
Params: - string –
Returns: boolean
/**
* RubyMethod respondsTo.
* @param string
* @return boolean
*/
boolean respondsTo(String string);
RubyMethod respondsTo.
Params: - string –
Returns: boolean
/**
* RubyMethod respondsTo.
* @param string
* @return boolean
*/
boolean respondsToMissing(String string);
RubyMethod respondsTo.
Params: - string –
Returns: boolean
/**
* RubyMethod respondsTo.
* @param string
* @return boolean
*/
boolean respondsToMissing(String string, boolean priv);
RubyMethod getRuntime.
Returns: the Ruby runtime this belongs to
/**
* RubyMethod getRuntime.
* @return the Ruby runtime this belongs to
*/
Ruby getRuntime();
RubyMethod getJavaClass.
Returns: Class
/**
* RubyMethod getJavaClass.
* @return Class
*/
Class getJavaClass();
Convert the object into a symbol name if possible.
Returns: String the symbol name
/**
* Convert the object into a symbol name if possible.
*
* @return String the symbol name
*/
String asJavaString();
rb_obj_as_string
Returns:
/** rb_obj_as_string
* @return
*/
RubyString asString();
Converts this Ruby object to an Array.
Returns: an array value
/**
* Converts this Ruby object to an Array.
* @return an array value
*/
RubyArray convertToArray();
Converts this Ruby object to a Hash.
Returns: a hash value
/**
* Converts this Ruby object to a Hash.
* @return a hash value
*/
RubyHash convertToHash();
Converts this Ruby object to a Float (using to_f).
Returns: a float value
/**
* Converts this Ruby object to a Float (using to_f).
* @return a float value
*/
RubyFloat convertToFloat();
Converts this Ruby object to an Integer.
Uses the default conversion method (to_int).
Returns: an integer value
/**
* Converts this Ruby object to an Integer.
* Uses the default conversion method (to_int).
* @return an integer value
*/
RubyInteger convertToInteger();
Converts this Ruby object to an Integer.
Params: - convertMethod – method to use e.g. to_i
Returns: an integer value
/**
* Converts this Ruby object to an Integer.
* @param convertMethod method to use e.g. to_i
* @return an integer value
*/
RubyInteger convertToInteger(String convertMethod);
Converts this Ruby object to a String.
Returns: a string value
/**
* Converts this Ruby object to a String.
* @return a string value
*/
RubyString convertToString();
Returns:
/**
*
* @return
*/
IRubyObject anyToString();
Returns: nil if type check failed
/**
*
* @return nil if type check failed
*/
IRubyObject checkStringType();
Returns: nil if type check failed
/**
*
* @return nil if type check failed
*/
IRubyObject checkArrayType();
Convert the object to the specified Java class, if possible.
Params: - type – The target type to which the object should be converted.
/**
* Convert the object to the specified Java class, if possible.
*
* @param type The target type to which the object should be converted.
*/
<T> T toJava(Class<T> type);
RubyMethod dup.
Returns: a dup-ed object
/**
* RubyMethod dup.
* @return a dup-ed object
*/
IRubyObject dup();
RubyMethod inspect.
Returns: String
/**
* RubyMethod inspect.
* @return String
*/
IRubyObject inspect();
RubyMethod clone.
Returns: a cloned object
/**
* RubyMethod clone.
* @return a cloned object
*/
IRubyObject rbClone();
Returns: true if an object is Ruby Module instance (note that it will return false for Ruby Classes).
If is_a? semantics is required, use (someObject instanceof RubyModule)
instead.
/**
* @return true if an object is Ruby Module instance (note that it will return false for Ruby Classes).
* If is_a? semantics is required, use <code>(someObject instanceof RubyModule)</code> instead.
*/
boolean isModule();
Returns: true if an object is Ruby Class instance (note that it will return false for Ruby singleton classes).
If is_a? semantics is required, use (someObject instanceof RubyClass/MetaClass)
instead.
/**
* @return true if an object is Ruby Class instance (note that it will return false for Ruby singleton classes).
* If is_a? semantics is required, use <code>(someObject instanceof RubyClass/MetaClass)</code> instead.
*/
boolean isClass();
Our version of Data_Wrap_Struct.
This method will just set a private pointer to the object provided. This pointer is transient
and will not be accessible from Ruby.
Params: - obj – the object to wrap
/**
* Our version of Data_Wrap_Struct.
*
* This method will just set a private pointer to the object provided. This pointer is transient
* and will not be accessible from Ruby.
*
* @param obj the object to wrap
*/
void dataWrapStruct(Object obj);
Our version of Data_Get_Struct.
Returns a wrapped data value if there is one, otherwise returns null.
Returns: the object wrapped.
/**
* Our version of Data_Get_Struct.
*
* Returns a wrapped data value if there is one, otherwise returns null.
*
* @return the object wrapped.
*/
Object dataGetStruct();
@Deprecated // not used at all
Object dataGetStructChecked();
Returns: the object id
/**
* @return the object id
*/
IRubyObject id();
public IRubyObject op_equal(ThreadContext context, IRubyObject other);
public IRubyObject op_eqq(ThreadContext context, IRubyObject other);
public boolean eql(IRubyObject other);
public void addFinalizer(IRubyObject finalizer);
public void removeFinalizers();
//
// COMMON VARIABLE METHODS
//
Returns true if object has any variables, defined as:
- instance variables
- class variables
- constants
- internal variables, such as those used when marshalling Ranges and Exceptions
Returns: true if object has any variables, else false
/**
* Returns true if object has any variables, defined as:
* <ul>
* <li> instance variables
* <li> class variables
* <li> constants
* <li> internal variables, such as those used when marshalling Ranges and Exceptions
* </ul>
* @return true if object has any variables, else false
*/
boolean hasVariables();
Returns: the count of all variables (ivar/cvar/constant/internal)
/**
* @return the count of all variables (ivar/cvar/constant/internal)
*/
int getVariableCount();
Sets object's variables to those in the supplied list,
removing/replacing any previously defined variables. Applies
to all variable types (ivar/cvar/constant/internal).
Params: - variables – the variables to be set for object
/**
* Sets object's variables to those in the supplied list,
* removing/replacing any previously defined variables. Applies
* to all variable types (ivar/cvar/constant/internal).
*
* @param variables the variables to be set for object
*/
@Deprecated
void syncVariables(List<Variable<Object>> variables);
Sets object's variables to those in the supplied object,
removing/replacing any previously defined variables of the same name.
Applies to all variable types (ivar/cvar/constant/internal).
Params: - source – the source object containing the variables to sync
/**
* Sets object's variables to those in the supplied object,
* removing/replacing any previously defined variables of the same name.
* Applies to all variable types (ivar/cvar/constant/internal).
*
* @param source the source object containing the variables to sync
*/
void syncVariables(IRubyObject source);
Returns: a list of all variables (ivar/cvar/constant/internal)
/**
* @return a list of all variables (ivar/cvar/constant/internal)
*/
List<Variable<Object>> getVariableList();
//
// INSTANCE VARIABLE METHODS
//
InstanceVariables getInstanceVariables();
//
// INTERNAL VARIABLE METHODS
//
InternalVariables getInternalVariables();
Returns: a list of all variable names (ivar/cvar/constant/internal)
/**
* @return a list of all variable names (ivar/cvar/constant/internal)
*/
List<String> getVariableNameList();
void copySpecialInstanceVariables(IRubyObject clone);
public Object getVariable(int index);
public void setVariable(int index, Object value);
Deprecated: Use checkStringType()
instead.
/**
* @deprecated Use {@link #checkStringType()} instead.
*/
default IRubyObject checkStringType19() {
return checkStringType();
}
Params: - convertMethod –
- convertMethodIndex –
See Also:
/**
* @param convertMethod
* @param convertMethodIndex
* @see #convertToInteger(String)
*/
@Deprecated
default RubyInteger convertToInteger(int convertMethodIndex, String convertMethod) {
return convertToInteger(convertMethod);
}
}