Class LambdaSummaryClass

java.lang.Object
com.ibm.wala.classLoader.SyntheticClass
com.ibm.wala.ipa.summaries.LambdaSummaryClass
All Implemented Interfaces:
IClass, IClassHierarchyDweller

public class LambdaSummaryClass extends SyntheticClass
Synthetic class modeling the anonymous class generated at runtime for a lambda expression. The anonymous class implements the relevant functional interface. Our synthetic classes contain instance fields corresponding to the values captured by the lambda. The implementation of the functional interface method is a "trampoline" that invokes the generated lambda body method with the captured values stored in the instance fields.
See Also:
  • Method Details

    • create

      public static LambdaSummaryClass create(CGNode caller, SSAInvokeDynamicInstruction inst)
      Create a lambda summary class and add it to the class hierarchy.
      Parameters:
      caller - method containing the relevant invokedynamic instruction
      inst - the invokedynamic instruction
      Returns:
      the summary class
    • isPublic

      public boolean isPublic()
      Returns:
      true iff this class is public
    • isPrivate

      public boolean isPrivate()
      Returns:
      true iff this class is private
    • getModifiers

      public int getModifiers() throws UnsupportedOperationException
      Description copied from interface: IClass
      Return the integer that encodes the class's modifiers, as defined by the JVM specification
      Returns:
      the integer that encodes the class's modifiers, as defined by the JVM specification
      Throws:
      UnsupportedOperationException
    • getSuperclass

      public IClass getSuperclass()
      Returns:
      the superclass, or null if java.lang.Object
    • getDirectInterfaces

      public Collection<? extends IClass> getDirectInterfaces()
      Returns:
      singleton set containing the relevant functional interface
    • getAllImplementedInterfaces

      public Collection<IClass> getAllImplementedInterfaces()
      Returns:
      relevant functional interface and all of its super-interfaces
    • getMethod

      public IMethod getMethod(Selector selector)
      Description copied from interface: IClass
      Finds method matching signature. Delegates to superclass if not found.
      Parameters:
      selector - a method signature
      Returns:
      IMethod from this class matching the signature; null if not found in this class or any superclass.
    • getField

      public IField getField(Atom name)
      Description copied from interface: IClass
      Finds a field.
    • getClassInitializer

      public IMethod getClassInitializer()
      Returns:
      the method that is this class's initializer, or null if none
    • getDeclaredMethods

      public Collection<IMethod> getDeclaredMethods()
      Returns:
      an Iterator of the IMethods declared by this class.
    • getAllInstanceFields

      public Collection<IField> getAllInstanceFields()
      Description copied from interface: IClass
      Compute the instance fields declared by this class or any of its superclasses.
    • getAllStaticFields

      public Collection<IField> getAllStaticFields()
      Description copied from interface: IClass
      Compute the static fields declared by this class or any of its superclasses.
    • getAllFields

      public Collection<IField> getAllFields()
      Description copied from interface: IClass
      Compute the instance and static fields declared by this class or any of its superclasses.
    • getAllMethods

      public Collection<IMethod> getAllMethods()
      Description copied from interface: IClass
      Compute the methods declared by this class or any of its superclasses.
    • getDeclaredInstanceFields

      public Collection<IField> getDeclaredInstanceFields()
      Description copied from interface: IClass
      Compute the instance fields declared by this class.
      Returns:
      Collection of IFields
    • getDeclaredStaticFields

      public Collection<IField> getDeclaredStaticFields()
      Returns:
      Collection of IField
    • isReferenceType

      public boolean isReferenceType()
      Description copied from interface: IClass
      Does 'this' refer to a reference type? If not, then it refers to a primitive type.
    • getCaptureFieldName

      public static Atom getCaptureFieldName(int i)
      get the synthetic field name for a value captured by the lambda
      Parameters:
      i - index of the captured value
      Returns:
      the field name