// Path: cdi-properties-main/src/main/java/com/byteslounge/cdi/exception/ExtensionInitializationException.java
// public class ExtensionInitializationException extends RuntimeException {
// 
//     private static final long serialVersionUID = 1L;
// 
//     public ExtensionInitializationException(String message) {
//         super(message);
//     }
// 
//     public ExtensionInitializationException(Throwable cause) {
//         super(cause);
//     }
// 
//     public ExtensionInitializationException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
// }
// 
// Path: cdi-properties-main/src/main/java/com/byteslounge/cdi/utils/MessageUtils.java
// public class MessageUtils {
// 
//     private MessageUtils() {
//     }
// 
//     /**
//      * Builds a textual representation of an {@link AnnotatedMethod}
//      * 
//      * @param method
//      *            The {@link AnnotatedMethod} instance
//      * @return A textual representation of the {@link AnnotatedMethod}
//      */
//     public static String getMethodDefinition(AnnotatedMethod<?> method) {
//         return method.getJavaMember().getDeclaringClass().getName() + "." + method.getJavaMember().getName() + "()";
//     }
// 
// }


import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.Dependent;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.context.SessionScoped;
import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedParameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.byteslounge.cdi.annotation.Property;
import com.byteslounge.cdi.exception.ExtensionInitializationException;
import com.byteslounge.cdi.utils.MessageUtils;
                viewScopedClass = Class.forName("javax.faces.view.ViewScoped");
            } catch (Exception e) {
                // JEE 6 environment
                if (logger.isDebugEnabled()) {
                    logger.debug("Class javax.faces.view.ViewScoped was not found: Running in a Java EE 6 environment.");
                }
            }
            if (viewScopedClass != null) {
                if (annotation.annotationType().equals(viewScopedClass)) {
                    return false;
                }
            }
        }
        return true;
    }

    /**
     * Checks if a custom injected parameter has any field annotated with
     * {@link Property} (this function calls itself recursively).
     * 
     * @param originalType
     *            The type being checked
     * @param type
     *            The current type or original type super class being checked
     *            (this function calls itself recursively).
     */
    private void checkPropertyField(Class<?> originalType, Class<?> type) {
        for (Field field : type.getDeclaredFields()) {
            for (Annotation annotation : field.getAnnotations()) {
                if (annotation.annotationType().equals(Property.class)) {
// Path: cdi-properties-main/src/main/java/com/byteslounge/cdi/exception/ExtensionInitializationException.java
// public class ExtensionInitializationException extends RuntimeException {
// 
//     private static final long serialVersionUID = 1L;
// 
//     public ExtensionInitializationException(String message) {
//         super(message);
//     }
// 
//     public ExtensionInitializationException(Throwable cause) {
//         super(cause);
//     }
// 
//     public ExtensionInitializationException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
// }
// 
// Path: cdi-properties-main/src/main/java/com/byteslounge/cdi/utils/MessageUtils.java
// public class MessageUtils {
// 
//     private MessageUtils() {
//     }
// 
//     /**
//      * Builds a textual representation of an {@link AnnotatedMethod}
//      * 
//      * @param method
//      *            The {@link AnnotatedMethod} instance
//      * @return A textual representation of the {@link AnnotatedMethod}
//      */
//     public static String getMethodDefinition(AnnotatedMethod<?> method) {
//         return method.getJavaMember().getDeclaringClass().getName() + "." + method.getJavaMember().getName() + "()";
//     }
// 
// }


// Path: cdi-properties-main/src/main/java/com/byteslounge/cdi/resolver/verifier/DependentResolverMethodParametersVerifier.java
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.Dependent;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.context.SessionScoped;
import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedParameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.byteslounge.cdi.annotation.Property;
import com.byteslounge.cdi.exception.ExtensionInitializationException;
import com.byteslounge.cdi.utils.MessageUtils;

                viewScopedClass = Class.forName("javax.faces.view.ViewScoped");
            } catch (Exception e) {
                // JEE 6 environment
                if (logger.isDebugEnabled()) {
                    logger.debug("Class javax.faces.view.ViewScoped was not found: Running in a Java EE 6 environment.");
                }
            }
            if (viewScopedClass != null) {
                if (annotation.annotationType().equals(viewScopedClass)) {
                    return false;
                }
            }
        }
        return true;
    }

    /**
     * Checks if a custom injected parameter has any field annotated with
     * {@link Property} (this function calls itself recursively).
     * 
     * @param originalType
     *            The type being checked
     * @param type
     *            The current type or original type super class being checked
     *            (this function calls itself recursively).
     */
    private void checkPropertyField(Class<?> originalType, Class<?> type) {
        for (Field field : type.getDeclaredFields()) {
            for (Annotation annotation : field.getAnnotations()) {
                if (annotation.annotationType().equals(Property.class)) {
                    throw new ExtensionInitializationException(