Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2010 the original author or authors.
   *
   * 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.callbackparams.internal;
 
 import java.util.List;
 import  org.apache.bcel.generic.Type;
 
 
     private final Class topClassInRebytedPackage;
     private final List constructorParamTypes;
 
     TestrunCallbacksConstructors(Class topClassInRebytedPackage) {
         this. = topClassInRebytedPackage;
     }
 
     private List initConstructorParamTypes() {
         Class superClass = .getSuperclass();
         final Constructor[] superClassConstructors =
                 superClass.getDeclaredConstructors();
         List constructorParamTypes0 =
                 new ArrayList(superClassConstructors.length);
         for (int i = 0 ; i < superClassConstructors.length ; ++i) {
             final Constructor c = superClassConstructors[i];
             if (false == isAccessible(c)) {
                 continue;
             }
             final Class[] paramTypes = c.getParameterTypes();
             if (areParamterTypesAccessible(paramTypes)) {
                 constructorParamTypes0.add(Type.getTypes(paramTypes));
             }
         }
         return constructorParamTypes0;
     }
 
     private boolean isAccessible(Constructor c) {
         int modifier = c.getModifiers();
         return Modifier.isPublic(modifier) || Modifier.isProtected(modifier);
     }
 
     private boolean areParamterTypesAccessible(final Class[] paramTypes) {
         for (int i = 0 ; i < paramTypes.length ; ++i) {
             if (false == isParameterTypeAccessible(paramTypes[i])) {
                 return false;
             }
         }
         return true;
     }
 
     private boolean isParameterTypeAccessible(Class param) {
         if (param.isPrimitive()) {
             return true;
         } else if (param.isArray()) {
             return isParameterTypeAccessible(param.getComponentType());
         } else {
             return isClassAccessible(param);
         }
     }
 
     private boolean isClassAccessible(Class classOrInterf) {
         final int modifiers = classOrInterf.getModifiers();
         if (Modifier.isProtected(modifiers)) {
             return classOrInterf.isAssignableFrom()
                     || classOrInterf.getDeclaringClass()
                     .isAssignableFrom();
         } else if (false == Modifier.isPublic(modifiers)) {
             return false;
         } else if (classOrInterf.isAssignableFrom()) {
             return true;
         } else {
             Class enclosingClass = classOrInterf.getDeclaringClass();
             return null == enclosingClass || isClassAccessible(enclosingClass);
         }
     }
 
     boolean needsConstructorModifications(String className) {
         return .getName().equals(className)
                 || TestrunCallbacks.class.getName().equals(className);
     }
    void modifyConstructors(String classNameClassBytecodeBuilder cbb) {
        if (.getName().equals(className)) {
            cbb.setNewSuperClass(TestrunCallbacks.class.getName());
        } else if (TestrunCallbacks.class.getName().equals(className)) {
                    .getSuperclass().getName());
        } else {
            /* No constructor-modifications are needed ... */
        }
    }
New to GrepCode? Check out our FAQ X