Record Class SubTypeReturnRewrite

java.lang.Object
java.lang.Record
io.papermc.asm.rules.method.returns.SubTypeReturnRewrite
Record Components:
owners - owners of the methods to change
targetedMethodMatcher - method matcher to find methods with (target is the type to be found in bytecode that needs to be transformed)
newReturnType - the return type that is valid for existing method
All Implemented Interfaces:
MethodRewriteRule, OwnableMethodRewriteRule, OwnableMethodRewriteRule.Filtered, OwnableRewriteRule, RewriteRule

public record SubTypeReturnRewrite(Set<ClassDesc> owners, TargetedMethodMatcher targetedMethodMatcher, ClassDesc newReturnType) extends Record implements OwnableMethodRewriteRule.Filtered
Changes a return type to a subtype of the old type. This isn't a compile break as subtypes inherit everything, but it is an ABI break. We just change the return type in the descriptor and move on.
  • Constructor Details

    • SubTypeReturnRewrite

      public SubTypeReturnRewrite(Set<ClassDesc> owners, TargetedMethodMatcher targetedMethodMatcher, ClassDesc newReturnType)
      Creates an instance of a SubTypeReturnRewrite record class.
      Parameters:
      owners - the value for the owners record component
      targetedMethodMatcher - the value for the targetedMethodMatcher record component
      newReturnType - the value for the newReturnType record component
  • Method Details

    • methodMatcher

      public MethodMatcher methodMatcher()
      Description copied from interface: OwnableMethodRewriteRule.Filtered
      A matcher to test against method names and descriptors.
      Specified by:
      methodMatcher in interface OwnableMethodRewriteRule.Filtered
      Returns:
      the method matcher
    • oldReturnType

      public ClassDesc oldReturnType()
    • rewrite

      public @Nullable MethodRewrite<?> rewrite(ClassProcessingContext context, boolean isInvokeDynamic, int opcode, ClassDesc owner, String name, MethodTypeDesc descriptor, boolean isInterface)
      Description copied from interface: MethodRewriteRule
      Creates a MethodRewrite which will be applied to the processed bytecode.
      Specified by:
      rewrite in interface MethodRewriteRule
      Parameters:
      context - the current context
      isInvokeDynamic - if this is in an invokedynamic instruction
      opcode - the opcode of the invoke instruction or the invokedynamic handle tag
      owner - the owner of the invoke method or the owner of the invokedynamic handle
      name - the name of the invoke method or the name of the invokedynamic handle
      descriptor - the descriptor of the invoke method or the descriptor of the invokedynamic handle
      isInterface - if the method is an interface method
      Returns:
      the rewrite or null if no rewrite should be applied
    • toString

      public final String toString()
      Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.
      Specified by:
      toString in class Record
      Returns:
      a string representation of this object
    • hashCode

      public final int hashCode()
      Returns a hash code value for this object. The value is derived from the hash code of each of the record components.
      Specified by:
      hashCode in class Record
      Returns:
      a hash code value for this object
    • equals

      public final boolean equals(Object o)
      Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with Objects::equals(Object,Object).
      Specified by:
      equals in class Record
      Parameters:
      o - the object with which to compare
      Returns:
      true if this object is the same as the o argument; false otherwise.
    • owners

      public Set<ClassDesc> owners()
      Returns the value of the owners record component.
      Specified by:
      owners in interface OwnableRewriteRule
      Returns:
      the value of the owners record component
    • targetedMethodMatcher

      public TargetedMethodMatcher targetedMethodMatcher()
      Returns the value of the targetedMethodMatcher record component.
      Returns:
      the value of the targetedMethodMatcher record component
    • newReturnType

      public ClassDesc newReturnType()
      Returns the value of the newReturnType record component.
      Returns:
      the value of the newReturnType record component