Package | Description |
---|---|
net.bytebuddy.implementation |
The implementation package contains any logic for intercepting method calls.
|
net.bytebuddy.implementation.bind.annotation |
This package contains annotations, types and classes that are responsible for binding a method to calling another
method by interpreting annotations that indicate how a method should be bound to another method.
|
net.bytebuddy.implementation.bytecode.assign |
An
Assigner is responsible for transforming
a given TypeDescription into another one. |
net.bytebuddy.implementation.bytecode.assign.primitive |
Assigner implementations of this package
are capable of handling primitive types or the void type. |
net.bytebuddy.implementation.bytecode.assign.reference |
Assigner implementations of this package
are capable of assigning non-primitive types to each other. |
Modifier and Type | Field and Description |
---|---|
protected Assigner.Typing |
MethodCall.typing
Indicates if dynamic type castings should be attempted for incompatible assignments.
|
protected Assigner.Typing |
InvokeDynamic.typing
Indicates if dynamic type castings should be attempted for incompatible assignments.
|
protected Assigner.Typing |
FixedValue.typing
Indicates if dynamic type castings should be attempted for incompatible assignments.
|
protected Assigner.Typing |
FieldAccessor.typing
Indicates if dynamic type castings should be attempted for incompatible assignments.
|
Modifier and Type | Method and Description |
---|---|
StackManipulation |
MethodCall.TerminationHandler.resolve(MethodDescription invokedMethod,
MethodDescription interceptedMethod,
Assigner assigner,
Assigner.Typing typing)
Returns a stack manipulation that handles the method return.
|
StackManipulation |
MethodCall.TerminationHandler.ForMethodReturn.resolve(MethodDescription invokedMethod,
MethodDescription interceptedMethod,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.TerminationHandler.ForChainedInvocation.resolve(MethodDescription invokedMethod,
MethodDescription interceptedMethod,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.TargetHandler.resolve(MethodDescription invokedMethod,
MethodDescription instrumentedMethod,
TypeDescription instrumentedType,
Assigner assigner,
Assigner.Typing typing)
Creates a stack manipulation that represents the method's invocation.
|
StackManipulation |
MethodCall.TargetHandler.ForSelfOrStaticInvocation.resolve(MethodDescription invokedMethod,
MethodDescription instrumentedMethod,
TypeDescription instrumentedType,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.TargetHandler.ForConstructingInvocation.resolve(MethodDescription invokedMethod,
MethodDescription instrumentedMethod,
TypeDescription instrumentedType,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.TargetHandler.ForStaticField.resolve(MethodDescription invokedMethod,
MethodDescription instrumentedMethod,
TypeDescription instrumentedType,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.TargetHandler.ForInstanceField.resolve(MethodDescription invokedMethod,
MethodDescription instrumentedMethod,
TypeDescription instrumentedType,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.TargetHandler.ForMethodParameter.resolve(MethodDescription invokedMethod,
MethodDescription instrumentedMethod,
TypeDescription instrumentedType,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
InvokeDynamic.TerminationHandler.resolve(MethodDescription interceptedMethod,
TypeDescription returnType,
Assigner assigner,
Assigner.Typing typing)
Returns a stack manipulation that handles the method return.
|
StackManipulation |
InvokeDynamic.TerminationHandler.ForMethodReturn.resolve(MethodDescription interceptedMethod,
TypeDescription returnType,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
InvokeDynamic.TerminationHandler.ForChainedInvocation.resolve(MethodDescription interceptedMethod,
TypeDescription returnType,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.Target.Resolved |
InvokeDynamic.InvocationProvider.Target.resolve(TypeDescription instrumentedType,
Assigner assigner,
Assigner.Typing typing)
Resolves the target.
|
InvokeDynamic.InvocationProvider.Target.Resolved |
InvokeDynamic.InvocationProvider.Target.ForMethodDescription.resolve(TypeDescription instrumentedType,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.Target.Resolved |
InvokeDynamic.InvocationProvider.Default.Target.resolve(TypeDescription instrumentedType,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing)
Resolves an argument provider.
|
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForInterceptedMethodInstanceAndParameters.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForInterceptedMethodParameters.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ConstantPoolWrapper.WrappingArgumentProvider.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForThisInstance.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForStaticField.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForInstanceField.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForExistingField.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForMethodParameter.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForExplicitTypedMethodParameter.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForBooleanConstant.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForByteConstant.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForShortConstant.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForCharacterConstant.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForIntegerConstant.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForLongConstant.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForFloatConstant.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForDoubleConstant.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForStringConstant.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForClassConstant.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForEnumerationValue.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForNullValue.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic.InvocationProvider.ArgumentProvider.Resolved |
InvokeDynamic.InvocationProvider.ArgumentProvider.ForJavaInstance.resolve(TypeDescription instrumentedType,
MethodDescription instrumentedMethod,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing)
Loads the argument that is represented by this instance onto the operand stack.
|
StackManipulation |
MethodCall.ArgumentLoader.ForNullConstant.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForThisReference.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForOwnType.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForMethodParameter.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForStaticField.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForInstanceField.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForExistingField.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForBooleanConstant.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForByteConstant.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForShortConstant.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForCharacterConstant.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForIntegerConstant.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForLongConstant.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForFloatConstant.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForDoubleConstant.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForTextConstant.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForClassConstant.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForEnumerationValue.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
MethodCall.ArgumentLoader.ForJavaInstance.resolve(TypeDescription instrumentedType,
MethodDescription interceptedMethod,
ParameterDescription target,
Assigner assigner,
Assigner.Typing typing) |
MethodCall |
MethodCall.withAssigner(Assigner assigner,
Assigner.Typing typing)
Defines an assigner to be used for assigning values to the parameters of the invoked method.
|
InvokeDynamic |
InvokeDynamic.withAssigner(Assigner assigner,
Assigner.Typing typing)
Instructs this implementation to use the provided assigner and decides if the assigner should apply
dynamic typing.
|
InvokeDynamic.WithImplicitArguments |
InvokeDynamic.WithImplicitArguments.withAssigner(Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic |
InvokeDynamic.WithImplicitFieldType.withAssigner(Assigner assigner,
Assigner.Typing typing) |
InvokeDynamic |
InvokeDynamic.WithImplicitArgumentType.withAssigner(Assigner assigner,
Assigner.Typing typing) |
Implementation |
FixedValue.AssignerConfigurable.withAssigner(Assigner assigner,
Assigner.Typing typing)
Defines an explicit assigner to this fixed value implementation.
|
Implementation |
FixedValue.ForOriginType.withAssigner(Assigner assigner,
Assigner.Typing typing) |
Implementation |
FixedValue.ForPoolValue.withAssigner(Assigner assigner,
Assigner.Typing typing) |
Implementation |
FixedValue.ForStaticField.withAssigner(Assigner assigner,
Assigner.Typing typing) |
Implementation |
FieldAccessor.AssignerConfigurable.withAssigner(Assigner assigner,
Assigner.Typing typing)
Returns a field accessor that is identical to this field accessor but uses the given assigner
and runtime type use configuration.
|
Implementation |
FieldAccessor.ForUnnamedField.withAssigner(Assigner assigner,
Assigner.Typing typing) |
Implementation |
FieldAccessor.ForNamedField.withAssigner(Assigner assigner,
Assigner.Typing typing) |
Constructor and Description |
---|
AbstractDelegator(MethodDescription.InDefinedShape bootstrapMethod,
List<?> handleArguments,
InvokeDynamic.InvocationProvider invocationProvider,
InvokeDynamic.TerminationHandler terminationHandler,
Assigner assigner,
Assigner.Typing typing)
Creates a new abstract delegator for a dynamic method invocation.
|
FieldAccessor(Assigner assigner,
Assigner.Typing typing)
Creates a new field accessor.
|
FixedValue(Assigner assigner,
Assigner.Typing typing)
Creates a new fixed value implementation.
|
ForNamedField(Assigner assigner,
Assigner.Typing typing,
String fieldName)
Creates a field accessor implementation for a field of a given name.
|
ForOriginType(Assigner assigner,
Assigner.Typing typing)
Creates a new fixed value appender for the origin type.
|
ForStaticField(Object fixedValue,
Assigner assigner,
Assigner.Typing typing)
Creates a new static field fixed value implementation with a random name for the field containing the fixed
value.
|
ForStaticField(String fieldName,
Object fixedValue,
Assigner assigner,
Assigner.Typing typing)
Creates a new static field fixed value implementation.
|
ForUnnamedField(Assigner assigner,
Assigner.Typing typing,
FieldAccessor.FieldNameExtractor fieldNameExtractor)
Creates a new field accessor implementation.
|
ForUnnamedField(Assigner assigner,
Assigner.Typing typing,
FieldAccessor.FieldNameExtractor fieldNameExtractor,
FieldAccessor.FieldLocator.Factory fieldLocatorFactory)
Creates a new field accessor implementation.
|
InvokeDynamic(MethodDescription.InDefinedShape bootstrapMethod,
List<?> handleArguments,
InvokeDynamic.InvocationProvider invocationProvider,
InvokeDynamic.TerminationHandler terminationHandler,
Assigner assigner,
Assigner.Typing typing)
Creates a new invoke dynamic implementation.
|
MethodCall(MethodCall.MethodLocator methodLocator,
MethodCall.TargetHandler targetHandler,
List<MethodCall.ArgumentLoader> argumentLoaders,
MethodCall.MethodInvoker methodInvoker,
MethodCall.TerminationHandler terminationHandler,
Assigner assigner,
Assigner.Typing typing)
Creates a new method call implementation.
|
WithImplicitArguments(MethodDescription.InDefinedShape bootstrapMethod,
List<?> handleArguments,
InvokeDynamic.InvocationProvider invocationProvider,
InvokeDynamic.TerminationHandler terminationHandler,
Assigner assigner,
Assigner.Typing typing)
Creates a new dynamic method invocation with implicit arguments.
|
WithImplicitArgumentType(MethodDescription.InDefinedShape bootstrapMethod,
List<?> handleArguments,
InvokeDynamic.InvocationProvider invocationProvider,
InvokeDynamic.TerminationHandler terminationHandler,
Assigner assigner,
Assigner.Typing typing,
int index)
Creates a new invoke dynamic instance with an implicit field type for the provided value.
|
WithImplicitFieldType(MethodDescription.InDefinedShape bootstrapMethod,
List<?> handleArguments,
InvokeDynamic.InvocationProvider invocationProvider,
InvokeDynamic.TerminationHandler terminationHandler,
Assigner assigner,
Assigner.Typing typing,
Object value)
Creates a new invoke dynamic instance with an implicit field type for the provided value.
|
WithImplicitTarget(MethodDescription.InDefinedShape bootstrapMethod,
List<?> handleArguments,
InvokeDynamic.InvocationProvider invocationProvider,
InvokeDynamic.TerminationHandler terminationHandler,
Assigner assigner,
Assigner.Typing typing)
Creates a new dynamic method invocation with implicit arguments and an implicit invocation target.
|
Modifier and Type | Method and Description |
---|---|
static Assigner.Typing |
RuntimeType.Verifier.check(AnnotatedCodeElement annotatedCodeElement)
Checks if an annotated element should be assigned a value by considering the runtime type.
|
Modifier and Type | Method and Description |
---|---|
protected abstract MethodDelegationBinder.ParameterBinding<?> |
Argument.BindingMechanic.makeBinding(TypeDescription.Generic source,
TypeDescription.Generic target,
int sourceParameterIndex,
Assigner assigner,
Assigner.Typing typing,
int parameterOffset)
Creates a binding that corresponds to this binding mechanic.
|
Modifier and Type | Method and Description |
---|---|
static Assigner.Typing |
Assigner.Typing.of(boolean dynamic)
Resolves a typing constant for the presented boolean where
true indicates that dynamic typing is a legitimate choice. |
static Assigner.Typing |
Assigner.Typing.valueOf(String name)
Returns the enum constant of this type with the specified name.
|
static Assigner.Typing[] |
Assigner.Typing.values()
Returns an array containing the constants of this enum type, in
the order they are declared.
|
Modifier and Type | Method and Description |
---|---|
StackManipulation |
Assigner.assign(TypeDescription.Generic source,
TypeDescription.Generic target,
Assigner.Typing typing) |
StackManipulation |
Assigner.Refusing.assign(TypeDescription.Generic source,
TypeDescription.Generic target,
Assigner.Typing typing) |
Modifier and Type | Method and Description |
---|---|
StackManipulation |
VoidAwareAssigner.assign(TypeDescription.Generic source,
TypeDescription.Generic target,
Assigner.Typing typing) |
StackManipulation |
PrimitiveTypeAwareAssigner.assign(TypeDescription.Generic source,
TypeDescription.Generic target,
Assigner.Typing typing) |
StackManipulation |
PrimitiveBoxingDelegate.assignBoxedTo(TypeDescription.Generic target,
Assigner chainedAssigner,
Assigner.Typing typing)
Creates a stack manipulation that boxes the represented primitive type and applies a chained assignment
to the result of this boxing operation.
|
StackManipulation |
PrimitiveUnboxingDelegate.ExplicitlyTypedUnboxingResponsible.assignUnboxedTo(TypeDescription.Generic targetType,
Assigner assigner,
Assigner.Typing typing) |
StackManipulation |
PrimitiveUnboxingDelegate.UnboxingResponsible.assignUnboxedTo(TypeDescription.Generic target,
Assigner assigner,
Assigner.Typing typing)
Attempts to unbox the represented type in order to assign the unboxed value to the given target type
while using the assigner that is provided by the method call.
|
StackManipulation |
PrimitiveUnboxingDelegate.ImplicitlyTypedUnboxingResponsible.assignUnboxedTo(TypeDescription.Generic target,
Assigner assigner,
Assigner.Typing typing) |
Modifier and Type | Method and Description |
---|---|
StackManipulation |
ReferenceTypeAwareAssigner.assign(TypeDescription.Generic source,
TypeDescription.Generic target,
Assigner.Typing typing) |
Copyright © 2014–2016. All rights reserved.