Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2003-2007 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.codehaus.groovy.runtime.callsite;
 
 
 public final class CallSiteArray {
     public final CallSite[] array;
 
     public static final Object [] NOPARAM = new Object[0];
     public final Class owner;
 
     public CallSiteArray(Class ownerString [] names) {
         this. = owner;
          = new CallSite[names.length];
         for (int i = 0; i < .i++) {
             [i] = new AbstractCallSite(thisinames[i]);
         }
     }
 
     public static Object defaultCall(CallSite callSiteObject receiverObject[] argsthrows Throwable {
         return createCallSite(callSitereceiverargs).call(receiverargs);
     }
 
     public static Object defaultCallCurrent(CallSite callSiteGroovyObject receiverObject[] argsthrows Throwable {
         return createCallCurrentSite(callSitereceiverargscallSite.getArray().).callCurrent(receiverargs);
     }
 
     public static Object defaultCallStatic(CallSite callSiteClass receiverObject[] argsthrows Throwable {
         return createCallStaticSite(callSitereceiverargs).callStatic(receiver,args);
     }
 
     public static Object defaultCallConstructor(CallSite callSiteObject receiverObject[] argsthrows Throwable {
         return createCallConstructorSite(callSite, (Classreceiverargs).callConstructor(receiverargs);
     }
 
     private static CallSite createCallStaticSite(CallSite callSiteClass receiverObject[] args) {
         CallSite site;
         MetaClass metaClass = InvokerHelper.getMetaClass(receiver);
         if (metaClass instanceof MetaClassImpl) {
             site = ((MetaClassImpl)metaClass).createStaticSite(callSiteargs);
         }
         else
           site = new StaticMetaClassSite(callSitemetaClass);
 
         replaceCallSite(callSitesite);
         return site;
     }
 
     private static CallSite createCallConstructorSite(CallSite callSiteClass receiverObject[] args) {
        MetaClass metaClass = InvokerHelper.getMetaClass(receiver);
 
        CallSite site;
        if (metaClass instanceof MetaClassImpl) {
            site = ((MetaClassImpl)metaClass).createConstructorSite(callSiteargs);
        }
        else
          site = new MetaClassConstructorSite(callSitemetaClass);
 
         replaceCallSite(callSitesite);
         return site;
     }
 
     private static CallSite createCallCurrentSite(CallSite callSiteGroovyObject receiverObject[] argsClass sender) {
         CallSite site;
         if (receiver instanceof GroovyInterceptable)
           site = new PogoInterceptableSite(callSite);
         else {
             MetaClass metaClass = receiver.getMetaClass();
             if (receiver.getClass() != metaClass.getTheClass() && !metaClass.getTheClass().isInterface()) {
                 site = new PogoInterceptableSite(callSite);
             }
             else
                 if (metaClass instanceof MetaClassImpl) {
                     site = ((MetaClassImpl)metaClass).createPogoCallCurrentSite(callSitesenderargs);
                 }
                 else
                   site = new PogoMetaClassSite(callSitemetaClass);
         }
 
         replaceCallSite(callSitesite);
        return site;
    }
    // for MetaClassImpl we try to pick meta method,
    // otherwise or if method doesn't exist we make call via POJO meta class
    private static CallSite createPojoSite(CallSite callSiteObject receiverObject[] args) {
        final Class klazz = receiver.getClass();
        MetaClass metaClass = InvokerHelper.getMetaClass(receiver);
        if (callSite.getUsage().get() == 0 && metaClass instanceof MetaClassImpl) {
            final MetaClassImpl mci = (MetaClassImplmetaClass;
            final ClassInfo info = mci.getTheCachedClass().;
            if (info.hasPerInstanceMetaClasses()) {
                return new PerInstancePojoMetaClassSite(callSiteinfo);
            } else {
                return mci.createPojoCallSite(callSitereceiverargs);
            }
        }
        ClassInfo info = ClassInfo.getClassInfo(klazz);
        if (info.hasPerInstanceMetaClasses())
          return new PerInstancePojoMetaClassSite(callSiteinfo);
        else
          return new PojoMetaClassSite(callSitemetaClass);
    }
    private static CallSite createPogoSite(CallSite callSiteObject receiverObject[] args) {
        if (receiver instanceof GroovyInterceptable)
          return new PogoInterceptableSite(callSite);
        MetaClass metaClass = ((GroovyObject)receiver).getMetaClass();
        if (metaClass instanceof MetaClassImpl) {
            return ((MetaClassImpl)metaClass).createPogoCallSite(callSiteargs);
        }
        return new PogoMetaClassSite(callSitemetaClass);
    }
    private static CallSite createCallSite(CallSite callSiteObject receiverObject[] args) {
        CallSite site;
        if (receiver == null)
          return new NullCallSite(callSite);
        if (receiver instanceof Class)
          site = createCallStaticSite(callSite, (Classreceiverargs);
        else if (receiver instanceof GroovyObject) {
            site = createPogoSite(callSitereceiverargs);
        } else {
            site = createPojoSite(callSitereceiverargs);
        }
        replaceCallSite(callSitesite);
        return site;
    }
    private static void replaceCallSite(CallSite oldSiteCallSite newSite) {
        oldSite.getArray(). [oldSite.getIndex()] = newSite;
    }
New to GrepCode? Check out our FAQ X