Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 /*
  * JBoss, Home of Professional Open Source
  * Copyright 2014, Red Hat, Inc., and individual contributors
  * by the @authors tag. See the copyright.txt in the distribution for a
  * full listing of individual contributors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.jboss.weld.bean;
Resolves decorator method for a given business method.

Author(s):
Jozef Hartinger
    /*
     *  We use this marker because ConcurrentMap does not support null values but we want to keep track of
     *  methods for which there is no decorated method declared by the decorator.
     */
    private static final Object NULL_MARKER = new Object();
    private final ConcurrentMap<MethodObjectcache;
    DecoratedMethods(BeanManagerImpl managerWeldDecorator<?> decorator) {
        this. = Decorators.getDecoratorMethods(managerdecorator);
        this. = new ConcurrentHashMap<MethodObject>();
    }
    public InvokableAnnotatedMethod<?> getDecoratedMethod(Method method) {
        if (!.containsKey(method)) {
            // this is not atomic and we may end up doing method lookup more than once - which is fine
            .putIfAbsent(methodfindMatchingDecoratedMethod(method));
        }
        Object value = .get(method);
        if (value == ) {
            return null;
        } else {
            return Reflections.cast(value);
        }
    }
    private Object findMatchingDecoratedMethod(Method method) {
        for (InvokableAnnotatedMethod<?> decoratedMethod : ) {
            if (decoratedMethod.getJavaMember().equals(method)) {
                return decoratedMethod;
            }
        }
        for (InvokableAnnotatedMethod<?> decoratedMethod : ) {
            if (matches(decoratedMethodmethod)) {
                return decoratedMethod;
            }
        }
        return ;
    }
    private boolean matches(InvokableAnnotatedMethod<?> decoratedMethodMethod candidate) {
        if (candidate.getParameterTypes().length != decoratedMethod.getParameters().size()) {
            return false;
        }
        if (!candidate.getName().equals(decoratedMethod.getJavaMember().getName())) {
            return false;
        }
        for (int i = 0; i < candidate.getParameterTypes().lengthi++) {
            if (!decoratedMethod.getJavaMember().getParameterTypes()[i].isAssignableFrom(candidate.getParameterTypes()[i])) {
                return false;
            }
        }
        return true;
    }
New to GrepCode? Check out our FAQ X