gi-atk-2.0.17: GI/Atk/Objects/Relation.hs
{- |
Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
An AtkRelation describes a relation between an object and one or
more other objects. The actual relations that an object has with
other objects are defined as an AtkRelationSet, which is a set of
AtkRelations.
-}
#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
&& !defined(__HADDOCK_VERSION__))
module GI.Atk.Objects.Relation
(
-- * Exported types
Relation(..) ,
IsRelation ,
toRelation ,
noRelation ,
-- * Methods
-- ** addTarget #method:addTarget#
#if ENABLE_OVERLOADING
RelationAddTargetMethodInfo ,
#endif
relationAddTarget ,
-- ** getRelationType #method:getRelationType#
#if ENABLE_OVERLOADING
RelationGetRelationTypeMethodInfo ,
#endif
relationGetRelationType ,
-- ** getTarget #method:getTarget#
#if ENABLE_OVERLOADING
RelationGetTargetMethodInfo ,
#endif
relationGetTarget ,
-- ** new #method:new#
relationNew ,
-- ** removeTarget #method:removeTarget#
#if ENABLE_OVERLOADING
RelationRemoveTargetMethodInfo ,
#endif
relationRemoveTarget ,
-- * Properties
-- ** relationType #attr:relationType#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
RelationRelationTypePropertyInfo ,
#endif
constructRelationRelationType ,
getRelationRelationType ,
#if ENABLE_OVERLOADING
relationRelationType ,
#endif
setRelationRelationType ,
-- ** target #attr:target#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
RelationTargetPropertyInfo ,
#endif
clearRelationTarget ,
constructRelationTarget ,
getRelationTarget ,
#if ENABLE_OVERLOADING
relationTarget ,
#endif
setRelationTarget ,
) where
import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P
import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import {-# SOURCE #-} qualified GI.Atk.Enums as Atk.Enums
import {-# SOURCE #-} qualified GI.Atk.Objects.Object as Atk.Object
import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.GObject.Structs.ValueArray as GObject.ValueArray
-- | Memory-managed wrapper type.
newtype Relation = Relation (ManagedPtr Relation)
foreign import ccall "atk_relation_get_type"
c_atk_relation_get_type :: IO GType
instance GObject Relation where
gobjectType = c_atk_relation_get_type
-- | Type class for types which can be safely cast to `Relation`, for instance with `toRelation`.
class (GObject o, O.IsDescendantOf Relation o) => IsRelation o
instance (GObject o, O.IsDescendantOf Relation o) => IsRelation o
instance O.HasParentTypes Relation
type instance O.ParentTypes Relation = '[GObject.Object.Object]
-- | Cast to `Relation`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toRelation :: (MonadIO m, IsRelation o) => o -> m Relation
toRelation = liftIO . unsafeCastTo Relation
-- | A convenience alias for `Nothing` :: `Maybe` `Relation`.
noRelation :: Maybe Relation
noRelation = Nothing
#if ENABLE_OVERLOADING
type family ResolveRelationMethod (t :: Symbol) (o :: *) :: * where
ResolveRelationMethod "addTarget" o = RelationAddTargetMethodInfo
ResolveRelationMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
ResolveRelationMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
ResolveRelationMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
ResolveRelationMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
ResolveRelationMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
ResolveRelationMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
ResolveRelationMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
ResolveRelationMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
ResolveRelationMethod "ref" o = GObject.Object.ObjectRefMethodInfo
ResolveRelationMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
ResolveRelationMethod "removeTarget" o = RelationRemoveTargetMethodInfo
ResolveRelationMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
ResolveRelationMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
ResolveRelationMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
ResolveRelationMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
ResolveRelationMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
ResolveRelationMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
ResolveRelationMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
ResolveRelationMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
ResolveRelationMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
ResolveRelationMethod "getRelationType" o = RelationGetRelationTypeMethodInfo
ResolveRelationMethod "getTarget" o = RelationGetTargetMethodInfo
ResolveRelationMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
ResolveRelationMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
ResolveRelationMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveRelationMethod t Relation, O.MethodInfo info Relation p) => OL.IsLabel t (Relation -> p) where
#if MIN_VERSION_base(4,10,0)
fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif
#endif
-- VVV Prop "relation-type"
-- Type: TInterface (Name {namespace = "Atk", name = "RelationType"})
-- Flags: [PropertyReadable,PropertyWritable]
-- Nullable: (Just False,Nothing)
{- |
Get the value of the “@relation-type@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
@
'Data.GI.Base.Attributes.get' relation #relationType
@
-}
getRelationRelationType :: (MonadIO m, IsRelation o) => o -> m Atk.Enums.RelationType
getRelationRelationType obj = liftIO $ B.Properties.getObjectPropertyEnum obj "relation-type"
{- |
Set the value of the “@relation-type@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
@
'Data.GI.Base.Attributes.set' relation [ #relationType 'Data.GI.Base.Attributes.:=' value ]
@
-}
setRelationRelationType :: (MonadIO m, IsRelation o) => o -> Atk.Enums.RelationType -> m ()
setRelationRelationType obj val = liftIO $ B.Properties.setObjectPropertyEnum obj "relation-type" val
{- |
Construct a `GValueConstruct` with valid value for the “@relation-type@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructRelationRelationType :: (IsRelation o) => Atk.Enums.RelationType -> IO (GValueConstruct o)
constructRelationRelationType val = B.Properties.constructObjectPropertyEnum "relation-type" val
#if ENABLE_OVERLOADING
data RelationRelationTypePropertyInfo
instance AttrInfo RelationRelationTypePropertyInfo where
type AttrAllowedOps RelationRelationTypePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
type AttrSetTypeConstraint RelationRelationTypePropertyInfo = (~) Atk.Enums.RelationType
type AttrBaseTypeConstraint RelationRelationTypePropertyInfo = IsRelation
type AttrGetType RelationRelationTypePropertyInfo = Atk.Enums.RelationType
type AttrLabel RelationRelationTypePropertyInfo = "relation-type"
type AttrOrigin RelationRelationTypePropertyInfo = Relation
attrGet _ = getRelationRelationType
attrSet _ = setRelationRelationType
attrConstruct _ = constructRelationRelationType
attrClear _ = undefined
#endif
-- VVV Prop "target"
-- Type: TInterface (Name {namespace = "GObject", name = "ValueArray"})
-- Flags: [PropertyReadable,PropertyWritable]
-- Nullable: (Nothing,Nothing)
{- |
Get the value of the “@target@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
@
'Data.GI.Base.Attributes.get' relation #target
@
-}
getRelationTarget :: (MonadIO m, IsRelation o) => o -> m (Maybe GObject.ValueArray.ValueArray)
getRelationTarget obj = liftIO $ B.Properties.getObjectPropertyBoxed obj "target" GObject.ValueArray.ValueArray
{- |
Set the value of the “@target@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
@
'Data.GI.Base.Attributes.set' relation [ #target 'Data.GI.Base.Attributes.:=' value ]
@
-}
setRelationTarget :: (MonadIO m, IsRelation o) => o -> GObject.ValueArray.ValueArray -> m ()
setRelationTarget obj val = liftIO $ B.Properties.setObjectPropertyBoxed obj "target" (Just val)
{- |
Construct a `GValueConstruct` with valid value for the “@target@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructRelationTarget :: (IsRelation o) => GObject.ValueArray.ValueArray -> IO (GValueConstruct o)
constructRelationTarget val = B.Properties.constructObjectPropertyBoxed "target" (Just val)
{- |
Set the value of the “@target@” property to `Nothing`.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
@
'Data.GI.Base.Attributes.clear' #target
@
-}
clearRelationTarget :: (MonadIO m, IsRelation o) => o -> m ()
clearRelationTarget obj = liftIO $ B.Properties.setObjectPropertyBoxed obj "target" (Nothing :: Maybe GObject.ValueArray.ValueArray)
#if ENABLE_OVERLOADING
data RelationTargetPropertyInfo
instance AttrInfo RelationTargetPropertyInfo where
type AttrAllowedOps RelationTargetPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet, 'AttrClear]
type AttrSetTypeConstraint RelationTargetPropertyInfo = (~) GObject.ValueArray.ValueArray
type AttrBaseTypeConstraint RelationTargetPropertyInfo = IsRelation
type AttrGetType RelationTargetPropertyInfo = (Maybe GObject.ValueArray.ValueArray)
type AttrLabel RelationTargetPropertyInfo = "target"
type AttrOrigin RelationTargetPropertyInfo = Relation
attrGet _ = getRelationTarget
attrSet _ = setRelationTarget
attrConstruct _ = constructRelationTarget
attrClear _ = clearRelationTarget
#endif
#if ENABLE_OVERLOADING
instance O.HasAttributeList Relation
type instance O.AttributeList Relation = RelationAttributeList
type RelationAttributeList = ('[ '("relationType", RelationRelationTypePropertyInfo), '("target", RelationTargetPropertyInfo)] :: [(Symbol, *)])
#endif
#if ENABLE_OVERLOADING
relationRelationType :: AttrLabelProxy "relationType"
relationRelationType = AttrLabelProxy
relationTarget :: AttrLabelProxy "target"
relationTarget = AttrLabelProxy
#endif
#if ENABLE_OVERLOADING
type instance O.SignalList Relation = RelationSignalList
type RelationSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])
#endif
-- method Relation::new
-- method type : Constructor
-- Args : [Arg {argCName = "targets", argType = TCArray False (-1) 1 (TInterface (Name {namespace = "Atk", name = "Object"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an array of pointers to\n #AtkObjects", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "n_targets", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of #AtkObjects pointed to by @targets", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "relationship", argType = TInterface (Name {namespace = "Atk", name = "RelationType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkRelationType with which to create the new\n #AtkRelation", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "n_targets", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of #AtkObjects pointed to by @targets", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : Just (TInterface (Name {namespace = "Atk", name = "Relation"}))
-- throws : False
-- Skip return : False
foreign import ccall "atk_relation_new" atk_relation_new ::
Ptr (Ptr Atk.Object.Object) -> -- targets : TCArray False (-1) 1 (TInterface (Name {namespace = "Atk", name = "Object"}))
Int32 -> -- n_targets : TBasicType TInt
CUInt -> -- relationship : TInterface (Name {namespace = "Atk", name = "RelationType"})
IO (Ptr Relation)
{- |
Create a new relation for the specified key and the specified list
of targets. See also 'GI.Atk.Objects.Object.objectAddRelationship'.
-}
relationNew ::
(B.CallStack.HasCallStack, MonadIO m) =>
[Atk.Object.Object]
{- ^ /@targets@/: an array of pointers to
@/AtkObjects/@ -}
-> Atk.Enums.RelationType
{- ^ /@relationship@/: an 'GI.Atk.Enums.RelationType' with which to create the new
'GI.Atk.Objects.Relation.Relation' -}
-> m Relation
{- ^ __Returns:__ a pointer to a new 'GI.Atk.Objects.Relation.Relation' -}
relationNew targets relationship = liftIO $ do
let nTargets = fromIntegral $ length targets
targets' <- mapM unsafeManagedPtrCastPtr targets
targets'' <- packPtrArray targets'
let relationship' = (fromIntegral . fromEnum) relationship
result <- atk_relation_new targets'' nTargets relationship'
checkUnexpectedReturnNULL "relationNew" result
result' <- (wrapObject Relation) result
mapM_ touchManagedPtr targets
freeMem targets''
return result'
#if ENABLE_OVERLOADING
#endif
-- method Relation::add_target
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "relation", argType = TInterface (Name {namespace = "Atk", name = "Relation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkRelation", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "target", argType = TInterface (Name {namespace = "Atk", name = "Object"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkObject", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "atk_relation_add_target" atk_relation_add_target ::
Ptr Relation -> -- relation : TInterface (Name {namespace = "Atk", name = "Relation"})
Ptr Atk.Object.Object -> -- target : TInterface (Name {namespace = "Atk", name = "Object"})
IO ()
{- |
Adds the specified AtkObject to the target for the relation, if it is
not already present. See also 'GI.Atk.Objects.Object.objectAddRelationship'.
/Since: 1.9/
-}
relationAddTarget ::
(B.CallStack.HasCallStack, MonadIO m, IsRelation a, Atk.Object.IsObject b) =>
a
{- ^ /@relation@/: an 'GI.Atk.Objects.Relation.Relation' -}
-> b
{- ^ /@target@/: an 'GI.Atk.Objects.Object.Object' -}
-> m ()
relationAddTarget relation target = liftIO $ do
relation' <- unsafeManagedPtrCastPtr relation
target' <- unsafeManagedPtrCastPtr target
atk_relation_add_target relation' target'
touchManagedPtr relation
touchManagedPtr target
return ()
#if ENABLE_OVERLOADING
data RelationAddTargetMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsRelation a, Atk.Object.IsObject b) => O.MethodInfo RelationAddTargetMethodInfo a signature where
overloadedMethod _ = relationAddTarget
#endif
-- method Relation::get_relation_type
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "relation", argType = TInterface (Name {namespace = "Atk", name = "Relation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkRelation", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Atk", name = "RelationType"}))
-- throws : False
-- Skip return : False
foreign import ccall "atk_relation_get_relation_type" atk_relation_get_relation_type ::
Ptr Relation -> -- relation : TInterface (Name {namespace = "Atk", name = "Relation"})
IO CUInt
{- |
Gets the type of /@relation@/
-}
relationGetRelationType ::
(B.CallStack.HasCallStack, MonadIO m, IsRelation a) =>
a
{- ^ /@relation@/: an 'GI.Atk.Objects.Relation.Relation' -}
-> m Atk.Enums.RelationType
{- ^ __Returns:__ the type of /@relation@/ -}
relationGetRelationType relation = liftIO $ do
relation' <- unsafeManagedPtrCastPtr relation
result <- atk_relation_get_relation_type relation'
let result' = (toEnum . fromIntegral) result
touchManagedPtr relation
return result'
#if ENABLE_OVERLOADING
data RelationGetRelationTypeMethodInfo
instance (signature ~ (m Atk.Enums.RelationType), MonadIO m, IsRelation a) => O.MethodInfo RelationGetRelationTypeMethodInfo a signature where
overloadedMethod _ = relationGetRelationType
#endif
-- method Relation::get_target
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "relation", argType = TInterface (Name {namespace = "Atk", name = "Relation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkRelation", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TPtrArray (TInterface (Name {namespace = "Atk", name = "Object"})))
-- throws : False
-- Skip return : False
foreign import ccall "atk_relation_get_target" atk_relation_get_target ::
Ptr Relation -> -- relation : TInterface (Name {namespace = "Atk", name = "Relation"})
IO (Ptr (GPtrArray (Ptr Atk.Object.Object)))
{- |
Gets the target list of /@relation@/
-}
relationGetTarget ::
(B.CallStack.HasCallStack, MonadIO m, IsRelation a) =>
a
{- ^ /@relation@/: an 'GI.Atk.Objects.Relation.Relation' -}
-> m [Atk.Object.Object]
{- ^ __Returns:__ the target list of /@relation@/ -}
relationGetTarget relation = liftIO $ do
relation' <- unsafeManagedPtrCastPtr relation
result <- atk_relation_get_target relation'
checkUnexpectedReturnNULL "relationGetTarget" result
result' <- unpackGPtrArray result
result'' <- mapM (newObject Atk.Object.Object) result'
touchManagedPtr relation
return result''
#if ENABLE_OVERLOADING
data RelationGetTargetMethodInfo
instance (signature ~ (m [Atk.Object.Object]), MonadIO m, IsRelation a) => O.MethodInfo RelationGetTargetMethodInfo a signature where
overloadedMethod _ = relationGetTarget
#endif
-- method Relation::remove_target
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "relation", argType = TInterface (Name {namespace = "Atk", name = "Relation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkRelation", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "target", argType = TInterface (Name {namespace = "Atk", name = "Object"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkObject", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False
foreign import ccall "atk_relation_remove_target" atk_relation_remove_target ::
Ptr Relation -> -- relation : TInterface (Name {namespace = "Atk", name = "Relation"})
Ptr Atk.Object.Object -> -- target : TInterface (Name {namespace = "Atk", name = "Object"})
IO CInt
{- |
Remove the specified AtkObject from the target for the relation.
-}
relationRemoveTarget ::
(B.CallStack.HasCallStack, MonadIO m, IsRelation a, Atk.Object.IsObject b) =>
a
{- ^ /@relation@/: an 'GI.Atk.Objects.Relation.Relation' -}
-> b
{- ^ /@target@/: an 'GI.Atk.Objects.Object.Object' -}
-> m Bool
{- ^ __Returns:__ TRUE if the removal is successful. -}
relationRemoveTarget relation target = liftIO $ do
relation' <- unsafeManagedPtrCastPtr relation
target' <- unsafeManagedPtrCastPtr target
result <- atk_relation_remove_target relation' target'
let result' = (/= 0) result
touchManagedPtr relation
touchManagedPtr target
return result'
#if ENABLE_OVERLOADING
data RelationRemoveTargetMethodInfo
instance (signature ~ (b -> m Bool), MonadIO m, IsRelation a, Atk.Object.IsObject b) => O.MethodInfo RelationRemoveTargetMethodInfo a signature where
overloadedMethod _ = relationRemoveTarget
#endif