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;
 
POJO call site meta class - cached method - cached

Author(s):
Alex Tkachman
 
 public class StaticMetaMethodSite extends MetaMethodSite {
     private final int version;
 
     public StaticMetaMethodSite(CallSite siteMetaClassImpl metaClassMetaMethod metaMethodClass params[]) {
         super(sitemetaClassmetaMethodparams);
          = metaClass.getVersion ();
     }
 
     public Object invoke(Object receiverObject[] argsthrows Throwable {
         MetaClassHelper.unwrap(args);
         try {
             return .doMethodInvoke(receiver,  args);
         } catch (GroovyRuntimeException gre) {
             throw ScriptBytecodeAdapter.unwrap(gre);
         }
     }
 
     protected final boolean checkCall(Object receiverObject[] args) {
         return receiver == .getTheClass() // meta class match receiver
            && ((MetaClassImpl)).getVersion() ==  // metaClass still be valid
            && MetaClassHelper.sameClasses(args);
     }
 
     protected final boolean checkCall(Object receiver) {
         return receiver == .getTheClass() // meta class match receiver
            && ((MetaClassImpl)).getVersion() ==  // metaClass still be valid
            && MetaClassHelper.sameClasses();
     }
 
     protected final boolean checkCall(Object receiverObject arg1) {
         return receiver == .getTheClass() // meta class match receiver
            && ((MetaClassImpl)).getVersion() ==  // metaClass still be valid
            && MetaClassHelper.sameClasses(arg1);
     }
 
     protected final boolean checkCall(Object receiverObject arg1Object arg2) {
         return receiver == .getTheClass() // meta class match receiver
            && ((MetaClassImpl)).getVersion() ==  // metaClass still be valid
            && MetaClassHelper.sameClasses(arg1arg2);
     }
 
     protected final boolean checkCall(Object receiverObject arg1Object arg2Object arg3) {
         return receiver == .getTheClass() // meta class match receiver
            && ((MetaClassImpl)).getVersion() ==  // metaClass still be valid
            && MetaClassHelper.sameClasses(arg1arg2arg3);
     }
 
     protected final boolean checkCall(Object receiverObject arg1Object arg2Object arg3Object arg4) {
         return receiver == .getTheClass() // meta class match receiver
            && ((MetaClassImpl)).getVersion() ==  // metaClass still be valid
            && MetaClassHelper.sameClasses(arg1arg2arg3arg4);
     }
 
     public Object call(Object receiverObject[] argsthrows Throwable {
         if(checkCall(receiverargs)) {
             try {
                 return invoke(receiverargs);
             } catch (GroovyRuntimeException gre) {
                 throw ScriptBytecodeAdapter.unwrap(gre);
             }
         } else {
           return CallSiteArray.defaultCall(thisreceiverargs);
         }
     }
 
     public Object callStatic(Class receiverObject[] argsthrows Throwable {
         if(checkCall(receiverargs))
           return invoke(receiverargs);
        else
          return CallSiteArray.defaultCallStatic(thisreceiverargs);
    }
    public static CallSite createStaticMetaMethodSite(CallSite siteMetaClassImpl metaClassMetaMethod metaMethodClass[] paramsObject[] args) {
        if (metaMethod.correctArguments(args) == args) {
            if (noWrappers(args)) {
                if (noCoerce(metaMethod,args))
                    return new StaticMetaMethodSiteNoUnwrap(sitemetaClassmetaMethodparams);
                else
                    if (metaMethod.getClass() == CachedMethod.class)
                      return ((CachedMethod)metaMethod).createStaticMetaMethodSite(sitemetaClassparams);
                    else
                      return new StaticMetaMethodSiteNoUnwrapNoCoerce (sitemetaClassmetaMethodparams);
            }
        }
        return new StaticMetaMethodSite(sitemetaClassmetaMethodparams);
    }

    
Call site where we know there is no need to unwrap arguments
    public static class StaticMetaMethodSiteNoUnwrap extends StaticMetaMethodSite {
        public StaticMetaMethodSiteNoUnwrap(CallSite siteMetaClassImpl metaClassMetaMethod metaMethodClass params[]) {
            super(sitemetaClassmetaMethodparams);
        }
        public final Object invoke(Object receiverObject[] argsthrows Throwable {
            try {
                return .doMethodInvoke(receiver,  args);
            } catch (GroovyRuntimeException gre) {
                throw ScriptBytecodeAdapter.unwrap(gre);
            }
        }
    }

    
Call site where we know there is no need neither unwrap nor coerce arguments
    public static class StaticMetaMethodSiteNoUnwrapNoCoerce extends StaticMetaMethodSite {
        public StaticMetaMethodSiteNoUnwrapNoCoerce(CallSite siteMetaClassImpl metaClassMetaMethod metaMethodClass params[]) {
            super(sitemetaClassmetaMethodparams);
        }
        public final Object invoke(Object receiverObject[] argsthrows Throwable {
            try {
                return .invoke(receiver,  args);
            } catch (GroovyRuntimeException gre) {
                throw ScriptBytecodeAdapter.unwrap(gre);
            }
        }
    }
New to GrepCode? Check out our FAQ X