docs: @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));
  			}
  		}
  	}