soot.jimple.toolkits.pointer.nativemethods
Class JavaLangStringNative

java.lang.Object
  extended by soot.jimple.toolkits.pointer.nativemethods.NativeMethodClass
      extended by soot.jimple.toolkits.pointer.nativemethods.JavaLangStringNative

public class JavaLangStringNative
extends NativeMethodClass


Field Summary
 
Fields inherited from class soot.jimple.toolkits.pointer.nativemethods.NativeMethodClass
helper
 
Constructor Summary
JavaLangStringNative(NativeHelper helper)
           
 
Method Summary
 void java_lang_String_intern(SootMethod method, ReferenceVariable thisVar, ReferenceVariable returnVar, ReferenceVariable[] params)
          Returns a canonical representation for the string object.
 void simulateMethod(SootMethod method, ReferenceVariable thisVar, ReferenceVariable returnVar, ReferenceVariable[] params)
          Implements the abstract method simulateMethod.
 
Methods inherited from class soot.jimple.toolkits.pointer.nativemethods.NativeMethodClass
defaultMethod
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JavaLangStringNative

public JavaLangStringNative(NativeHelper helper)
Method Detail

simulateMethod

public void simulateMethod(SootMethod method,
                           ReferenceVariable thisVar,
                           ReferenceVariable returnVar,
                           ReferenceVariable[] params)
Implements the abstract method simulateMethod. It distributes the request to the corresponding methods by signatures.

Specified by:
simulateMethod in class NativeMethodClass

java_lang_String_intern

public void java_lang_String_intern(SootMethod method,
                                    ReferenceVariable thisVar,
                                    ReferenceVariable returnVar,
                                    ReferenceVariable[] params)
Returns a canonical representation for the string object. A pool of strings, initially empty, is maintained privately by the class String. When the intern method is invoked, if the pool already contains a * string equal to this String object as determined by the * equals(Object) method, then the string from the pool is * returned. Otherwise, this String object is added to the pool and a * reference to this String object is returned. It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true. All literal strings and string-valued constant expressions are * interned. String literals are defined in Section 3.10.5 of the Java * Language Specification Returns: a string that has the same contents * as this string, but is guaranteed to be from a pool of unique * strings. Side Effect: from the description, we can see, it is tricky to know the side effect of this native method. Take a conservative way to handle this. It may be @return = this; pool = this; why should we care about String in points-to analysis? public native java.lang.String intern();