/******************************************************************************* * Copyright (c) 2012 BMW Car IT and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.jnario.spec.naming; import static com.google.common.base.Joiner.on; import static com.google.common.collect.Iterables.transform; import java.util.List; import org.eclipse.xtext.common.types.JvmFormalParameter; import org.eclipse.xtext.common.types.JvmOperation; import org.eclipse.xtext.common.types.JvmTypeReference; import org.eclipse.xtext.naming.QualifiedName; import com.google.common.base.Function; import com.google.inject.Singleton; /** * @author Sebastian Benz - Initial contribution and API */ @Singleton public class OperationNameProvider implements Function<JvmOperation, QualifiedName>{ private final class Param2Name implements Function<JvmFormalParameter, String> { public String apply(JvmFormalParameter from) { JvmTypeReference type = from.getParameterType(); if(type == null){ return "void"; } return type.getSimpleName(); } } private Param2Name param2Name = new Param2Name(); public QualifiedName apply(JvmOperation from) { StringBuilder sb = new StringBuilder(); sb.append(from.getSimpleName()); appendParameters(sb, from.getParameters()); return QualifiedName.create(sb.toString()); } private void appendParameters(StringBuilder sb, List<JvmFormalParameter> parameters) { if(parameters.isEmpty()){ return; } sb.append("("); sb.append(on(", ").join(transform(parameters, param2Name))); sb.append(")"); } }