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