Packages

sealed abstract class Signature extends SignatureElement with Attribute

An attribute-level signature as defined in the JVM specification.

To match Signature objects the predefined matchers/extractors can be used. * @example

Example 1

interface Processor extends Function<Object, Void> { /*empty*/ }

ClassSignature: Ljava/lang/Object;Ljava/util/function/Function<Ljava/lang/Object;Ljava/lang/Void;>;

ClassSignature(
  typeParameters=List(),
  superClass=ClassTypeSignature(Some(java/lang/),SimpleClassTypeSignature(Object,List()),List()),
  superInterfaces=List(
      ClassTypeSignature(
          Some(java/util/function/),
          SimpleClassTypeSignature(Function,
                List(ProperTypeArgument(
                       None,
                       ClassTypeSignature(
                          Some(java/lang/),
                          SimpleClassTypeSignature(Object,List()),
                          List())),
                   ProperTypeArgument(
                      None,
                      ClassTypeSignature(
                          Some(java/lang/),
                          SimpleClassTypeSignature(Void,List()),
                          List())))),
          List())))

Example 2

interface Col<C> { /*empty*/ }

ClassSignature: <C:Ljava/lang/Object;>Ljava/lang/Object;

ClassSignature(
    typeParameters=
        List(
            FormalTypeParameter(
                C,
                Some(ClassTypeSignature(
                        Some(java/lang/),SimpleClassTypeSignature(Object,List()),List())),
                List())),
     superClass=ClassTypeSignature(
            Some(java/lang/),SimpleClassTypeSignature(Object,List()),List()),
     superInterfaces=List())

Example 3

interface ColObject extends Col<Object> { /*empty*/ }

ClassSignature: Ljava/lang/Object;LCol<Ljava/lang/Object;>;

ClassSignature(
    typeParameters=List(),
    superClass=ClassTypeSignature(Some(java/lang/),SimpleClassTypeSignature(Object,List()),List()),
    superInterfaces=List(
            ClassTypeSignature(
                None,
                SimpleClassTypeSignature(
                    Col,
                    List(ProperTypeArgument(
                            variance=None,
                            signature=ClassTypeSignature(Some(java/lang/),SimpleClassTypeSignature(Object,List()),List()))
                 )),
                 List())))

Example 4

interface ColError<E extends Error> extends Col<E>{/*empty*/}

ClassSignature: <E:Ljava/lang/Error;>Ljava/lang/Object;LCol<TE;>;

ClassSignature(
    typeParameters=List(
            FormalTypeParameter(
                E,
                Some(ClassTypeSignature(Some(java/lang/),SimpleClassTypeSignature(Error,List()),List())),List())),
    superClass=ClassTypeSignature(Some(java/lang/),SimpleClassTypeSignature(Object,List()),List()),
    superInterfaces=List(
            ClassTypeSignature(
                None,
                SimpleClassTypeSignature(
                    Col,
                    List(ProperTypeArgument(variance=None,signature=TypeVariableSignature(E)))),
                List())))

Example 5

class Use {
  // The following fields all have "ClassTypeSignatures"
  Col<?> ce = null; // Signature: LCol<*>;
  Col<Object> co = null; // Signature: LCol<Ljava/lang/Object;>;
  Col<? super Serializable> cs = null; // Signature: LCol<-Ljava/io/Serializable;>;
  Col<? extends Comparable<?>> cc = null; // Signature: LCol<+Ljava/lang/Comparable<*>;>;

  MyCol<java.util.List<Object>> mco = new MyCol<>();
  MyCol<java.util.List<Object>>.MyInnerCol<Comparable<java.util.List<Object>>> mico = this.mco.new MyInnerCol<Comparable<java.util.List<Object>>>();
  // Signature: LMyCol<Ljava/util/List<Ljava/lang/Object;>;>.MyInnerCol<Ljava/lang/Comparable<Ljava/util/List<Ljava/lang/Object;>;>;>;
}

AST of mico:

ClassSignature(
    typeParameters=List(),
    superClass=ClassTypeSignature(
            None,
            SimpleClassTypeSignature(
                MyCol,
                List(ProperTypeArgument(
                        variance=None,
                        signature=ClassTypeSignature(
                                Some(java/util/),
                                SimpleClassTypeSignature(
                                    List,
                                    List(ProperTypeArgument(
                                            variance=None,
                                            signature=ClassTypeSignature(
                                                    Some(java/lang/),
                                                    SimpleClassTypeSignature(Object,List()),
                                                    List())))),
                                 List())))),
            /*suffic=*/List(SimpleClassTypeSignature(
                    MyInnerCol,
                    List(ProperTypeArgument(
                            variance=None,
                            signature=ClassTypeSignature(
                                Some(java/lang/),
                                SimpleClassTypeSignature(
                                    Comparable,
                                    List(ProperTypeArgument(
                                            variance=None,
                                            signature=ClassTypeSignature(
                                                    Some(java/util/),
                                                    SimpleClassTypeSignature(
                                                        List,
                                                        List(ProperTypeArgument(
                                                                variance=None,
                                                                signature=ClassTypeSignature(
                                                                        Some(java/lang/),
                                                                        SimpleClassTypeSignature(Object,List()),
                                                                        List())))),
                                                    List())))),
                                List())))))),
    superInterfaces=List())

Matching Signatures

Scala REPL:

val SignatureParser = org.opalj.br.reader.SignatureParser
val GenericType = org.opalj.br.GenericType
val SimpleGenericType = org.opalj.br.SimpleGenericType
val BasicClassTypeSignature = org.opalj.br.BasicClassTypeSignature

SignatureParser.parseClassSignature("<E:Ljava/lang/Error;>Ljava/lang/Object;LCol<TE;>;").superInterfacesSignature.head match { case BasicClassTypeSignature(ot) => ot.toJava; case _ => null}
// res: String = Col

SignatureParser.parseClassSignature("<E:Ljava/lang/Error;>Ljava/lang/Object;LCol<TE;>;").superInterfacesSignature.head match { case SimpleGenericType(bt,gt) => bt.toJava+"<"+gt.toJava+">"; case _ => null}
//res11: String = null

scala> SignatureParser.parseFieldTypeSignature("LCol<Ljava/lang/Object;>;") match { case SimpleGenericType(bt,ta) => bt.toJava+"<"+ta+">"; case _ => null}
res1: String = Col<ObjectType(java/lang/Object)>

scala> SignatureParser.parseFieldTypeSignature("LCol<Ljava/lang/Object;>;") match { case GenericType(bt,ta) => bt.toJava+"<"+ta+">"; case _ => null}
res2: String = Col<List(ProperTypeArgument(variance=None,signature=ClassTypeSignature(Some(java/lang/),SimpleClassTypeSignature(Object,List()),List())))>
Source
Signature.scala
Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Signature
  2. Attribute
  3. SignatureElement
  4. AnyRef
  5. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Abstract Value Members

  1. abstract def accept[T](sv: SignatureVisitor[T]): T
    Definition Classes
    SignatureElement
  2. abstract def kindId: Int

    Returns the unique ID that identifies this kind of attribute (Signature, LineNumberTable, ...)

    Returns the unique ID that identifies this kind of attribute (Signature, LineNumberTable, ...)

    This id can then be used in a switch statement to efficiently identify the attribute.

    (attribute.id : @scala.annotation.switch) match {
         case Signature.Id => ...
    }

    Associating Unique Id

    The unique ids are manually associated with the attributes. The attributes use the following IDs:

    • (-1 Unknown Attribute)
    • 1-5 The ConstantValue Attribute
    • 6 The Code Attribute
    • 7 The StackMapTable Attribute
    • 8 The Exceptions Attribute
    • 9 The InnerClasses Attribute
    • 10 The EnclosingMethod Attribute
    • 11 The Synthetic Attribute
    • 12-16 The Signature Attribute
    • 17 The SourceFile Attribute
    • 18 The SourceDebugExtension Attribute
    • 19 The LineNumberTable Attribute
    • 20 The LocalVariableTable Attribute
    • 21 The LocalVariableTypeTable Attribute
    • 22 The Deprecated Attribute
    • 23 The RuntimeVisibleAnnotations Attribute
    • 24 The RuntimeInvisibleAnnotations Attribute
    • 25 The RuntimeVisibleParameterAnnotations Attribute
    • 26 The RuntimeInvisibleParameterAnnotations Attribute
    • 27 The RuntimeVisibleTypeAnnotations Attribute
    • 28 The RuntimeInvisibleTypeAnnotations Attribute
    • 29-41 The AnnotationDefault Attribute
    • 42 The BootstrapMethods Attribute
    • 43 The MethodParameters Attribute
    • 44 The Module Attribute (Java 9)
    • 45 The ModuleMainClass Attribute (Java 9)
    • 46 The ModulePackages Attribute (Java 9)
    • 47 The NestHost Attribute (Java 11)
    • 48 The NestMembers Attribute (Java 11)
    • 49 The Record Attribute (Java 16)
    • 1001 OPAL's VirtualTypeFlag Attribute
    • 1002 OPAL's SynthesizedClassFiles Attribute
    • 1003 OPAL's TACode Attribute (the 3-Address Code)
    Definition Classes
    Attribute
  3. abstract def toJVMSignature: String

    Converts this signature into its JVM representation.

    Converts this signature into its JVM representation. (See the JVM 5 or later specification for further details.)

    Definition Classes
    SignatureElement

Concrete Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native() @IntrinsicCandidate()
  6. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  7. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  8. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @IntrinsicCandidate()
  9. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @IntrinsicCandidate()
  10. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  11. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  12. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @IntrinsicCandidate()
  13. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @IntrinsicCandidate()
  14. def similar(other: Attribute, config: SimilarityTestConfiguration): Boolean

    Returns true if this attribute and the given one are guaranteed to be indistinguishable at runtime.

    Returns true if this attribute and the given one are guaranteed to be indistinguishable at runtime.

    Definition Classes
    SignatureAttribute
    Note

    If this class is implemented as a proper case class, this method can often be implemented by forwarding to the default equals method.

  15. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  16. def toString(): String
    Definition Classes
    AnyRef → Any
  17. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  18. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  19. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] ) @Deprecated
    Deprecated

Inherited from Attribute

Inherited from SignatureElement

Inherited from AnyRef

Inherited from Any

Ungrouped