@SuppressWarnings("checkstyle:npathcomplexity")
	protected void copyNonStaticPublicJvmOperations(JvmGenericType source, JvmGenericType target,
			Set<ActionPrototype> createdActions, Procedure2<? super JvmOperation, ? super ITreeAppendable> bodyBuilder) {
		final Iterable<JvmOperation> operations = Iterables.transform(Iterables.filter(source.getMembers(), it -> {
			if (it instanceof JvmOperation) {
				final JvmOperation op = (JvmOperation) it;
				return !op.isStatic() && op.getVisibility() == JvmVisibility.PUBLIC;
			}
			return false;
		}), it -> (JvmOperation) it);
		for (final JvmOperation operation : operations) {
			final ActionParameterTypes types = this.sarlSignatureProvider.createParameterTypesFromJvmModel(
					operation.isVarArgs(), operation.getParameters());
			final ActionPrototype actSigKey = this.sarlSignatureProvider.createActionPrototype(
					operation.getSimpleName(), types);
			if (createdActions.add(actSigKey)) {
				final JvmOperation newOp = this.typesFactory.createJvmOperation();
				target.getMembers().add(newOp);

				newOp.setAbstract(false);
				newOp.setFinal(false);
				newOp.setNative(false);
				newOp.setStatic(false);
				newOp.setSynchronized(false);
				newOp.setVisibility(JvmVisibility.PUBLIC);

				newOp.setDefault(operation.isDefault());
				newOp.setDeprecated(operation.isDeprecated());
				newOp.setSimpleName(operation.getSimpleName());
				newOp.setStrictFloatingPoint(operation.isStrictFloatingPoint());

				copyTypeParametersFromJvmOperation(operation, newOp);

				for (final JvmTypeReference exception : operation.getExceptions()) {
					newOp.getExceptions().add(cloneWithTypeParametersAndProxies(exception, newOp));
				}

				for (final JvmFormalParameter parameter : operation.getParameters()) {
					final JvmFormalParameter newParam = this.typesFactory.createJvmFormalParameter();
					newOp.getParameters().add(newParam);
					newParam.setName(parameter.getSimpleName());
					newParam.setParameterType(cloneWithTypeParametersAndProxies(parameter.getParameterType(), newOp));
				}

				newOp.setVarArgs(operation.isVarArgs());

				newOp.setReturnType(cloneWithTypeParametersAndProxies(operation.getReturnType(), newOp));

				setBody(newOp, it -> bodyBuilder.apply(operation, it));
			}
		}
	}
@ SuppressWarnings ( "checkstyle:npathcomplexity" ) protected void copyNonStaticPublicJvmOperations ( JvmGenericType source , JvmGenericType target , Set < ActionPrototype > createdActions , Procedure2 < ? super JvmOperation , ? super ITreeAppendable > bodyBuilder ) { final Iterable < JvmOperation > operations = Iterables . transform ( Iterables . filter ( source . getMembers ( ) , it -> { if ( it instanceof JvmOperation ) { final JvmOperation op = ( JvmOperation ) it ; return ! op . isStatic ( ) && op . getVisibility ( ) == JvmVisibility . PUBLIC ; } return false ; } ) , it -> ( JvmOperation ) it ) ; for ( final JvmOperation operation : operations ) { final ActionParameterTypes types = this . sarlSignatureProvider . createParameterTypesFromJvmModel ( operation . isVarArgs ( ) , operation . getParameters ( ) ) ; final ActionPrototype actSigKey = this . sarlSignatureProvider . createActionPrototype ( operation . getSimpleName ( ) , types ) ; if ( createdActions . add ( actSigKey ) ) { final JvmOperation newOp = this . typesFactory . createJvmOperation ( ) ; target . getMembers ( ) . add ( newOp ) ; newOp . setAbstract ( false ) ; newOp . setFinal ( false ) ; newOp . setNative ( false ) ; newOp . setStatic ( false ) ; newOp . setSynchronized ( false ) ; newOp . setVisibility ( JvmVisibility . PUBLIC ) ; newOp . setDefault ( operation . isDefault ( ) ) ; newOp . setDeprecated ( operation . isDeprecated ( ) ) ; newOp . setSimpleName ( operation . getSimpleName ( ) ) ; newOp . setStrictFloatingPoint ( operation . isStrictFloatingPoint ( ) ) ; copyTypeParametersFromJvmOperation ( operation , newOp ) ; for ( final JvmTypeReference exception : operation . getExceptions ( ) ) { newOp . getExceptions ( ) . add ( cloneWithTypeParametersAndProxies ( exception , newOp ) ) ; } for ( final JvmFormalParameter parameter : operation . getParameters ( ) ) { final JvmFormalParameter newParam = this . typesFactory . createJvmFormalParameter ( ) ; newOp . getParameters ( ) . add ( newParam ) ; newParam . setName ( parameter . getSimpleName ( ) ) ; newParam . setParameterType ( cloneWithTypeParametersAndProxies ( parameter . getParameterType ( ) , newOp ) ) ; } newOp . setVarArgs ( operation . isVarArgs ( ) ) ; newOp . setReturnType ( cloneWithTypeParametersAndProxies ( operation . getReturnType ( ) , newOp ) ) ; setBody ( newOp , it -> bodyBuilder . apply ( operation , it ) ) ; } } }
Copy the JVM operations from the source to the destination.

@param source the source.
@param target the destination.
@param createdActions the set of actions that are created before (input) or during (output) the invocation.
@param bodyBuilder the builder of the target's operations.
@since 0.5