001 /*****************************************************************************
002 * Copyright (c) PicoContainer Organization. All rights reserved. *
003 * ------------------------------------------------------------------------- *
004 * The software in this package is published under the terms of the BSD *
005 * style license a copy of which has been included with this distribution in *
006 * the LICENSE.txt file. *
007 * *
008 *****************************************************************************/
009 package org.picocontainer.injectors;
010
011 import org.picocontainer.NameBinding;
012
013 import java.lang.reflect.AccessibleObject;
014 import java.lang.reflect.Constructor;
015 import java.lang.reflect.Method;
016 import java.lang.reflect.Member;
017
018 import com.thoughtworks.paranamer.CachingParanamer;
019 import com.thoughtworks.paranamer.Paranamer;
020
021 public class ParameterNameBinding implements NameBinding {
022 private final AccessibleObject member;
023 private final int index;
024 private final Paranamer paranamer;
025
026 private String name;
027
028 public ParameterNameBinding(Paranamer paranamer, AccessibleObject member, int index) {
029 this.member = member;
030 this.paranamer = paranamer;
031 this.index = index;
032 }
033
034 public String getName() {
035 if (name != null) {
036 return name;
037 }
038 String[] strings = paranamer.lookupParameterNames(member, false);
039 name = strings.length == 0 ? "" : strings[index];
040 return name;
041 }
042 }
043