001 /*******************************************************************************
002 * Portions created by Sebastian Thomschke are copyright (c) 2005-2011 Sebastian
003 * Thomschke.
004 *
005 * All Rights Reserved. This program and the accompanying materials
006 * are made available under the terms of the Eclipse Public License v1.0
007 * which accompanies this distribution, and is available at
008 * http://www.eclipse.org/legal/epl-v10.html
009 *
010 * Contributors:
011 * Sebastian Thomschke - initial implementation.
012 *******************************************************************************/
013 package net.sf.oval.context;
014
015 import java.lang.reflect.Method;
016
017 import net.sf.oval.Validator;
018 import net.sf.oval.internal.util.SerializableMethod;
019 import net.sf.oval.internal.util.StringUtils;
020
021 /**
022 * @author Sebastian Thomschke
023 */
024 public class MethodParameterContext extends OValContext
025 {
026 private static final long serialVersionUID = 1L;
027
028 private final SerializableMethod method;
029 private final int parameterIndex;
030 private final String parameterName;
031
032 public MethodParameterContext(final Method method, final int parameterIndex, final String parameterName)
033 {
034 this.method = SerializableMethod.getInstance(method);
035 this.parameterIndex = parameterIndex;
036 this.parameterName = parameterName == null ? "param" + parameterIndex : parameterName;
037 this.compileTimeType = method.getParameterTypes()[parameterIndex];
038 }
039
040 /**
041 * @return Returns the method.
042 */
043 public Method getMethod()
044 {
045 return method.getMethod();
046 }
047
048 /**
049 * @return Returns the parameterIndex.
050 */
051 public int getParameterIndex()
052 {
053 return parameterIndex;
054 }
055
056 /**
057 * @return the parameterName
058 */
059 public String getParameterName()
060 {
061 return parameterName;
062 }
063
064 /**
065 * {@inheritDoc}
066 */
067 @Override
068 public String toString()
069 {
070 return method.getDeclaringClass().getName() + "." + method.getName() + "("
071 + StringUtils.implode(method.getParameterTypes(), ",") + ") "
072 + Validator.getMessageResolver().getMessage("net.sf.oval.context.MethodParameterContext.parameter")
073 + " " + parameterIndex
074 + (parameterName == null || parameterName.length() == 0 ? "" : " (" + parameterName + ")");
075 }
076 }