001 /******************************************************************************* 002 * Copyright (C) PicoContainer Organization. All rights reserved. 003 * --------------------------------------------------------------------------- 004 * The software in this package is published under the terms of the BSD style 005 * license a copy of which has been included with this distribution in the 006 * LICENSE.txt file. 007 ******************************************************************************/ 008 package org.picocontainer.parameters; 009 010 import java.io.Serializable; 011 import java.lang.annotation.Annotation; 012 import java.lang.reflect.Constructor; 013 import java.lang.reflect.Type; 014 015 import org.picocontainer.ComponentAdapter; 016 import org.picocontainer.NameBinding; 017 import org.picocontainer.Parameter; 018 import org.picocontainer.PicoContainer; 019 import org.picocontainer.PicoVisitor; 020 021 /** 022 * Part of the replacement construct for Parameter.ZERO 023 * @since PicoContainer 2.8 024 */ 025 @SuppressWarnings("serial") 026 public final class DefaultConstructorParameter extends AbstractParameter implements Parameter, Serializable { 027 028 /** 029 * The one and only instance 030 */ 031 public static final DefaultConstructorParameter INSTANCE = new DefaultConstructorParameter(); 032 033 /** 034 * No instantiation 035 */ 036 public void accept(PicoVisitor visitor) { 037 visitor.visitParameter(this); 038 } 039 040 public Resolver resolve(PicoContainer container, 041 ComponentAdapter<?> forAdapter, ComponentAdapter<?> injecteeAdapter, Type expectedType, 042 NameBinding expectedNameBinding, boolean useNames, 043 Annotation binding) { 044 return new Parameter.NotResolved(); 045 } 046 047 public void verify(PicoContainer container, 048 ComponentAdapter<?> adapter, Type expectedType, 049 NameBinding expectedNameBinding, boolean useNames, 050 Annotation binding) { 051 052 if (!(expectedType instanceof Class)) { 053 throw new ClassCastException("Unable to use except for class types. Offending type: " + expectedType); 054 } 055 056 Class<?> type = (Class<?>)expectedType; 057 try { 058 Constructor constructor = type.getConstructor(); 059 } catch (NoSuchMethodException e) { 060 throw new IllegalArgumentException("No default constructor for type " + expectedType,e ); 061 } 062 } 063 064 @Override 065 public String toString() { 066 return "Force Default Constructor Parameter"; 067 } 068 069 /** 070 * Returns true if the object object is a DEFAULT_CONSTRUCTOR object. 071 * {@inheritDoc} 072 * @see java.lang.Object#equals(java.lang.Object) 073 */ 074 @Override 075 public boolean equals(Object other) { 076 if (other == null) { 077 return false; 078 } 079 080 return (other.getClass().getName()).equals(getClass().getName()); 081 } 082 }