You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/04/18 19:38:27 UTC

[groovy] branch danielsun/indy-only updated (05f950b -> 8b4dc31)

This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a change to branch danielsun/indy-only
in repository https://gitbox.apache.org/repos/asf/groovy.git.


    from 05f950b  Enable indy by default
     new 4320a7c  Tweak travis configuration file
     new 8b4dc31  Remove most of callsite classes

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .travis.yml                                        |  16 +-
 .../codehaus/groovy/classgen/genArrayAccess.groovy | 149 -------
 src/main/java/groovy/lang/ExpandoMetaClass.java    |  40 --
 src/main/java/groovy/lang/GroovyObject.java        |   6 +-
 src/main/java/groovy/lang/MetaClassImpl.java       | 125 ------
 .../groovy/classgen/asm/CallSiteWriter.java        |   6 -
 .../codehaus/groovy/reflection/CachedClass.java    |  14 -
 .../codehaus/groovy/reflection/CachedMethod.java   |  92 -----
 .../reflection/ClassLoaderForClassArtifacts.java   |  45 +-
 .../groovy/runtime/callsite/AbstractCallSite.java  | 456 ---------------------
 .../groovy/runtime/callsite/CallSiteArray.java     |  98 +----
 .../runtime/callsite/CallSiteAwareMetaMethod.java  |  27 --
 .../runtime/callsite/CallSiteClassLoader.java      |  59 ---
 .../groovy/runtime/callsite/CallSiteGenerator.java | 275 -------------
 .../callsite/ClassMetaClassGetPropertySite.java    |  55 ---
 .../runtime/callsite/ConstructorMetaClassSite.java |  41 --
 .../callsite/ConstructorMetaMethodSite.java        |  65 ---
 .../groovy/runtime/callsite/ConstructorSite.java   | 154 -------
 .../groovy/runtime/callsite/DummyCallSite.java     |  25 --
 .../callsite/GetEffectivePogoFieldSite.java        |  78 ----
 .../callsite/GetEffectivePogoPropertySite.java     |  90 ----
 .../callsite/GetEffectivePojoFieldSite.java        |  60 ---
 .../callsite/GetEffectivePojoPropertySite.java     |  68 ---
 .../runtime/callsite/GroovySunClassLoader.java     |  75 ----
 .../runtime/callsite/MetaClassConstructorSite.java |  53 ---
 .../groovy/runtime/callsite/MetaClassSite.java     |  34 --
 .../groovy/runtime/callsite/MetaMethodSite.java    |  36 --
 .../groovy/runtime/callsite/NullCallSite.java      |  54 ---
 .../callsite/PerInstancePojoMetaClassSite.java     |  45 --
 .../callsite/PlainObjectMetaMethodSite.java        |  53 ---
 .../runtime/callsite/PogoGetPropertySite.java      |  54 ---
 .../runtime/callsite/PogoInterceptableSite.java    |  57 ---
 .../callsite/PogoMetaClassGetPropertySite.java     |  55 ---
 .../groovy/runtime/callsite/PogoMetaClassSite.java |  90 ----
 .../runtime/callsite/PogoMetaMethodSite.java       | 232 -----------
 .../callsite/PojoMetaClassGetPropertySite.java     |  49 ---
 .../groovy/runtime/callsite/PojoMetaClassSite.java |  58 ---
 .../runtime/callsite/PojoMetaMethodSite.java       | 253 ------------
 .../runtime/callsite/StaticMetaClassSite.java      |  70 ----
 .../runtime/callsite/StaticMetaMethodSite.java     | 155 -------
 .../groovy/runtime/dgmimpl/NumberNumberDiv.java    | 305 --------------
 .../runtime/dgmimpl/NumberNumberMetaMethod.java    |  96 +----
 .../groovy/runtime/dgmimpl/NumberNumberMinus.java  | 357 ----------------
 .../runtime/dgmimpl/NumberNumberMultiply.java      | 357 ----------------
 .../groovy/runtime/dgmimpl/NumberNumberPlus.java   | 351 ----------------
 .../runtime/dgmimpl/arrays/ArrayMetaMethod.java    |   4 +-
 .../arrays/BooleanArrayGetAtMetaMethod.java        |  26 --
 .../arrays/BooleanArrayPutAtMetaMethod.java        |  42 --
 .../dgmimpl/arrays/ByteArrayGetAtMetaMethod.java   |  26 --
 .../dgmimpl/arrays/ByteArrayPutAtMetaMethod.java   |  42 --
 .../arrays/CharacterArrayGetAtMetaMethod.java      |  25 --
 .../arrays/CharacterArrayPutAtMetaMethod.java      |  41 --
 .../dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java |  26 --
 .../dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java |  41 --
 .../dgmimpl/arrays/FloatArrayGetAtMetaMethod.java  |  26 --
 .../dgmimpl/arrays/FloatArrayPutAtMetaMethod.java  |  42 --
 .../arrays/IntegerArrayGetAtMetaMethod.java        |  26 --
 .../arrays/IntegerArrayPutAtMetaMethod.java        |  41 --
 .../dgmimpl/arrays/LongArrayGetAtMetaMethod.java   |  26 --
 .../dgmimpl/arrays/LongArrayPutAtMetaMethod.java   |  41 --
 .../dgmimpl/arrays/ObjectArrayGetAtMetaMethod.java |  31 --
 .../dgmimpl/arrays/ObjectArrayPutAtMetaMethod.java |  32 --
 .../dgmimpl/arrays/ShortArrayGetAtMetaMethod.java  |  26 --
 .../dgmimpl/arrays/ShortArrayPutAtMetaMethod.java  |  41 --
 .../groovy/runtime/metaclass/ClosureMetaClass.java |  14 -
 src/test/org/codehaus/groovy/classgen/JO.java      |   1 -
 .../groovy/nio/extensions/NioExtensions.java       |   4 +-
 67 files changed, 24 insertions(+), 5533 deletions(-)
 delete mode 100644 src/main/groovy/org/codehaus/groovy/classgen/genArrayAccess.groovy
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/AbstractCallSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteAwareMetaMethod.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteClassLoader.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/ClassMetaClassGetPropertySite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorMetaClassSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorMetaMethodSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/DummyCallSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePogoFieldSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePogoPropertySite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePojoFieldSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePojoPropertySite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassConstructorSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/MetaMethodSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/NullCallSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/PerInstancePojoMetaClassSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/PlainObjectMetaMethodSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/PogoGetPropertySite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/PogoInterceptableSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaClassGetPropertySite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaClassSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaClassGetPropertySite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaClassSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaClassSite.java
 delete mode 100644 src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite.java


[groovy] 01/02: Tweak travis configuration file

Posted by su...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch danielsun/indy-only
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 4320a7c15237585e0daf57bb15a77cb81f663c5d
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Apr 19 02:00:30 2020 +0800

    Tweak travis configuration file
---
 .travis.yml | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index d246d74..427d4ba 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -25,19 +25,19 @@ install:
 
 matrix:
   include:
-    - env: BC='legacy'
+    - env: BC='indy'
       jdk: openjdk14
-    - env: BC='legacy'
+    - env: BC='indy'
       jdk: openjdk13
-    - env: BC='legacy'
+    - env: BC='indy'
       jdk: openjdk12
-    - env: BC='legacy'
+    - env: BC='indy'
       jdk: openjdk11
-    - env: BC='legacy'
+    - env: BC='indy'
       jdk: openjdk10
-    - env: BC='legacy'
+    - env: BC='indy'
       jdk: oraclejdk9
-    - env: BC='legacy'
+    - env: BC='indy'
       jdk: oraclejdk8
 
     - env: BC='sonar'
@@ -48,7 +48,7 @@ before_script:
 
 script:
   - ./gradlew -version
-  - if [ "$BC" == "legacy" ]; then travis_wait 60 ./gradlew test; elif [ "$BC" == "sonar" ]; then travis_wait 60 ./gradlew sonarqube -Dsonar.login=$SONAR_LOGIN -Pcoverage=true; fi
+  - if [ "$BC" == "indy" ]; then travis_wait 60 ./gradlew test; elif [ "$BC" == "sonar" ]; then travis_wait 60 ./gradlew sonarqube -Dsonar.login=$SONAR_LOGIN -Pcoverage=true; fi
 
 # As recommended in:
 # https://docs.travis-ci.com/user/languages/java/#Caching


[groovy] 02/02: Remove most of callsite classes

Posted by su...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch danielsun/indy-only
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 8b4dc3198f96a4eec38017999757e69f5e484ecd
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Apr 19 03:37:59 2020 +0800

    Remove most of callsite classes
---
 .../codehaus/groovy/classgen/genArrayAccess.groovy | 149 -------
 src/main/java/groovy/lang/ExpandoMetaClass.java    |  40 --
 src/main/java/groovy/lang/GroovyObject.java        |   6 +-
 src/main/java/groovy/lang/MetaClassImpl.java       | 125 ------
 .../groovy/classgen/asm/CallSiteWriter.java        |   6 -
 .../codehaus/groovy/reflection/CachedClass.java    |  14 -
 .../codehaus/groovy/reflection/CachedMethod.java   |  92 -----
 .../reflection/ClassLoaderForClassArtifacts.java   |  45 +-
 .../groovy/runtime/callsite/AbstractCallSite.java  | 456 ---------------------
 .../groovy/runtime/callsite/CallSiteArray.java     |  98 +----
 .../runtime/callsite/CallSiteAwareMetaMethod.java  |  27 --
 .../runtime/callsite/CallSiteClassLoader.java      |  59 ---
 .../groovy/runtime/callsite/CallSiteGenerator.java | 275 -------------
 .../callsite/ClassMetaClassGetPropertySite.java    |  55 ---
 .../runtime/callsite/ConstructorMetaClassSite.java |  41 --
 .../callsite/ConstructorMetaMethodSite.java        |  65 ---
 .../groovy/runtime/callsite/ConstructorSite.java   | 154 -------
 .../groovy/runtime/callsite/DummyCallSite.java     |  25 --
 .../callsite/GetEffectivePogoFieldSite.java        |  78 ----
 .../callsite/GetEffectivePogoPropertySite.java     |  90 ----
 .../callsite/GetEffectivePojoFieldSite.java        |  60 ---
 .../callsite/GetEffectivePojoPropertySite.java     |  68 ---
 .../runtime/callsite/GroovySunClassLoader.java     |  75 ----
 .../runtime/callsite/MetaClassConstructorSite.java |  53 ---
 .../groovy/runtime/callsite/MetaClassSite.java     |  34 --
 .../groovy/runtime/callsite/MetaMethodSite.java    |  36 --
 .../groovy/runtime/callsite/NullCallSite.java      |  54 ---
 .../callsite/PerInstancePojoMetaClassSite.java     |  45 --
 .../callsite/PlainObjectMetaMethodSite.java        |  53 ---
 .../runtime/callsite/PogoGetPropertySite.java      |  54 ---
 .../runtime/callsite/PogoInterceptableSite.java    |  57 ---
 .../callsite/PogoMetaClassGetPropertySite.java     |  55 ---
 .../groovy/runtime/callsite/PogoMetaClassSite.java |  90 ----
 .../runtime/callsite/PogoMetaMethodSite.java       | 232 -----------
 .../callsite/PojoMetaClassGetPropertySite.java     |  49 ---
 .../groovy/runtime/callsite/PojoMetaClassSite.java |  58 ---
 .../runtime/callsite/PojoMetaMethodSite.java       | 253 ------------
 .../runtime/callsite/StaticMetaClassSite.java      |  70 ----
 .../runtime/callsite/StaticMetaMethodSite.java     | 155 -------
 .../groovy/runtime/dgmimpl/NumberNumberDiv.java    | 305 --------------
 .../runtime/dgmimpl/NumberNumberMetaMethod.java    |  96 +----
 .../groovy/runtime/dgmimpl/NumberNumberMinus.java  | 357 ----------------
 .../runtime/dgmimpl/NumberNumberMultiply.java      | 357 ----------------
 .../groovy/runtime/dgmimpl/NumberNumberPlus.java   | 351 ----------------
 .../runtime/dgmimpl/arrays/ArrayMetaMethod.java    |   4 +-
 .../arrays/BooleanArrayGetAtMetaMethod.java        |  26 --
 .../arrays/BooleanArrayPutAtMetaMethod.java        |  42 --
 .../dgmimpl/arrays/ByteArrayGetAtMetaMethod.java   |  26 --
 .../dgmimpl/arrays/ByteArrayPutAtMetaMethod.java   |  42 --
 .../arrays/CharacterArrayGetAtMetaMethod.java      |  25 --
 .../arrays/CharacterArrayPutAtMetaMethod.java      |  41 --
 .../dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java |  26 --
 .../dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java |  41 --
 .../dgmimpl/arrays/FloatArrayGetAtMetaMethod.java  |  26 --
 .../dgmimpl/arrays/FloatArrayPutAtMetaMethod.java  |  42 --
 .../arrays/IntegerArrayGetAtMetaMethod.java        |  26 --
 .../arrays/IntegerArrayPutAtMetaMethod.java        |  41 --
 .../dgmimpl/arrays/LongArrayGetAtMetaMethod.java   |  26 --
 .../dgmimpl/arrays/LongArrayPutAtMetaMethod.java   |  41 --
 .../dgmimpl/arrays/ObjectArrayGetAtMetaMethod.java |  31 --
 .../dgmimpl/arrays/ObjectArrayPutAtMetaMethod.java |  32 --
 .../dgmimpl/arrays/ShortArrayGetAtMetaMethod.java  |  26 --
 .../dgmimpl/arrays/ShortArrayPutAtMetaMethod.java  |  41 --
 .../groovy/runtime/metaclass/ClosureMetaClass.java |  14 -
 src/test/org/codehaus/groovy/classgen/JO.java      |   1 -
 .../groovy/nio/extensions/NioExtensions.java       |   4 +-
 66 files changed, 16 insertions(+), 5525 deletions(-)

diff --git a/src/main/groovy/org/codehaus/groovy/classgen/genArrayAccess.groovy b/src/main/groovy/org/codehaus/groovy/classgen/genArrayAccess.groovy
deleted file mode 100644
index 46521c1..0000000
--- a/src/main/groovy/org/codehaus/groovy/classgen/genArrayAccess.groovy
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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.classgen
-
-// TODO this generator template has drifted apart from the now modified generated classes
-// Is it worth keeping this template and/or getting it back up to date?
-
-println """
-package org.codehaus.groovy.runtime.dgmimpl;
-
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
-import org.codehaus.groovy.reflection.CachedClass;
-import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
-
-public class ArrayOperations {
-  ${genInners()}
-}
-"""
-
-def genInners () {
-    def res = ''
-
-    final Map primitives = [
-            'boolean': 'Boolean',
-            'byte': 'Byte',
-            'char': 'Character',
-            'short': 'Short',
-            'int': 'Integer',
-            'long': 'Long',
-            'float': 'Float',
-            'double': 'Double'
-    ]
-
-    primitives.each {primName, clsName ->
-        res += """
-         public static class ${clsName}ArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
-            private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(${primName}[].class);
-
-            public Class getReturnType() {
-                return ${clsName}.class;
-            }
-
-            public final CachedClass getDeclaringClass() {
-                return ARR_CLASS;
-            }
-
-            public Object invoke(Object object, Object[] args) {
-                final ${primName}[] objects = (${primName}[]) object;
-                return objects[normaliseIndex((Integer) args[0], objects.length)];
-            }
-
-            public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-                if (!(args [0] instanceof Integer))
-                  return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-                else
-                    return new PojoMetaMethodSite(site, metaClass, metaMethod, params) {
-                        public Object invoke(Object receiver, Object[] args) {
-                            final ${primName}[] objects = (${primName}[]) receiver;
-                            return objects[normaliseIndex((Integer) args[0], objects.length)];
-                        }
-
-                        public Object callBinop(Object receiver, Object arg) {
-                            if ((receiver instanceof ${primName}[] && arg instanceof Integer)
-                                    && checkMetaClass()) {
-                                final ${primName}[] objects = (${primName}[]) receiver;
-                                return objects[normaliseIndex((Integer) arg, objects.length)];
-                            }
-                            else
-                              return super.callBinop(receiver,arg);
-                        }
-
-                        public Object invokeBinop(Object receiver, Object arg) {
-                            final ${primName}[] objects = (${primName}[]) receiver;
-                            return objects[normaliseIndex((Integer) arg, objects.length)];
-                        }
-                    };
-            }
-         }
-
-
-        public static class ${clsName}ArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
-            private static final CachedClass OBJECT_CLASS = ReflectionCache.OBJECT_CLASS;
-            private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(${primName}[].class);
-            private static final CachedClass [] PARAM_CLASS_ARR = new CachedClass[] {INTEGER_CLASS, OBJECT_CLASS};
-
-            public ${clsName}ArrayPutAtMetaMethod() {
-                parameterTypes = PARAM_CLASS_ARR;
-            }
-
-            public final CachedClass getDeclaringClass() {
-                return ARR_CLASS;
-            }
-
-            public Object invoke(Object object, Object[] args) {
-                final ${primName}[] objects = (${primName}[]) object;
-                final int index = normaliseIndex((Integer) args[0], objects.length);
-                Object newValue = args[1];
-                if (!(newValue instanceof ${clsName})) {
-                    Number n = (Number) newValue;
-                    objects[index] = ((Number)newValue).${primName}Value();
-                }
-                else
-                  objects[index] = ((${clsName})args[1]).${primName}Value();
-                return null;
-            }
-
-            public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-                if (!(args [0] instanceof Integer) || !(args [1] instanceof ${clsName}))
-                  return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-                else
-                    return new PojoMetaMethodSite(site, metaClass, metaMethod, params) {
-                        public Object call(Object receiver, Object[] args) {
-                            if ((receiver instanceof ${primName}[] && args[0] instanceof Integer && args[1] instanceof ${clsName} )
-                                    && checkMetaClass()) {
-                                final ${primName}[] objects = (${primName}[]) receiver;
-                                objects[normaliseIndex((Integer) args[0], objects.length)] = ((${clsName})args[1]).${primName}Value();
-                                return null;
-                            }
-                            else
-                              return super.call(receiver,args);
-                        }
-                    };
-            }
-        }
-
-       """
-    }
-
-    res
-}
diff --git a/src/main/java/groovy/lang/ExpandoMetaClass.java b/src/main/java/groovy/lang/ExpandoMetaClass.java
index 558531e..4fb3864 100644
--- a/src/main/java/groovy/lang/ExpandoMetaClass.java
+++ b/src/main/java/groovy/lang/ExpandoMetaClass.java
@@ -27,11 +27,6 @@ import org.codehaus.groovy.runtime.DefaultGroovyMethods;
 import org.codehaus.groovy.runtime.InvokerHelper;
 import org.codehaus.groovy.runtime.MetaClassHelper;
 import org.codehaus.groovy.runtime.MethodKey;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.ConstructorMetaMethodSite;
-import org.codehaus.groovy.runtime.callsite.PogoMetaClassSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaClassSite;
-import org.codehaus.groovy.runtime.callsite.StaticMetaClassSite;
 import org.codehaus.groovy.runtime.metaclass.ClosureMetaMethod;
 import org.codehaus.groovy.runtime.metaclass.ClosureStaticMetaMethod;
 import org.codehaus.groovy.runtime.metaclass.DefaultMetaClassInfo;
@@ -1291,33 +1286,10 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
         return false;
     }
 
-    public CallSite createPojoCallSite(CallSite site, Object receiver, Object[] args) {
-        if (invokeMethodMethod != null)
-            return new PojoMetaClassSite(site, this);
 
-        return super.createPojoCallSite(site, receiver, args);
-    }
-
-    public CallSite createStaticSite(CallSite site, Object[] args) {
-        if (invokeStaticMethodMethod != null)
-            return new StaticMetaClassSite(site, this);
-
-        return super.createStaticSite(site, args);
-    }
 
     public boolean hasCustomStaticInvokeMethod() {return invokeStaticMethodMethod!=null; }
 
-    public CallSite createPogoCallSite(CallSite site, Object[] args) {
-        if (invokeMethodMethod != null)
-            return new PogoMetaClassSite(site, this);
-        return super.createPogoCallSite(site, args);
-    }
-
-    public CallSite createPogoCallCurrentSite(CallSite site, Class sender, String name, Object[] args) {
-        if (invokeMethodMethod != null)
-            return new PogoMetaClassSite(site, this);
-        return super.createPogoCallCurrentSite(site, sender, args);
-    }
     
     @Override
     public MetaMethod retrieveConstructor(Object[] args) {
@@ -1327,18 +1299,6 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
         return super.retrieveConstructor(args);
     }
 
-    public CallSite createConstructorSite(CallSite site, Object[] args) {
-        Class[] params = MetaClassHelper.convertToTypeArray(args);
-        MetaMethod method = pickMethod(GROOVY_CONSTRUCTOR, params);
-        if (method != null && method.getParameterTypes().length == args.length) {
-            if (method.getDeclaringClass().getTheClass().equals(getTheClass())) {
-                return new ConstructorMetaMethodSite(site, this, method, params);
-            }
-        }
-
-        return super.createConstructorSite(site, args);
-    }
-
     private class SubClassDefiningClosure extends GroovyObjectSupport {
         private final Class klazz;
 
diff --git a/src/main/java/groovy/lang/GroovyObject.java b/src/main/java/groovy/lang/GroovyObject.java
index 96e85ed..b7882b2 100644
--- a/src/main/java/groovy/lang/GroovyObject.java
+++ b/src/main/java/groovy/lang/GroovyObject.java
@@ -34,7 +34,7 @@ public interface GroovyObject {
      * @param args the arguments to use for the method call
      * @return the result of invoking the method
      */
-    @Internal // marked as internal just for backward compatibility, e.g. AbstractCallSite.createGroovyObjectGetPropertySite will check `isMarkedInternal`
+    @Internal
     default Object invokeMethod(String name, Object args) {
         return getMetaClass().invokeMethod(this, name, args);
     }
@@ -45,7 +45,7 @@ public interface GroovyObject {
      * @param propertyName the name of the property of interest
      * @return the given property
      */
-    @Internal // marked as internal just for backward compatibility, e.g. AbstractCallSite.createGroovyObjectGetPropertySite will check `isMarkedInternal`
+    @Internal
     default Object getProperty(String propertyName) {
         return getMetaClass().getProperty(this, propertyName);
     }
@@ -56,7 +56,7 @@ public interface GroovyObject {
      * @param propertyName the name of the property of interest
      * @param newValue     the new value for the property
      */
-    @Internal // marked as internal just for backward compatibility, e.g. AbstractCallSite.createGroovyObjectGetPropertySite will check `isMarkedInternal`
+    @Internal
     default void setProperty(String propertyName, Object newValue) {
         getMetaClass().setProperty(this, propertyName, newValue);
     }
diff --git a/src/main/java/groovy/lang/MetaClassImpl.java b/src/main/java/groovy/lang/MetaClassImpl.java
index 9e8ab86..f82877f 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -46,16 +46,6 @@ import org.codehaus.groovy.runtime.InvokerHelper;
 import org.codehaus.groovy.runtime.InvokerInvocationException;
 import org.codehaus.groovy.runtime.MetaClassHelper;
 import org.codehaus.groovy.runtime.MethodClosure;
-import org.codehaus.groovy.runtime.callsite.AbstractCallSite;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.ConstructorSite;
-import org.codehaus.groovy.runtime.callsite.MetaClassConstructorSite;
-import org.codehaus.groovy.runtime.callsite.PogoMetaClassSite;
-import org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaClassSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
-import org.codehaus.groovy.runtime.callsite.StaticMetaClassSite;
-import org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite;
 import org.codehaus.groovy.runtime.metaclass.ClosureMetaMethod;
 import org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl;
 import org.codehaus.groovy.runtime.metaclass.MetaMethodIndex;
@@ -1379,31 +1369,6 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
         return true;
     }
 
-    // This method should be called by CallSite only
-    private MetaMethod getMethodWithCachingInternal(Class sender, CallSite site, Class[] params) {
-        if (GroovyCategorySupport.hasCategoryInCurrentThread())
-            return getMethodWithoutCaching(sender, site.getName(), params, false);
-
-        final MetaMethodIndex.Entry e = metaMethodIndex.getMethods(sender, site.getName());
-        if (e == null) {
-            return null;
-        }
-
-        MetaMethodIndex.CacheEntry cacheEntry;
-        final Object methods = e.methods;
-        if (methods == null)
-            return null;
-
-        cacheEntry = e.cachedMethod;
-        if (cacheEntry != null && (sameClasses(cacheEntry.params, params))) {
-            return cacheEntry.method;
-        }
-
-        cacheEntry = new MetaMethodIndex.CacheEntry(params, (MetaMethod) chooseMethod(e.name, methods, params));
-        e.cachedMethod = cacheEntry;
-        return cacheEntry.method;
-    }
-
     private MetaMethod getSuperMethodWithCaching(Object[] arguments, MetaMethodIndex.Entry e) {
         MetaMethodIndex.CacheEntry cacheEntry;
         if (e.methodsForSuper == null)
@@ -3476,96 +3441,6 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
         metaMethodIndex.clearCaches(name);
     }
 
-    /**
-     * Create a CallSite
-     */
-    public CallSite createPojoCallSite(CallSite site, Object receiver, Object[] args) {
-        if (!(this instanceof AdaptingMetaClass)) {
-            Class[] params = MetaClassHelper.convertToTypeArray(args);
-            MetaMethod metaMethod = getMethodWithCachingInternal(getTheClass(), site, params);
-            if (metaMethod != null)
-                return PojoMetaMethodSite.createPojoMetaMethodSite(site, this, metaMethod, params, receiver, args);
-        }
-        return new PojoMetaClassSite(site, this);
-    }
-
-    /**
-     * Create a CallSite
-     */
-    public CallSite createStaticSite(CallSite site, Object[] args) {
-        if (!(this instanceof AdaptingMetaClass)) {
-            Class[] params = MetaClassHelper.convertToTypeArray(args);
-            MetaMethod metaMethod = retrieveStaticMethod(site.getName(), args);
-            if (metaMethod != null)
-                return StaticMetaMethodSite.createStaticMetaMethodSite(site, this, metaMethod, params, args);
-        }
-        return new StaticMetaClassSite(site, this);
-    }
-
-    /**
-     * Create a CallSite
-     */
-    public CallSite createPogoCallSite(CallSite site, Object[] args) {
-        if (!GroovyCategorySupport.hasCategoryInCurrentThread() && !(this instanceof AdaptingMetaClass)) {
-            Class[] params = MetaClassHelper.convertToTypeArray(args);
-            CallSite tempSite = site;
-            if (site.getName().equals("call") && GeneratedClosure.class.isAssignableFrom(theClass)) {
-                // here, we want to point to a method named "doCall" instead of "call"
-                // but we don't want to replace the original call site name, otherwise
-                // we loose the fact that the original method name was "call" so instead
-                // we will point to a metamethod called "doCall"
-                // see GROOVY-5806 for details
-                tempSite = new AbstractCallSite(site.getArray(), site.getIndex(), "doCall");
-            }
-            MetaMethod metaMethod = getMethodWithCachingInternal(theClass, tempSite, params);
-            if (metaMethod != null)
-                return PogoMetaMethodSite.createPogoMetaMethodSite(site, this, metaMethod, params, args);
-        }
-        return new PogoMetaClassSite(site, this);
-    }
-
-    /**
-     * Create a CallSite
-     */
-    public CallSite createPogoCallCurrentSite(CallSite site, Class sender, Object[] args) {
-        if (!GroovyCategorySupport.hasCategoryInCurrentThread() && !(this instanceof AdaptingMetaClass)) {
-            Class[] params = MetaClassHelper.convertToTypeArray(args);
-            MetaMethod metaMethod = getMethodWithCachingInternal(sender, site, params);
-            if (metaMethod != null)
-                return PogoMetaMethodSite.createPogoMetaMethodSite(site, this, metaMethod, params, args);
-        }
-        return new PogoMetaClassSite(site, this);
-    }
-
-    /**
-     * Create a CallSite
-     */
-    public CallSite createConstructorSite(CallSite site, Object[] args) {
-        if (!(this instanceof AdaptingMetaClass)) {
-            Class[] params = MetaClassHelper.convertToTypeArray(args);
-            CachedConstructor constructor = (CachedConstructor) chooseMethod("<init>", constructors, params);
-            if (constructor != null) {
-                return ConstructorSite.createConstructorSite(site, this, constructor, params, args);
-            } else {
-                if (args.length == 1 && args[0] instanceof Map) {
-                    constructor = (CachedConstructor) chooseMethod("<init>", constructors, MetaClassHelper.EMPTY_TYPE_ARRAY);
-                    if (constructor != null) {
-                        return new ConstructorSite.NoParamSite(site, this, constructor, params);
-                    }
-                } else if (args.length == 2 && theClass.getEnclosingClass() != null && args[1] instanceof Map) {
-                    Class enclosingClass = theClass.getEnclosingClass();
-                    String enclosingInstanceParamType = args[0] != null ? args[0].getClass().getName() : "";
-                    if (enclosingClass.getName().equals(enclosingInstanceParamType)) {
-                        constructor = (CachedConstructor) chooseMethod("<init>", constructors, new Class[]{enclosingClass});
-                        if (constructor != null) {
-                            return new ConstructorSite.NoParamSiteInnerClass(site, this, constructor, params);
-                        }
-                    }
-                }
-            }
-        }
-        return new MetaClassConstructorSite(site, this);
-    }
 
     /**
      * Returns the ClassInfo for the contained Class
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java
index b99ffe5..6372e66 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java
@@ -88,7 +88,6 @@ public class CallSiteWriter {
     private static final int
         MOD_PRIVSS = ACC_PRIVATE+ACC_STATIC+ACC_SYNTHETIC,
         MOD_PUBSS  = ACC_PUBLIC+ACC_STATIC+ACC_SYNTHETIC;
-    private static final ClassNode CALLSITE_ARRAY_NODE = ClassHelper.make(CallSite[].class);
     private static final String
         GET_CALLSITE_METHOD     = "$getCallSiteArray",
         CALLSITE_CLASS          = "org/codehaus/groovy/runtime/callsite/CallSite",
@@ -116,11 +115,6 @@ public class CallSiteWriter {
     }
     
     public void makeSiteEntry() {
-        if (controller.isNotClinit()) {
-            controller.getMethodVisitor().visitMethodInsn(INVOKESTATIC, controller.getInternalClassName(), GET_CALLSITE_METHOD, GET_CALLSITE_DESC, false);
-            controller.getOperandStack().push(CALLSITE_ARRAY_NODE);
-            callSiteArrayVarIndex = controller.getCompileStack().defineTemporaryVariable("$local$callSiteArray", CALLSITE_ARRAY_NODE, true);
-        }
     }
     
     public void generateCallSiteArray() {
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
index 3fe83c7..86cedbc 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
@@ -25,7 +25,6 @@ import groovy.lang.MetaClass;
 import groovy.lang.MetaClassImpl;
 import groovy.lang.MetaMethod;
 import org.codehaus.groovy.classgen.asm.BytecodeHelper;
-import org.codehaus.groovy.runtime.callsite.CallSiteClassLoader;
 import org.codehaus.groovy.runtime.metaclass.ClosureMetaClass;
 import org.codehaus.groovy.util.FastArray;
 import org.codehaus.groovy.util.LazyReference;
@@ -135,15 +134,6 @@ public class CachedClass {
         }
     };
 
-    private final LazyReference<CallSiteClassLoader> callSiteClassLoader = new LazyReference<CallSiteClassLoader>(softBundle) {
-        private static final long serialVersionUID = 4410385968428074090L;
-
-        @Override
-        public CallSiteClassLoader initValue() {
-            return AccessController.doPrivileged((PrivilegedAction<CallSiteClassLoader>) () -> new CallSiteClassLoader(CachedClass.this.cachedClass));
-        }
-    };
-
     private final LazyReference<Collection<ClassInfo>> hierarchy = new LazyReference<Collection<ClassInfo>>(softBundle) {
         private static final long serialVersionUID = 7166687623678851596L;
 
@@ -467,10 +457,6 @@ public class CachedClass {
         return ReflectionCache.isAssignableFrom(getTheClass(), argument.getClass());
     }
 
-    public CallSiteClassLoader getCallSiteLoader() {
-        return callSiteClassLoader.get();
-    }
-
     public Collection<ClassInfo> getHierarchy() {
         return hierarchy.get();
     }
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedMethod.java b/src/main/java/org/codehaus/groovy/reflection/CachedMethod.java
index 211079b..1e9e1db 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedMethod.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedMethod.java
@@ -18,16 +18,10 @@
  */
 package org.codehaus.groovy.reflection;
 
-import groovy.lang.MetaClassImpl;
 import groovy.lang.MetaMethod;
 import groovy.lang.MissingMethodException;
 import org.codehaus.groovy.classgen.asm.BytecodeHelper;
 import org.codehaus.groovy.runtime.InvokerInvocationException;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.CallSiteGenerator;
-import org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
-import org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite;
 import org.codehaus.groovy.runtime.metaclass.MethodHelper;
 
 import java.io.Serializable;
@@ -248,92 +242,6 @@ public class CachedMethod extends MetaMethod implements Comparable {
         return ref.get();
     }
 
-    public CallSite createPogoMetaMethodSite(CallSite site, MetaClassImpl metaClass, Class[] params) {
-        if (!skipCompiled) {
-            Constructor constr = getConstructor(pogoCallSiteConstructor);
-            if (constr==null) {
-                if (CallSiteGenerator.isCompilable(this)) {
-                  constr = CallSiteGenerator.compilePogoMethod(this);
-                }
-                if (constr != null) {
-                     pogoCallSiteConstructor = new SoftReference<Constructor> (constr);
-                } else {
-                    skipCompiled = true;
-                }
-            }
-    
-            if (constr!=null) {
-                try {
-                    return (CallSite) constr.newInstance(site, metaClass, this, params, constr);
-                } catch (Error e) {
-                    skipCompiled=true;
-                    throw e;
-                } catch (Throwable e) {
-                    skipCompiled=true;
-                }
-            }
-        }
-        return new PogoMetaMethodSite.PogoCachedMethodSiteNoUnwrapNoCoerce(site, metaClass, this, params);
-    }
-
-
-    public CallSite createPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, Class[] params) {
-        if (!skipCompiled) {
-            Constructor constr = getConstructor(pojoCallSiteConstructor);
-            if (constr==null) {
-                if (CallSiteGenerator.isCompilable(this)) {
-                  constr = CallSiteGenerator.compilePojoMethod(this);
-                }
-                if (constr != null) {
-                    pojoCallSiteConstructor = new SoftReference<Constructor> (constr);
-                } else {
-                    skipCompiled = true;
-                }
-            }
-    
-            if (constr!=null) {
-                try {
-                    return (CallSite) constr.newInstance(site, metaClass, this, params, constr);
-                } catch (Error e) {
-                    skipCompiled=true;
-                    throw e;
-                } catch (Throwable e) {
-                    skipCompiled=true;
-                }
-            }
-        }
-        return new PojoMetaMethodSite.PojoCachedMethodSiteNoUnwrapNoCoerce(site, metaClass, this, params);
-    }
-
-    public CallSite createStaticMetaMethodSite(CallSite site, MetaClassImpl metaClass, Class[] params) {
-        if (!skipCompiled) {
-            Constructor constr = getConstructor(staticCallSiteConstructor);
-            if (constr==null) {
-                if (CallSiteGenerator.isCompilable(this)) {
-                  constr = CallSiteGenerator.compileStaticMethod(this);
-                }
-                if (constr != null) {
-                    staticCallSiteConstructor = new SoftReference<Constructor> (constr);
-                } else {
-                    skipCompiled = true;
-                }
-            }
-    
-            if (constr!=null) {
-                try {
-                    return (CallSite) constr.newInstance(site, metaClass, this, params, constr);
-                } catch (Error e) {
-                    skipCompiled=true;
-                    throw e;
-                } catch (Throwable e) {
-                    skipCompiled=true;
-                }
-            }
-        }
-
-        return new StaticMetaMethodSite.StaticMetaMethodSiteNoUnwrapNoCoerce(site, metaClass, this, params);
-    }
-
     private static class MyComparator implements Comparator, Serializable {
         private static final long serialVersionUID = 8909277090690131302L;
 
diff --git a/src/main/java/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java b/src/main/java/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
index 5087a84..6e47dd4 100644
--- a/src/main/java/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
+++ b/src/main/java/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
@@ -18,28 +18,18 @@
  */
 package org.codehaus.groovy.reflection;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.GroovySunClassLoader;
-
 import java.lang.ref.SoftReference;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.concurrent.atomic.AtomicInteger;
 
 public class ClassLoaderForClassArtifacts extends ClassLoader {
     public final SoftReference<Class> klazz;
-    private final AtomicInteger classNamesCounter = new AtomicInteger(-1);
 
     public ClassLoaderForClassArtifacts(Class klazz) {
         super(klazz.getClassLoader());
         this.klazz = new SoftReference<Class> (klazz);
     }
 
-    public Class define (String name, byte [] bytes) {
+    public Class define (String name, byte[] bytes) {
         Class cls = defineClass(name, bytes, 0, bytes.length, klazz.get().getProtectionDomain());
         resolveClass(cls);
         return cls;
@@ -50,39 +40,6 @@ public class ClassLoaderForClassArtifacts extends ClassLoader {
         if (cls != null)
           return cls;
 
-        if (GroovySunClassLoader.sunVM != null) {
-            cls = GroovySunClassLoader.sunVM.doesKnow(name);
-            if (cls != null)
-              return cls;
-        }
-
         return super.loadClass(name);
     }
-
-    public String createClassName(Method method) {
-        return createClassName(method.getName());
-    }
-
-    public String createClassName(String methodName) {
-        final String name;
-        final String clsName = klazz.get().getName();
-        if (clsName.startsWith("java."))
-            name = clsName.replace('.','_') + "$" + methodName;
-        else
-            name = clsName + "$" + methodName;
-        int suffix = classNamesCounter.getAndIncrement();
-        return suffix == -1? name : name + "$" + suffix;
-    }
-
-    public Constructor defineClassAndGetConstructor(final String name, final byte[] bytes) {
-        final Class cls = AccessController.doPrivileged((PrivilegedAction<Class>) () -> define(name, bytes));
-
-        if (cls != null) {
-            try {
-                return cls.getConstructor(CallSite.class, MetaClassImpl.class, MetaMethod.class, Class[].class, Constructor.class);
-            } catch (NoSuchMethodException e) { //
-            }
-        }
-        return null;
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/AbstractCallSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/AbstractCallSite.java
deleted file mode 100644
index e191fdd..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/AbstractCallSite.java
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClass;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaProperty;
-import groovy.transform.Internal;
-import org.codehaus.groovy.reflection.CachedClass;
-import org.codehaus.groovy.reflection.CachedField;
-import org.codehaus.groovy.reflection.ParameterTypes;
-import org.codehaus.groovy.runtime.ArrayUtil;
-import org.codehaus.groovy.runtime.GroovyCategorySupport;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.runtime.NullObject;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-import org.codehaus.groovy.runtime.wrappers.Wrapper;
-
-import java.lang.reflect.Method;
-
-/**
- * Base class for all call sites.
- */
-public class AbstractCallSite implements CallSite {
-
-    protected final int index;
-    protected final String name;
-    protected final CallSiteArray array;
-
-    public AbstractCallSite(final CallSiteArray array, final int index, final String name) {
-        this.name = name;
-        this.index = index;
-        this.array = array;
-    }
-
-    public AbstractCallSite(final CallSite prev) {
-        this.name = prev.getName();
-        this.index = prev.getIndex();
-        this.array = prev.getArray();
-    }
-
-    @Override
-    public int getIndex() {
-        return index;
-    }
-
-    @Override
-    public CallSiteArray getArray() {
-        return array;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public final Object callSafe(final Object receiver, final Object[] args) throws Throwable {
-        if (receiver == null)
-            return null;
-
-        return call(receiver, args);
-    }
-
-    @Override
-    public final Object callSafe(final Object receiver) throws Throwable {
-        if (receiver == null)
-            return null;
-
-        return call(receiver);
-    }
-
-    @Override
-    public final Object callSafe(final Object receiver, final Object arg1) throws Throwable {
-        if (receiver == null)
-            return null;
-
-        return call(receiver, arg1);
-    }
-
-    @Override
-    public final Object callSafe(final Object receiver, final Object arg1, final Object arg2) throws Throwable {
-        if (receiver == null)
-            return null;
-
-        return call(receiver, arg1, arg2);
-    }
-
-    @Override
-    public final Object callSafe(final Object receiver, final Object arg1, final Object arg2, final Object arg3) throws Throwable {
-        if (receiver == null)
-            return null;
-
-        return call(receiver, arg1, arg2, arg3);
-    }
-
-    @Override
-    public Object callSafe(final Object receiver, final Object arg1, final Object arg2, final Object arg3, final Object arg4) throws Throwable {
-        if (receiver == null)
-            return null;
-
-        return call(receiver, arg1, arg2, arg3, arg4);
-    }
-
-    @Override
-    public Object call(final Object receiver, final Object[] args) throws Throwable {
-        return CallSiteArray.defaultCall(this, receiver, args);
-    }
-
-    @Override
-    public Object call(final Object receiver) throws Throwable {
-        return call(receiver, CallSiteArray.NOPARAM);
-    }
-
-    @Override
-    public Object call(final Object receiver, final Object arg1) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.call(receiver, arg1);
-        }
-        return call(receiver, ArrayUtil.createArray(arg1));
-    }
-
-    @Override
-    public Object call(final Object receiver, final Object arg1, final Object arg2) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.call(receiver, arg1, arg2);
-        }
-        return call(receiver, ArrayUtil.createArray(arg1, arg2));
-    }
-
-    @Override
-    public Object call(final Object receiver, final Object arg1, final Object arg2, final Object arg3) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.call(receiver, arg1, arg2, arg3);
-        }
-        return call(receiver, ArrayUtil.createArray(arg1, arg2, arg3));
-    }
-
-    @Override
-    public Object call(final Object receiver, final Object arg1, final Object arg2, final Object arg3, final Object arg4) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.call(receiver, arg1, arg2, arg3, arg4);
-        }
-        return call(receiver, ArrayUtil.createArray(arg1, arg2, arg3, arg4));
-    }
-
-    @Override
-    public Object callCurrent(final GroovyObject receiver, final Object[] args) throws Throwable {
-        return CallSiteArray.defaultCallCurrent(this, receiver, args);
-    }
-
-    @Override
-    public Object callCurrent(final GroovyObject receiver) throws Throwable {
-        return callCurrent(receiver, CallSiteArray.NOPARAM);
-    }
-
-    @Override
-    public Object callCurrent(final GroovyObject receiver, final Object arg1) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.callCurrent(receiver, arg1);
-        }
-        return callCurrent(receiver, ArrayUtil.createArray(arg1));
-    }
-
-    @Override
-    public Object callCurrent(final GroovyObject receiver, final Object arg1, final Object arg2) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.callCurrent(receiver, arg1, arg2);
-        }
-        return callCurrent(receiver, ArrayUtil.createArray(arg1, arg2));
-    }
-
-    @Override
-    public Object callCurrent(final GroovyObject receiver, final Object arg1, final Object arg2, final Object arg3) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.callCurrent(receiver, arg1, arg2, arg3);
-        }
-        return callCurrent(receiver, ArrayUtil.createArray(arg1, arg2, arg3));
-    }
-
-    @Override
-    public Object callCurrent(final GroovyObject receiver, final Object arg1, final Object arg2, final Object arg3, final Object arg4) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.callCurrent(receiver, arg1, arg2, arg3, arg4);
-        }
-        return callCurrent(receiver, ArrayUtil.createArray(arg1, arg2, arg3, arg4));
-    }
-
-    @Override
-    public Object callStatic(final Class receiver, final Object[] args) throws Throwable {
-        return CallSiteArray.defaultCallStatic(this, receiver, args);
-    }
-
-    @Override
-    public Object callStatic(final Class receiver) throws Throwable {
-        return callStatic(receiver, CallSiteArray.NOPARAM);
-    }
-
-    @Override
-    public Object callStatic(final Class receiver, final Object arg1) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.callStatic(receiver, arg1);
-        }
-        return callStatic(receiver, ArrayUtil.createArray(arg1));
-    }
-
-    @Override
-    public Object callStatic(final Class receiver, final Object arg1, final Object arg2) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.callStatic(receiver, arg1, arg2);
-        }
-        return callStatic(receiver, ArrayUtil.createArray(arg1, arg2));
-    }
-
-    @Override
-    public Object callStatic(final Class receiver, final Object arg1, final Object arg2, final Object arg3) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.callStatic(receiver, arg1, arg2, arg3);
-        }
-        return callStatic(receiver, ArrayUtil.createArray(arg1, arg2, arg3));
-    }
-
-    @Override
-    public Object callStatic(final Class receiver, final Object arg1, final Object arg2, final Object arg3, final Object arg4) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.callStatic(receiver, arg1, arg2, arg3, arg4);
-        }
-        return callStatic(receiver, ArrayUtil.createArray(arg1, arg2, arg3, arg4));
-    }
-
-    @Override
-    public Object callConstructor(final Object receiver, final Object[] args) throws Throwable {
-        return CallSiteArray.defaultCallConstructor(this, receiver, args);
-    }
-
-    @Override
-    public Object callConstructor(final Object receiver) throws Throwable {
-        return callConstructor(receiver, CallSiteArray.NOPARAM);
-    }
-
-    @Override
-    public Object callConstructor(final Object receiver, final Object arg1) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.callConstructor(receiver, arg1);
-        }
-        return callConstructor(receiver, ArrayUtil.createArray(arg1));
-    }
-
-    @Override
-    public Object callConstructor(final Object receiver, final Object arg1, final Object arg2) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.callConstructor(receiver, arg1, arg2);
-        }
-        return callConstructor(receiver, ArrayUtil.createArray(arg1, arg2));
-    }
-
-    @Override
-    public Object callConstructor(final Object receiver, final Object arg1, final Object arg2, final Object arg3) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.callConstructor(receiver, arg1, arg2, arg3);
-        }
-        return callConstructor(receiver, ArrayUtil.createArray(arg1, arg2, arg3));
-    }
-
-    @Override
-    public Object callConstructor(final Object receiver, final Object arg1, final Object arg2, final Object arg3, final Object arg4) throws Throwable {
-        CallSite stored = array.array[index];
-        if (stored!=this) {
-            return stored.callConstructor(receiver, arg1, arg2, arg3, arg4);
-        }
-        return callConstructor(receiver, ArrayUtil.createArray(arg1, arg2, arg3, arg4));
-    }
-
-    static boolean noCoerce(final ParameterTypes metaMethod, final Object[] args) {
-        final CachedClass[] paramClasses = metaMethod.getParameterTypes();
-        if (paramClasses.length != args.length)
-            return false;
-
-        for (int i = 0; i < paramClasses.length; i++) {
-            CachedClass paramClass = paramClasses[i];
-            if (args[i] != null && !paramClass.isDirectlyAssignable(args[i]))
-                return true;
-        }
-        return false;
-    }
-
-    static boolean noWrappers(final Object[] args) {
-        for (int i = 0; i != args.length; i += 1)
-            if (args[i] instanceof Wrapper)
-                return false;
-        return true;
-    }
-
-    @Override
-    public Object callGetProperty(final Object receiver) throws Throwable {
-        return acceptGetProperty(receiver).getProperty(receiver);
-    }
-
-    @Override
-    public Object callGroovyObjectGetProperty(final Object receiver) throws Throwable {
-        if (receiver == null) {
-            try {
-                return InvokerHelper.getProperty(NullObject.getNullObject(), name);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-            return acceptGroovyObjectGetProperty(receiver).getProperty(receiver);
-        }
-    }
-
-    public CallSite acceptGetProperty(final Object receiver) {
-        return createGetPropertySite(receiver);
-    }
-
-    public CallSite acceptGroovyObjectGetProperty(final Object receiver) {
-        return createGroovyObjectGetPropertySite(receiver);
-    }
-
-    protected final CallSite createGetPropertySite(final Object receiver) {
-        if (receiver == null) {
-            return new NullCallSite(this);
-        } else if (receiver instanceof GroovyObject) {
-            return createGroovyObjectGetPropertySite(receiver);
-        } else if (receiver instanceof Class) {
-            return createClassMetaClassGetPropertySite((Class<?>) receiver);
-        }
-        return createPojoMetaClassGetPropertySite(receiver);
-    }
-
-    protected final CallSite createGroovyObjectGetPropertySite(final Object receiver) {
-        Class<?> aClass = receiver.getClass();
-        try {
-            final Method method = aClass.getMethod("getProperty", String.class);
-            if (method != null && (method.isSynthetic() || isMarkedInternal(method)) && ((GroovyObject) receiver).getMetaClass() instanceof MetaClassImpl)
-                return createPogoMetaClassGetPropertySite((GroovyObject) receiver);
-        } catch (NoSuchMethodException e) {
-            // fall threw
-        }
-        if (receiver instanceof Class) {
-            return createClassMetaClassGetPropertySite((Class<?>) receiver);
-        } else {
-            return createPogoGetPropertySite(aClass);
-        }
-    }
-
-    private boolean isMarkedInternal(final Method method) {
-        return method.getAnnotation(Internal.class) != null;
-    }
-
-    @Override
-    public Object getProperty(final Object receiver) throws Throwable {
-        throw new UnsupportedOperationException();
-    }
-
-    private CallSite createPojoMetaClassGetPropertySite(final Object receiver) {
-        final MetaClass metaClass = InvokerHelper.getMetaClass(receiver);
-
-        CallSite site;
-        if (metaClass.getClass() != MetaClassImpl.class || GroovyCategorySupport.hasCategoryInCurrentThread()) {
-            site = new PojoMetaClassGetPropertySite(this);
-        } else {
-            final MetaProperty effective = ((MetaClassImpl) metaClass).getEffectiveGetMetaProperty(receiver.getClass(), receiver, name, false);
-            if (effective != null) {
-                if (effective instanceof CachedField)
-                    site = new GetEffectivePojoFieldSite(this, (MetaClassImpl) metaClass, (CachedField) effective);
-                else
-                    site = new GetEffectivePojoPropertySite(this, (MetaClassImpl) metaClass, effective);
-            } else {
-                site = new PojoMetaClassGetPropertySite(this);
-            }
-        }
-
-        array.array[index] = site;
-        return site;
-    }
-
-    private CallSite createClassMetaClassGetPropertySite(final Class<?> aClass) {
-        CallSite site = new ClassMetaClassGetPropertySite(this, aClass);
-        array.array[index] = site;
-        return site;
-    }
-
-    private CallSite createPogoMetaClassGetPropertySite(final GroovyObject receiver) {
-        MetaClass metaClass = receiver.getMetaClass();
-
-        CallSite site;
-        if (metaClass.getClass() != MetaClassImpl.class || GroovyCategorySupport.hasCategoryInCurrentThread()) {
-            site = new PogoMetaClassGetPropertySite(this, metaClass);
-        } else {
-            final MetaProperty effective = ((MetaClassImpl) metaClass).getEffectiveGetMetaProperty(this.array.owner, receiver, name, false);
-            if (effective != null) {
-                if (effective instanceof CachedField)
-                    site = new GetEffectivePogoFieldSite(this, metaClass, (CachedField) effective);
-                else
-                    site = new GetEffectivePogoPropertySite(this, metaClass, effective);
-            } else {
-                site = new PogoMetaClassGetPropertySite(this, metaClass);
-            }
-        }
-
-        array.array[index] = site;
-        return site;
-    }
-
-    private CallSite createPogoGetPropertySite(final Class<?> aClass) {
-        CallSite site = new PogoGetPropertySite(this, aClass);
-        array.array[index] = site;
-        return site;
-    }
-
-    @Override
-    public final Object callGetPropertySafe(final Object receiver) throws Throwable {
-        if (receiver == null) return null;
-        return callGetProperty(receiver);
-    }
-
-    @Override
-    public final Object callGroovyObjectGetPropertySafe(final Object receiver) throws Throwable {
-        if (receiver == null) return null;
-        return callGroovyObjectGetProperty(receiver);
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteArray.java b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteArray.java
index 5fe58fb..594d907 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteArray.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteArray.java
@@ -18,12 +18,9 @@
  */
 package org.codehaus.groovy.runtime.callsite;
 
-import groovy.lang.GroovyInterceptable;
 import groovy.lang.GroovyObject;
 import groovy.lang.MetaClass;
 import groovy.lang.MetaClassImpl;
-import org.codehaus.groovy.reflection.ClassInfo;
-import org.codehaus.groovy.runtime.GroovyCategorySupport;
 import org.codehaus.groovy.runtime.InvokerHelper;
 
 import java.security.AccessController;
@@ -38,9 +35,7 @@ public final class CallSiteArray {
 
     public CallSiteArray(Class owner, final String[] names) {
         this.owner = owner;
-        this.array = IntStream.range(0, names.length)
-                        .mapToObj(i -> new AbstractCallSite(this, i, names[i]))
-                        .toArray(CallSite[]::new);
+        this.array = null;
     }
 
     public static Object defaultCall(CallSite callSite, Object receiver, Object[] args) throws Throwable {
@@ -60,108 +55,29 @@ public final class CallSiteArray {
     }
 
     private static CallSite createCallStaticSite(CallSite callSite, final Class receiver, Object[] args) {
-        AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
-            try {
-                Class.forName(receiver.getName(), true, receiver.getClassLoader());
-            } catch (Exception e) {
-                // force <clinit>
-            }
-            return null;
-        });
-        MetaClass metaClass = InvokerHelper.getMetaClass(receiver);
-        CallSite site =
-                metaClass instanceof MetaClassImpl
-                        ? ((MetaClassImpl) metaClass).createStaticSite(callSite, args)
-                        : new StaticMetaClassSite(callSite, metaClass);
-
-        replaceCallSite(callSite, site);
-        return site;
+        return null;
     }
 
     private static CallSite createCallConstructorSite(CallSite callSite, Class receiver, Object[] args) {
-        MetaClass metaClass = InvokerHelper.getMetaClass(receiver);
-        CallSite site =
-                metaClass instanceof MetaClassImpl
-                        ? ((MetaClassImpl) metaClass).createConstructorSite(callSite, args)
-                        : new MetaClassConstructorSite(callSite, metaClass);
-
-        replaceCallSite(callSite, site);
-        return site;
+        return null;
     }
 
     private static CallSite createCallCurrentSite(CallSite callSite, GroovyObject receiver, Object[] args, Class sender) {
-        CallSite site;
-        if (receiver instanceof GroovyInterceptable) {
-            site = new PogoInterceptableSite(callSite);
-        } else {
-            MetaClass metaClass = receiver.getMetaClass();
-            Class theClass = metaClass.getTheClass();
-            if (receiver.getClass() != theClass && !theClass.isInterface()) {
-                site = new PogoInterceptableSite(callSite);
-            } else if (metaClass instanceof MetaClassImpl) {
-                site = ((MetaClassImpl) metaClass).createPogoCallCurrentSite(callSite, sender, args);
-            } else {
-                site = new PogoMetaClassSite(callSite, metaClass);
-            }
-        }
-
-        replaceCallSite(callSite, site);
-        return site;
+        return null;
     }
 
     // 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 callSite, Object receiver, Object[] args) {
-        final Class klazz = receiver.getClass();
-        MetaClass metaClass = InvokerHelper.getMetaClass(receiver);
-        if (!GroovyCategorySupport.hasCategoryInCurrentThread() && metaClass instanceof MetaClassImpl) {
-            final MetaClassImpl mci = (MetaClassImpl) metaClass;
-            final ClassInfo info = mci.getTheCachedClass().classInfo;
-            if (info.hasPerInstanceMetaClasses()) {
-                return new PerInstancePojoMetaClassSite(callSite, info);
-            } else {
-                return mci.createPojoCallSite(callSite, receiver, args);
-            }
-        }
-
-        ClassInfo info = ClassInfo.getClassInfo(klazz);
-        if (info.hasPerInstanceMetaClasses()) {
-            return new PerInstancePojoMetaClassSite(callSite, info);
-        } else {
-            return new PojoMetaClassSite(callSite, metaClass);
-        }
+        return null;
     }
 
     private static CallSite createPogoSite(CallSite callSite, Object receiver, Object[] args) {
-        if (receiver instanceof GroovyInterceptable) {
-            return new PogoInterceptableSite(callSite);
-        }
-
-        MetaClass metaClass = ((GroovyObject)receiver).getMetaClass();
-
-        if (metaClass instanceof MetaClassImpl) {
-            return ((MetaClassImpl)metaClass).createPogoCallSite(callSite, args);
-        }
-
-        return new PogoMetaClassSite(callSite, metaClass);
+        return null;
     }
 
     private static CallSite createCallSite(CallSite callSite, Object receiver, Object[] args) {
-        if (receiver == null) {
-            return new NullCallSite(callSite);
-        }
-
-        CallSite site;
-        if (receiver instanceof Class) {
-            site = createCallStaticSite(callSite, (Class) receiver, args);
-        } else if (receiver instanceof GroovyObject) {
-            site = createPogoSite(callSite, receiver, args);
-        } else {
-            site = createPojoSite(callSite, receiver, args);
-        }
-
-        replaceCallSite(callSite, site);
-        return site;
+        return null;
     }
 
     private static void replaceCallSite(CallSite oldSite, CallSite newSite) {
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteAwareMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteAwareMetaMethod.java
deleted file mode 100644
index 42fa764..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteAwareMetaMethod.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
-
-public abstract class CallSiteAwareMetaMethod extends MetaMethod{
-
-    public abstract CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteClassLoader.java b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteClassLoader.java
deleted file mode 100644
index ad62e5f..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteClassLoader.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-public class CallSiteClassLoader extends ClassLoaderForClassArtifacts {
-
-    private static final Set<String> KNOWN_CLASSES = new HashSet<String>();
-    static {
-        Collections.addAll(KNOWN_CLASSES
-                , "org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite"
-                , "org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite"
-                , "org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite"
-                , "org.codehaus.groovy.runtime.callsite.CallSite"
-                , "org.codehaus.groovy.runtime.callsite.CallSiteArray"
-                , "groovy.lang.MetaMethod"
-                , "groovy.lang.MetaClassImpl"
-                );
-    }
-
-    public CallSiteClassLoader(Class klazz) {
-        super(klazz);
-    }
-
-    protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
-        if (KNOWN_CLASSES.contains(name))
-          return getClass().getClassLoader().loadClass(name);
-        else {
-            try {
-                return super.loadClass(name, resolve);
-            }
-            catch (ClassNotFoundException e) {
-                return getClass().getClassLoader().loadClass(name);
-            }
-        }
-    }
-
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
deleted file mode 100644
index 163b3fc..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteGenerator.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import org.codehaus.groovy.classgen.GeneratorContext;
-import org.codehaus.groovy.classgen.asm.BytecodeHelper;
-import org.codehaus.groovy.reflection.CachedClass;
-import org.codehaus.groovy.reflection.CachedMethod;
-import org.codehaus.groovy.reflection.android.AndroidSupport;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Modifier;
-
-public class CallSiteGenerator {
-
-    private CallSiteGenerator() {
-    }
-
-    private static MethodVisitor writeMethod(ClassWriter cw, String name, int argumentCount, final String superClass, CachedMethod cachedMethod, String receiverType, String parameterDescription, boolean useArray) {
-        MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "call" + name, "(L" + receiverType + ";" + parameterDescription + ")Ljava/lang/Object;", null, null);
-        mv.visitCode();
-
-        final Label tryStart = new Label();
-        mv.visitLabel(tryStart);
-
-        // call for checking if method is still valid
-        for (int i = 0; i < argumentCount; ++i) mv.visitVarInsn(Opcodes.ALOAD, i);
-        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, superClass, "checkCall", "(Ljava/lang/Object;" + parameterDescription + ")Z", false);
-        Label l0 = new Label();
-        mv.visitJumpInsn(Opcodes.IFEQ, l0);
-
-        // valid method branch
-
-        Class callClass = cachedMethod.getDeclaringClass().getTheClass();
-        boolean useInterface = callClass.isInterface();
-
-        String type = BytecodeHelper.getClassInternalName(callClass.getName());
-        String descriptor = BytecodeHelper.getMethodDescriptor(cachedMethod.getReturnType(), cachedMethod.getNativeParameterTypes());
-
-        // prepare call
-        int invokeMethodCode = Opcodes.INVOKEVIRTUAL;
-        if (cachedMethod.isStatic()) {
-            invokeMethodCode = Opcodes.INVOKESTATIC;
-        } else {
-            mv.visitVarInsn(Opcodes.ALOAD, 1);
-            BytecodeHelper.doCast(mv, callClass);
-            if (useInterface) invokeMethodCode = Opcodes.INVOKEINTERFACE;
-        }
-
-        Class<?>[] parameters = cachedMethod.getPT();
-        int size = parameters.length;
-        for (int i = 0; i < size; i++) {
-            if (useArray) {
-                // unpack argument from Object[]
-                mv.visitVarInsn(Opcodes.ALOAD, 2);
-                BytecodeHelper.pushConstant(mv, i);
-                mv.visitInsn(Opcodes.AALOAD);
-            } else {
-                mv.visitVarInsn(Opcodes.ALOAD, i+2);
-            }
-
-            // cast argument to parameter class, inclusive unboxing
-            // for methods with primitive types
-            BytecodeHelper.doCast(mv, parameters[i]);
-        }
-
-        // make call
-        mv.visitMethodInsn(invokeMethodCode, type, cachedMethod.getName(), descriptor, useInterface);
-
-        // produce result
-        BytecodeHelper.box(mv, cachedMethod.getReturnType());
-        if (cachedMethod.getReturnType() == void.class) {
-            mv.visitInsn(Opcodes.ACONST_NULL);
-        }
-
-        // return
-        mv.visitInsn(Opcodes.ARETURN);
-
-        // fall back after method change
-        mv.visitLabel(l0);
-        for (int i = 0; i < argumentCount; ++i) mv.visitVarInsn(Opcodes.ALOAD, i);
-        if (!useArray) {
-            mv.visitMethodInsn(Opcodes.INVOKESTATIC, "org/codehaus/groovy/runtime/ArrayUtil", "createArray", "(" + parameterDescription + ")[Ljava/lang/Object;", false);
-        }
-        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "org/codehaus/groovy/runtime/callsite/CallSiteArray", "defaultCall" + name, "(Lorg/codehaus/groovy/runtime/callsite/CallSite;L" + receiverType + ";[Ljava/lang/Object;)Ljava/lang/Object;", false);
-        mv.visitInsn(Opcodes.ARETURN);
-
-        // exception unwrapping for stackless exceptions
-        final Label tryEnd = new Label();
-        mv.visitLabel(tryEnd);
-        final Label catchStart = new Label();
-        mv.visitLabel(catchStart);
-        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "org/codehaus/groovy/runtime/ScriptBytecodeAdapter", "unwrap", "(Lgroovy/lang/GroovyRuntimeException;)Ljava/lang/Throwable;", false);
-        mv.visitInsn(Opcodes.ATHROW);
-        mv.visitTryCatchBlock(tryStart, tryEnd, catchStart, "groovy/lang/GroovyRuntimeException");
-
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-        return mv;
-    }
-
-    public static void genCallWithFixedParams(ClassWriter cw, String name, final String superClass, CachedMethod cachedMethod, String receiverType ) {
-        if (cachedMethod.getParamsCount() > 4) return;
-
-        StringBuilder pdescb = new StringBuilder();
-        final int pc = cachedMethod.getParamsCount();
-        for (int i = 0; i != pc; ++i) pdescb.append("Ljava/lang/Object;");
-
-        writeMethod(cw,name,pc+2,superClass,cachedMethod,receiverType,pdescb.toString(),false);
-    }
-
-    public static void genCallXxxWithArray(ClassWriter cw, final String name, final String superClass, CachedMethod cachedMethod, String receiverType) {
-        writeMethod(cw,name,3,superClass,cachedMethod,receiverType,"[Ljava/lang/Object;",true);
-    }
-
-    private static void genConstructor(ClassWriter cw, final String superClass, String internalName) {
-        MethodVisitor mv;
-        mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "(Lorg/codehaus/groovy/runtime/callsite/CallSite;Lgroovy/lang/MetaClassImpl;Lgroovy/lang/MetaMethod;[Ljava/lang/Class;Ljava/lang/reflect/Constructor;)V", null, null);
-        mv.visitCode();
-        mv.visitVarInsn(Opcodes.ALOAD, 0);
-        mv.visitVarInsn(Opcodes.ALOAD, 1);
-        mv.visitVarInsn(Opcodes.ALOAD, 2);
-        mv.visitVarInsn(Opcodes.ALOAD, 3);
-        mv.visitVarInsn(Opcodes.ALOAD, 4);
-        mv.visitMethodInsn(Opcodes.INVOKESPECIAL, superClass, "<init>", "(Lorg/codehaus/groovy/runtime/callsite/CallSite;Lgroovy/lang/MetaClassImpl;Lgroovy/lang/MetaMethod;[Ljava/lang/Class;)V", false);
-
-        mv.visitVarInsn(Opcodes.ALOAD, 5);
-        mv.visitFieldInsn(Opcodes.PUTSTATIC, internalName, "__constructor__", "Ljava/lang/reflect/Constructor;");
-
-        mv.visitInsn(Opcodes.RETURN);
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    private static void classHeader(ClassWriter cw, String internalName, String superName) {
-        cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC | Opcodes.ACC_SYNTHETIC, internalName, null, superName, null);
-    }
-
-    public static byte[] genPogoMetaMethodSite(CachedMethod cachedMethod, ClassWriter cw, String name) {
-        String internalName = name.replace('.', '/');
-        classHeader(cw, internalName, "org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite");
-        cw.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "__constructor__", "Ljava/lang/reflect/Constructor;", null, null);
-
-        genConstructor(cw, "org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite", internalName);
-
-        genCallXxxWithArray(cw, "Current", "org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite", cachedMethod, "groovy/lang/GroovyObject");
-        genCallXxxWithArray(cw, "", "org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite", cachedMethod, "java/lang/Object");
-
-        genCallWithFixedParams(cw, "Current", "org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite", cachedMethod, "groovy/lang/GroovyObject");
-        genCallWithFixedParams(cw, "", "org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite", cachedMethod, "java/lang/Object");
-
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-
-    public static byte[] genPojoMetaMethodSite(CachedMethod cachedMethod, ClassWriter cw, String name) {
-        String internalName = name.replace('.', '/');
-        classHeader(cw, internalName, "org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite");
-        cw.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "__constructor__", "Ljava/lang/reflect/Constructor;", null, null);
-
-        genConstructor(cw, "org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite", internalName);
-
-        genCallXxxWithArray(cw, "", "org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite", cachedMethod, "java/lang/Object");
-        genCallWithFixedParams(cw, "", "org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite", cachedMethod, "java/lang/Object");
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-
-    public static byte[] genStaticMetaMethodSite(CachedMethod cachedMethod, ClassWriter cw, String name) {
-        String internalName = name.replace('.', '/');
-        classHeader(cw, internalName, "org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite");
-        cw.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "__constructor__", "Ljava/lang/reflect/Constructor;", null, null);
-
-        genConstructor(cw, "org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite", internalName);
-
-        genCallXxxWithArray(cw, "", "org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite", cachedMethod, "java/lang/Object");
-        genCallXxxWithArray(cw, "Static", "org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite", cachedMethod, "java/lang/Class");
-        genCallWithFixedParams(cw, "", "org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite", cachedMethod, "java/lang/Object");
-        genCallWithFixedParams(cw, "Static", "org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite", cachedMethod, "java/lang/Class");
-
-        cw.visitEnd();
-
-        return cw.toByteArray();
-    }
-
-    private static ClassWriter makeClassWriter() {
-        if (VMPluginFactory.getPlugin().getVersion()>=8) {
-            return new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
-        } else {
-            return new ClassWriter(ClassWriter.COMPUTE_MAXS);
-        }
-    }
-
-    public static Constructor compilePogoMethod(CachedMethod cachedMethod) {
-        ClassWriter cw = makeClassWriter();
-
-        final CachedClass declClass = cachedMethod.getDeclaringClass();
-        final CallSiteClassLoader callSiteLoader = declClass.getCallSiteLoader();
-        final String name = callSiteLoader.createClassName(cachedMethod.getName());
-
-        final byte[] bytes = genPogoMetaMethodSite(cachedMethod, cw, name);
-
-        return callSiteLoader.defineClassAndGetConstructor(name, bytes);
-    }
-
-    public static Constructor compilePojoMethod(CachedMethod cachedMethod) {
-        ClassWriter cw = makeClassWriter();
-
-        final CachedClass declClass = cachedMethod.getDeclaringClass();
-        final CallSiteClassLoader callSiteLoader = declClass.getCallSiteLoader();
-        final String name = callSiteLoader.createClassName(cachedMethod.getName());
-
-        final byte[] bytes = genPojoMetaMethodSite(cachedMethod, cw, name);
-
-        return callSiteLoader.defineClassAndGetConstructor(name, bytes);
-    }
-
-    public static Constructor compileStaticMethod(CachedMethod cachedMethod) {
-        ClassWriter cw = makeClassWriter();
-
-        final CachedClass declClass = cachedMethod.getDeclaringClass();
-        final CallSiteClassLoader callSiteLoader = declClass.getCallSiteLoader();
-        final String name = callSiteLoader.createClassName(cachedMethod.getName());
-
-        final byte[] bytes = genStaticMetaMethodSite(cachedMethod, cw, name);
-
-        return callSiteLoader.defineClassAndGetConstructor(name, bytes);
-    }
-
-    public static boolean isCompilable (CachedMethod method) {
-        return (GroovySunClassLoader.sunVM != null || Modifier.isPublic(method.cachedClass.getModifiers()) && method.isPublic() && publicParams(method))
-                && !AndroidSupport.isRunningAndroid() && containsOnlyValidChars(method.getName());
-    }
-
-    private static boolean publicParams(CachedMethod method) {
-        for (Class nativeParamType : method.getNativeParameterTypes()) {
-            if (!Modifier.isPublic(nativeParamType.getModifiers()))
-                return false;
-        }
-        return true;
-    }
-
-    private static boolean containsOnlyValidChars(String name) {
-        // TODO: this might not do enough or too much
-        // But it is a good start without spreading logic everywhere
-        String encoded = GeneratorContext.encodeAsValidClassName(name);
-        return encoded.equals(name);
-    }
-
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/ClassMetaClassGetPropertySite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/ClassMetaClassGetPropertySite.java
deleted file mode 100644
index 749c7bb..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/ClassMetaClassGetPropertySite.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClass;
-import org.codehaus.groovy.reflection.ClassInfo;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-class ClassMetaClassGetPropertySite extends AbstractCallSite {
-    final MetaClass metaClass;
-    private final Class aClass;
-    private final ClassInfo classInfo;
-    private final int version;
-
-    public ClassMetaClassGetPropertySite(CallSite parent, Class aClass) {
-        super(parent);
-        this.aClass = aClass;
-        classInfo = ClassInfo.getClassInfo(aClass);
-        version = classInfo.getVersion();
-        metaClass = classInfo.getMetaClass();
-    }
-
-    public final CallSite acceptGetProperty(Object receiver) {
-        if (receiver != aClass
-            || version != classInfo.getVersion()) // metaClass is invalid
-            return createGetPropertySite(receiver);
-        else
-          return this;
-    }
-
-    public final Object getProperty(Object receiver) throws Throwable{
-        try {
-            return metaClass.getProperty(aClass, name);
-        } catch (GroovyRuntimeException gre) {
-            throw ScriptBytecodeAdapter.unwrap(gre);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorMetaClassSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorMetaClassSite.java
deleted file mode 100644
index 714561e..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorMetaClassSite.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClass;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-public class ConstructorMetaClassSite extends MetaClassSite {
-    public ConstructorMetaClassSite(CallSite site, MetaClass metaClass) {
-        super(site, metaClass);
-    }
-
-    public Object callConstructor(Object receiver, Object[] args) throws Throwable {
-        if (receiver == metaClass.getTheClass()) {
-            try {
-                return metaClass.invokeConstructor(args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-          return CallSiteArray.defaultCallConstructor(this, receiver, args);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorMetaMethodSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorMetaMethodSite.java
deleted file mode 100644
index 0b98ca8..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorMetaMethodSite.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
-import org.codehaus.groovy.runtime.MetaClassHelper;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-/**
- * Call site for invoking static methods
-*   meta class  - cached
-*   method - not cached
-*/
-public class ConstructorMetaMethodSite extends MetaMethodSite {
-
-    private final int version;
-
-    public ConstructorMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod method, Class [] params) {
-        super(site, metaClass, method, params);
-        this.version = metaClass.getVersion();
-    }
-
-    public final Object invoke(Object receiver, Object [] args) throws Throwable{
-        MetaClassHelper.unwrap(args);
-        try {
-            return metaMethod.doMethodInvoke(metaClass.getTheClass(), args);
-        } catch (GroovyRuntimeException gre) {
-            throw ScriptBytecodeAdapter.unwrap(gre);
-        }
-    }
-
-    public final Object callConstructor(Object receiver, Object[] args) throws Throwable {
-        if (receiver == metaClass.getTheClass() // meta class match receiver
-           && ((MetaClassImpl)metaClass).getVersion() == version // metaClass still be valid
-           && MetaClassHelper.sameClasses(params, args) )  
-        {
-            MetaClassHelper.unwrap(args);
-            try {
-                return metaMethod.doMethodInvoke(metaClass.getTheClass(), args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-          return CallSiteArray.defaultCallConstructor(this, receiver, args);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorSite.java
deleted file mode 100644
index 9f50abe..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorSite.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClassImpl;
-import org.codehaus.groovy.reflection.CachedConstructor;
-import org.codehaus.groovy.runtime.MetaClassHelper;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-import java.util.Map;
-
-public class ConstructorSite extends MetaClassSite {
-    final CachedConstructor constructor;
-    final Class[] params;
-    private final int version;
-
-    public ConstructorSite(CallSite site, MetaClassImpl metaClass, CachedConstructor constructor, Class[] params) {
-        super(site, metaClass);
-        this.constructor = constructor;
-        this.params = params;
-        this.version = metaClass.getVersion();
-    }
-
-    public Object callConstructor(Object receiver, Object[] args) throws Throwable {
-        if (checkCall(receiver, args)) {
-            MetaClassHelper.unwrap(args);
-            try {
-                return constructor.doConstructorInvoke(args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else
-            return CallSiteArray.defaultCallConstructor(this, receiver, args);
-    }
-
-    protected final boolean checkCall(Object receiver, Object[] args) {
-        return receiver == metaClass.getTheClass() // meta class match receiver
-                && ((MetaClassImpl) metaClass).getVersion() == version // metaClass still be valid
-                && MetaClassHelper.sameClasses(params, args);
-    }
-
-    public static ConstructorSite createConstructorSite(CallSite site, MetaClassImpl metaClass, CachedConstructor constructor, Class[] params, Object[] args) {
-        if (constructor.correctArguments(args) == args) {
-            if (noWrappers(args)) {
-                if (noCoerce(constructor, args))
-                    return new ConstructorSiteNoUnwrap(site, metaClass, constructor, params);
-                else
-                    return new ConstructorSiteNoUnwrapNoCoerce(site, metaClass, constructor, params);
-            }
-        }
-        return new ConstructorSite(site, metaClass, constructor, params);
-    }
-
-
-    /**
-     * Call site where we know there is no need to unwrap arguments
-     */
-    public static class ConstructorSiteNoUnwrap extends ConstructorSite {
-
-        public ConstructorSiteNoUnwrap(CallSite site, MetaClassImpl metaClass, CachedConstructor constructor, Class[] params) {
-            super(site, metaClass, constructor, params);
-        }
-
-        public final Object callConstructor(Object receiver, Object[] args) throws Throwable {
-            if (checkCall(receiver, args)) {
-                try {
-                    return constructor.doConstructorInvoke(args);
-                } catch (GroovyRuntimeException gre) {
-                    throw ScriptBytecodeAdapter.unwrap(gre);
-                }
-            } else
-                return CallSiteArray.defaultCallConstructor(this, receiver, args);
-        }
-    }
-
-    /**
-     * Call site where we know there is no need neither unwrap nor coerce arguments
-     */
-    public static class ConstructorSiteNoUnwrapNoCoerce extends ConstructorSite {
-
-        public ConstructorSiteNoUnwrapNoCoerce(CallSite site, MetaClassImpl metaClass, CachedConstructor constructor, Class[] params) {
-            super(site, metaClass, constructor, params);
-        }
-
-        public Object callConstructor(Object receiver, Object[] args) throws Throwable {
-            if (checkCall(receiver, args)) {
-                try {
-                    return constructor.invoke(args);
-                } catch (GroovyRuntimeException gre) {
-                    throw ScriptBytecodeAdapter.unwrap(gre);
-                }
-            } else
-                return CallSiteArray.defaultCallConstructor(this, receiver, args);
-        }
-    }
-
-    public static class NoParamSite extends ConstructorSiteNoUnwrapNoCoerce {
-        private static final Object[] NO_ARGS = new Object[0];
-
-        public NoParamSite(CallSite site, MetaClassImpl metaClass, CachedConstructor constructor, Class[] params) {
-            super(site, metaClass, constructor, params);
-        }
-
-        public final Object callConstructor(Object receiver, Object[] args) throws Throwable {
-            if (checkCall(receiver, args)) {
-                final Object bean = constructor.invoke(NO_ARGS);
-                try {
-                    ((MetaClassImpl) metaClass).setProperties(bean, (Map) args[0]);
-                } catch (GroovyRuntimeException gre) {
-                    throw ScriptBytecodeAdapter.unwrap(gre);
-                }
-                return bean;
-            } else
-                return CallSiteArray.defaultCallConstructor(this, receiver, args);
-        }
-    }
-    
-    public static class NoParamSiteInnerClass extends ConstructorSiteNoUnwrapNoCoerce {
-        public NoParamSiteInnerClass(CallSite site, MetaClassImpl metaClass, CachedConstructor constructor, Class[] params) {
-            super(site, metaClass, constructor, params);
-        }
-
-        public final Object callConstructor(Object receiver, Object[] args) throws Throwable {
-            if (checkCall(receiver, args)) {
-                final Object[] newArgs = new Object[] {args[0]};
-                final Object bean = constructor.invoke(newArgs);
-                try {
-                    ((MetaClassImpl) metaClass).setProperties(bean, (Map) args[1]);
-                } catch (GroovyRuntimeException gre) {
-                    throw ScriptBytecodeAdapter.unwrap(gre);
-                }
-                return bean;
-            } else
-                return CallSiteArray.defaultCallConstructor(this, receiver, args);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/DummyCallSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/DummyCallSite.java
deleted file mode 100644
index 584de05..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/DummyCallSite.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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 class DummyCallSite extends AbstractCallSite {
-    public DummyCallSite(CallSiteArray array, int index, String name) {
-        super(array, index,name);
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePogoFieldSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePogoFieldSite.java
deleted file mode 100644
index efa5fb5..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePogoFieldSite.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClass;
-import org.codehaus.groovy.reflection.CachedField;
-import org.codehaus.groovy.runtime.GroovyCategorySupport;
-
-import java.lang.reflect.Field;
-
-public class GetEffectivePogoFieldSite extends AbstractCallSite {
-    private final MetaClass metaClass;
-    private final Field effective;
-
-    public GetEffectivePogoFieldSite(CallSite site, MetaClass metaClass, CachedField effective) {
-        super(site);
-        this.metaClass = metaClass;
-        this.effective = effective.getCachedField();
-    }
-
-    public final Object callGetProperty (Object receiver) throws Throwable {
-        if (GroovyCategorySupport.hasCategoryInCurrentThread() || !(receiver instanceof GroovyObject) || ((GroovyObject) receiver).getMetaClass() != metaClass) {
-            return createGetPropertySite(receiver).getProperty(receiver);
-        } else {
-            return getProperty(receiver);
-        }
-    }
-
-    public final CallSite acceptGetProperty(Object receiver) {
-        if (GroovyCategorySupport.hasCategoryInCurrentThread() || !(receiver instanceof GroovyObject) || ((GroovyObject)receiver).getMetaClass() != metaClass) {
-            return createGetPropertySite(receiver);
-        } else {
-            return this;
-        }
-    }
-
-    public final Object callGroovyObjectGetProperty (Object receiver) throws Throwable {
-        if (GroovyCategorySupport.hasCategoryInCurrentThread() || ((GroovyObject) receiver).getMetaClass() != metaClass) {
-            return createGroovyObjectGetPropertySite(receiver).getProperty(receiver);
-        } else {
-            return getProperty(receiver);
-        }
-    }
-
-    public final CallSite acceptGroovyObjectGetProperty(Object receiver) {
-        if (GroovyCategorySupport.hasCategoryInCurrentThread() || !(receiver instanceof GroovyObject) || ((GroovyObject)receiver).getMetaClass() != metaClass) {
-            return createGroovyObjectGetPropertySite(receiver);
-        } else {
-            return this;
-        }
-    }
-
-    public final Object getProperty(Object receiver) {
-        try {
-            return effective.get(receiver);
-        } catch (IllegalAccessException e) {
-            throw new GroovyRuntimeException("Cannot get the property '" + name + "'.", e);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePogoPropertySite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePogoPropertySite.java
deleted file mode 100644
index d5114e0..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePogoPropertySite.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClass;
-import groovy.lang.MetaProperty;
-import org.codehaus.groovy.runtime.GroovyCategorySupport;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-/**
-* User: applerestore
-* Date: May 21, 2008
-* Time: 10:37:37 AM
-*/
-class GetEffectivePogoPropertySite extends AbstractCallSite {
-    private final MetaClass metaClass;
-    private final MetaProperty effective;
-
-    public GetEffectivePogoPropertySite(CallSite site, MetaClass metaClass, MetaProperty effective) {
-        super(site);
-        this.metaClass = metaClass;
-        this.effective = effective;
-    }
-
-    public final Object callGetProperty (Object receiver) throws Throwable {
-        if (GroovyCategorySupport.hasCategoryInCurrentThread() || !(receiver instanceof GroovyObject) || ((GroovyObject) receiver).getMetaClass() != metaClass) {
-            return createGetPropertySite(receiver).getProperty(receiver);
-        } else {
-            try {
-                return effective.getProperty(receiver);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        }
-    }
-
-    public final CallSite acceptGetProperty(Object receiver) {
-        if (GroovyCategorySupport.hasCategoryInCurrentThread() || !(receiver instanceof GroovyObject) || ((GroovyObject)receiver).getMetaClass() != metaClass) {
-            return createGetPropertySite(receiver);
-        } else {
-            return this;
-        }
-    }
-
-    public final Object callGroovyObjectGetProperty (Object receiver) throws Throwable {
-        if (GroovyCategorySupport.hasCategoryInCurrentThread() || !(receiver instanceof GroovyObject) || ((GroovyObject) receiver).getMetaClass() != metaClass) {
-            return createGetPropertySite(receiver).getProperty(receiver);
-        } else {
-            try {
-                return effective.getProperty(receiver);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        }
-    }
-
-    public final CallSite acceptGroovyObjectGetProperty(Object receiver) {
-        if (GroovyCategorySupport.hasCategoryInCurrentThread() || !(receiver instanceof GroovyObject) || ((GroovyObject)receiver).getMetaClass() != metaClass) {
-            return createGroovyObjectGetPropertySite(receiver);
-        } else {
-            return this;
-        }
-    }
-
-    public final Object getProperty(Object receiver) throws Throwable {
-        try {
-            return effective.getProperty(receiver);
-        } catch (GroovyRuntimeException gre) {
-            throw ScriptBytecodeAdapter.unwrap(gre);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePojoFieldSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePojoFieldSite.java
deleted file mode 100644
index f1c4d71..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePojoFieldSite.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClassImpl;
-import org.codehaus.groovy.reflection.CachedField;
-import org.codehaus.groovy.runtime.GroovyCategorySupport;
-
-import java.lang.reflect.Field;
-
-class GetEffectivePojoFieldSite extends AbstractCallSite {
-    private final MetaClassImpl metaClass;
-    private final Field effective;
-    private final int version;
-
-    public GetEffectivePojoFieldSite(CallSite site, MetaClassImpl metaClass, CachedField effective) {
-        super(site);
-        this.metaClass = metaClass;
-        this.effective = effective.getCachedField();
-        version = metaClass.getVersion();
-    }
-
-//    public final Object callGetProperty (Object receiver) throws Throwable {
-//        return acceptGetProperty(receiver).getProperty(receiver);
-//    }
-
-    public final CallSite acceptGetProperty(Object receiver) {
-        if (GroovyCategorySupport.hasCategoryInCurrentThread() || receiver.getClass() != metaClass.getTheClass()
-            || version != metaClass.getVersion()) { // metaClass is invalid
-            return createGetPropertySite(receiver);
-        } else {
-            return this;
-        }
-    }
-
-    public final Object getProperty(Object receiver) {
-        try {
-            return effective.get(receiver);
-        } catch (IllegalAccessException e) {
-            throw new GroovyRuntimeException("Cannot get the property '" + name + "'.", e);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePojoPropertySite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePojoPropertySite.java
deleted file mode 100644
index 5399d99..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePojoPropertySite.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaProperty;
-import org.codehaus.groovy.runtime.GroovyCategorySupport;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-public class GetEffectivePojoPropertySite extends AbstractCallSite {
-    private final MetaClassImpl metaClass;
-    private final MetaProperty effective;
-    private final int version;
-
-    public GetEffectivePojoPropertySite(CallSite site, MetaClassImpl metaClass, MetaProperty effective) {
-        super(site);
-        this.metaClass = metaClass;
-        this.effective = effective;
-        version = metaClass.getVersion();
-    }
-
-//    public final Object callGetProperty (Object receiver) throws Throwable {
-//        if (GroovyCategorySupport.hasCategoryInCurrentThread() || receiver.getClass() != metaClass.getTheClass()) {
-//            return createGetPropertySite(receiver).getProperty(receiver);
-//        } else {
-//            try {
-//                return effective.getProperty(receiver);
-//            } catch (GroovyRuntimeException gre) {
-//                throw ScriptBytecodeAdapter.unwrap(gre);
-//            }
-//        }
-//    }
-
-    public final CallSite acceptGetProperty(Object receiver) {
-//        if (GroovyCategorySupport.hasCategoryInCurrentThread() || !(receiver instanceof GroovyObject) || ((GroovyObject)receiver).getMetaClass() != metaClass) {
-        if (GroovyCategorySupport.hasCategoryInCurrentThread() || receiver==null || receiver.getClass() != metaClass.getTheClass()
-            || version != metaClass.getVersion()) { // metaClass is invalid
-            return createGetPropertySite(receiver);
-        } else {
-            return this;
-        }
-    }
-
-    public final Object getProperty(Object receiver) throws Throwable {
-        try {
-            return effective.getProperty(receiver);
-        } catch (GroovyRuntimeException gre) {
-            throw ScriptBytecodeAdapter.unwrap(gre);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java b/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
deleted file mode 100644
index 3d504bf..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import org.codehaus.groovy.control.CompilerConfiguration;
-import org.codehaus.groovy.reflection.SunClassLoader;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-public class GroovySunClassLoader extends SunClassLoader {
-
-    public static final SunClassLoader sunVM;
-
-    static {
-        sunVM = AccessController.doPrivileged((PrivilegedAction<SunClassLoader>) () -> {
-            try {
-                if (SunClassLoader.sunVM != null) {
-                    return new GroovySunClassLoader();
-                }
-            } catch (Throwable ignore) {
-            }
-            return null;
-        });
-    }
-
-    protected GroovySunClassLoader() throws Throwable {
-        this(ClassReader.SKIP_CODE);
-    }
-
-    protected GroovySunClassLoader(int parsingOptions) throws Throwable {
-        super();
-        loadAbstract(parsingOptions);
-        loadFromRes("org.codehaus.groovy.runtime.callsite.MetaClassSite");
-        loadFromRes("org.codehaus.groovy.runtime.callsite.MetaMethodSite");
-        loadFromRes("org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite");
-        loadFromRes("org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite");
-        loadFromRes("org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite");
-    }
-
-    private void loadAbstract(int parsingOptions) throws IOException {
-        try (final InputStream asStream = GroovySunClassLoader.class.getClassLoader().getResourceAsStream(resName("org.codehaus.groovy.runtime.callsite.AbstractCallSite"))) {
-            ClassReader reader = new ClassReader(asStream);
-            final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
-            final ClassVisitor cv = new ClassVisitor(CompilerConfiguration.ASM_API_VERSION, cw) {
-                public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
-                    super.visit(version, access, name, signature, "sun/reflect/GroovyMagic", interfaces);
-                }
-            };
-            reader.accept(cv, parsingOptions);
-            define(cw.toByteArray(), "org.codehaus.groovy.runtime.callsite.AbstractCallSite");
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassConstructorSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassConstructorSite.java
deleted file mode 100644
index fd1498a..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassConstructorSite.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClass;
-import org.codehaus.groovy.reflection.ClassInfo;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-/**
- * Call site for constructor
- *   meta class - cached
- *   method - not cached
-*/
-public class MetaClassConstructorSite extends MetaClassSite {
-
-    private final ClassInfo classInfo;
-    private final int version;
-
-    public MetaClassConstructorSite(CallSite site, MetaClass metaClass) {
-        super(site, metaClass);
-        classInfo = ClassInfo.getClassInfo(metaClass.getTheClass());
-        version = classInfo.getVersion();
-    }
-
-    public Object callConstructor(Object receiver, Object[] args) throws Throwable {
-        try {
-            if (receiver == metaClass.getTheClass()
-                && version == classInfo.getVersion()) // metaClass still be valid
-                return metaClass.invokeConstructor(args);
-            else
-              return CallSiteArray.defaultCallConstructor(this, receiver, args);
-        } catch (GroovyRuntimeException gre) {
-            throw ScriptBytecodeAdapter.unwrap(gre);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassSite.java
deleted file mode 100644
index e275510..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassSite.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.MetaClass;
-
-/**
- * Call site which holds reference to meta class.
-*/
-public abstract class MetaClassSite extends AbstractCallSite {
-
-    protected final MetaClass metaClass;
-
-    public MetaClassSite(final CallSite site, final MetaClass metaClass) {
-        super(site);
-        this.metaClass = metaClass;
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/MetaMethodSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/MetaMethodSite.java
deleted file mode 100644
index e115e8f..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/MetaMethodSite.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.MetaClass;
-import groovy.lang.MetaMethod;
-
-/**
- * Call site which caches meta method
- */
-public abstract class MetaMethodSite extends MetaClassSite {
-    final MetaMethod metaMethod;
-    protected final Class[] params;
-
-    public MetaMethodSite(CallSite site, MetaClass metaClass, MetaMethod metaMethod, Class[] params) {
-        super(site, metaClass);
-        this.metaMethod = metaMethod;
-        this.params = params;
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/NullCallSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/NullCallSite.java
deleted file mode 100644
index 3a6084c..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/NullCallSite.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.runtime.NullObject;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-public final class NullCallSite extends AbstractCallSite {
-    public NullCallSite(CallSite callSite) {
-        super(callSite);
-    }
-
-    public Object call(Object receiver, Object[] args) throws Throwable {
-        if (receiver == null) {
-            try{
-                return CallSiteArray.defaultCall(this, NullObject.getNullObject(), args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-            return CallSiteArray.defaultCall(this, receiver, args);
-        }
-    }
-    
-    public Object getProperty(Object receiver) throws Throwable {
-        if (receiver == null) {
-            try{
-                return InvokerHelper.getProperty(NullObject.getNullObject(), name);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-            return acceptGetProperty(receiver).getProperty(receiver);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PerInstancePojoMetaClassSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PerInstancePojoMetaClassSite.java
deleted file mode 100644
index 4a1125e..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PerInstancePojoMetaClassSite.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import org.codehaus.groovy.reflection.ClassInfo;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-public class PerInstancePojoMetaClassSite extends AbstractCallSite{
-    private final ClassInfo info;
-
-    public PerInstancePojoMetaClassSite(CallSite site, ClassInfo info) {
-        super(site);
-        this.info = info;
-    }
-
-    public Object call(Object receiver, Object[] args) throws Throwable {
-        if (receiver != null && info.hasPerInstanceMetaClasses()) {
-            try {
-                return InvokerHelper.getMetaClass(receiver).invokeMethod(receiver, name, args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-            return CallSiteArray.defaultCall(this, receiver, args);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PlainObjectMetaMethodSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PlainObjectMetaMethodSite.java
deleted file mode 100644
index b396e26..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PlainObjectMetaMethodSite.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClass;
-import groovy.lang.MetaMethod;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * Plain ordinary object call site
- *   meta class - cached
- *   method - cached
- *
- */
-public abstract class PlainObjectMetaMethodSite extends MetaMethodSite {
-    public PlainObjectMetaMethodSite(CallSite site, MetaClass metaClass, MetaMethod metaMethod, Class[] params) {
-        super(site, metaClass, metaMethod, params);
-    }
-
-    protected static Object doInvoke(Object receiver, Object[] args, Method reflect) throws Throwable {
-        try {
-            return reflect.invoke(receiver, args);
-        } catch (InvocationTargetException e) {
-            Throwable cause = e.getCause();
-            if (cause instanceof GroovyRuntimeException) {
-                throw ScriptBytecodeAdapter.unwrap ((GroovyRuntimeException) cause);
-            } else {
-                throw cause;
-            }
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoGetPropertySite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PogoGetPropertySite.java
deleted file mode 100644
index 7acca4b..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoGetPropertySite.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-public class PogoGetPropertySite extends AbstractCallSite {
-    private final Class aClass;
-
-    public PogoGetPropertySite(CallSite parent, Class aClass) {
-        super(parent);
-        this.aClass = aClass;
-    }
-
-    public CallSite acceptGetProperty(Object receiver) {
-        if (receiver== null || receiver.getClass() != aClass)
-            return createGetPropertySite(receiver);
-        else
-          return this;
-    }
-
-    public CallSite acceptGroovyObjectGetProperty(Object receiver) {
-        if (receiver == null || receiver.getClass() != aClass)
-            return createGroovyObjectGetPropertySite(receiver);
-        else
-          return this;
-    }
-
-    public Object getProperty(Object receiver) throws Throwable {
-        try{
-            return ((GroovyObject)receiver).getProperty(name);
-        } catch (GroovyRuntimeException gre) {
-            throw ScriptBytecodeAdapter.unwrap(gre);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoInterceptableSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PogoInterceptableSite.java
deleted file mode 100644
index 77ffab9..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoInterceptableSite.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-/**
- * Call site for GroovyInterceptable
-*/
-public class PogoInterceptableSite extends AbstractCallSite {
-    public PogoInterceptableSite(CallSite site) {
-        super(site);
-    }
-
-    public final Object invoke(Object receiver, Object[] args) throws Throwable {
-      try {
-        return ((GroovyObject)receiver).invokeMethod(name, InvokerHelper.asUnwrappedArray(args));
-      } catch (GroovyRuntimeException gre) {
-          throw ScriptBytecodeAdapter.unwrap(gre);
-      }
-    }
-
-    public final Object call(Object receiver, Object[] args) throws Throwable {
-        if(receiver instanceof GroovyObject) {
-            try {
-                return ((GroovyObject) receiver).invokeMethod(name, InvokerHelper.asUnwrappedArray(args));
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-            return CallSiteArray.defaultCall(this, receiver, args);
-        }
-    }
-
-    public Object callCurrent (GroovyObject receiver, Object [] args) throws Throwable {
-        return call(receiver, args);
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaClassGetPropertySite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaClassGetPropertySite.java
deleted file mode 100644
index 377672f..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaClassGetPropertySite.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClass;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-public class PogoMetaClassGetPropertySite extends AbstractCallSite {
-    private final MetaClass metaClass;
-
-    public PogoMetaClassGetPropertySite(CallSite parent, MetaClass metaClass) {
-        super(parent);
-        this.metaClass = metaClass;
-    }
-
-    public final CallSite acceptGetProperty(Object receiver) {
-        if (!(receiver instanceof GroovyObject) || ((GroovyObject)receiver).getMetaClass() != metaClass)
-            return createGetPropertySite(receiver);
-        else
-          return this;
-    }
-
-    public final CallSite acceptGroovyObjectGetProperty(Object receiver) {
-        if (!(receiver instanceof GroovyObject) || ((GroovyObject)receiver).getMetaClass() != metaClass)
-            return createGroovyObjectGetPropertySite(receiver);
-        else
-          return this;
-    }
-
-    public final Object getProperty(Object receiver) throws Throwable {
-        try {
-            return metaClass.getProperty(receiver, name);
-        } catch (GroovyRuntimeException gre) {
-            throw ScriptBytecodeAdapter.unwrap(gre);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaClassSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaClassSite.java
deleted file mode 100644
index 096d038..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaClassSite.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClass;
-import groovy.lang.MissingMethodException;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-import org.codehaus.groovy.runtime.metaclass.MissingMethodExecutionFailed;
-
-public class PogoMetaClassSite extends MetaClassSite {
-
-    public PogoMetaClassSite(final CallSite site, final MetaClass metaClass) {
-        super(site, metaClass);
-    }
-
-    public final Object call(final Object receiver, final Object[] args) throws Throwable {
-        if (checkCall(receiver)) {
-            try {
-                try {
-                    return metaClass.invokeMethod(receiver, name, args);
-                } catch (MissingMethodException e) {
-                    if (e instanceof MissingMethodExecutionFailed) {
-                        throw (MissingMethodException)e.getCause();
-                    } else if (receiver.getClass() == e.getType() && e.getMethod().equals(name)) {
-                        // in case there's nothing else, invoke the object's own invokeMethod()
-                        return ((GroovyObject)receiver).invokeMethod(name, args);
-                    } else {
-                        throw e;
-                    }
-                }
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-            return CallSiteArray.defaultCall(this, receiver, args);
-        }
-    }
-
-    public final Object callCurrent(final GroovyObject receiver, final Object[] args) throws Throwable {
-        if (checkCall(receiver)) {
-            try {
-                try {
-                    return metaClass.invokeMethod(array.owner, receiver, name, args, false, true);
-                } catch (MissingMethodException e) {
-                    if (e instanceof MissingMethodExecutionFailed) {
-                        throw (MissingMethodException) e.getCause();
-                    } else if (receiver.getClass() == e.getType() && e.getMethod().equals(name)) {
-                        // in case there's nothing else, invoke the receiver's own invokeMethod()
-                        try {
-                            return receiver.invokeMethod(name, args);
-                        } catch (MissingMethodException mme) {
-                            if (mme instanceof MissingMethodExecutionFailed)
-                                throw (MissingMethodException) mme.getCause();
-                            // GROOVY-9387: in rare cases, this form still works
-                            return metaClass.invokeMethod(receiver, name, args);
-                        }
-                    } else {
-                        throw e;
-                    }
-                }
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-            return CallSiteArray.defaultCallCurrent(this, receiver, args);
-        }
-    }
-
-    protected final boolean checkCall(final Object receiver) {
-        return (receiver instanceof GroovyObject && ((GroovyObject) receiver).getMetaClass() == metaClass);
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.java
deleted file mode 100644
index a992f3c..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
-import org.codehaus.groovy.reflection.CachedMethod;
-import org.codehaus.groovy.runtime.GroovyCategorySupport;
-import org.codehaus.groovy.runtime.MetaClassHelper;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-import org.codehaus.groovy.vmplugin.VMPlugin;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
-
-import java.lang.reflect.Method;
-
-/**
- * POGO call site
- *   meta class - cached
- *   method - cached
-*/
-public class PogoMetaMethodSite extends PlainObjectMetaMethodSite {
-    private static final VMPlugin VM_PLUGIN = VMPluginFactory.getPlugin();
-    private final int version;
-    private final boolean skipVersionCheck;
-    public PogoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-        super(site, metaClass, metaMethod, params);
-        version = metaClass.getVersion();
-        skipVersionCheck = metaClass.getClass()==MetaClassImpl.class;
-    }
-
-    public Object invoke(Object receiver, Object[] args) throws Throwable {
-        MetaClassHelper.unwrap(args);
-        try {
-            return metaMethod.doMethodInvoke(receiver,  args);
-        } catch (GroovyRuntimeException gre) {
-            throw ScriptBytecodeAdapter.unwrap(gre);
-        }
-    }
-
-    public Object callCurrent(GroovyObject receiver, Object[] args) throws Throwable {
-        if(checkCall(receiver, args)) {
-            try {
-                return invoke(receiver,args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-            return CallSiteArray.defaultCallCurrent(this, receiver, args);
-        }
-    }
-
-    public Object call(Object receiver, Object[] args) throws Throwable {
-        if(checkCall(receiver, args)) {
-            try {
-                return invoke(receiver,args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-            return CallSiteArray.defaultCall(this, receiver, args);
-        }
-    }
-
-    private boolean nonParamCheck(Object receiver) {
-        try {
-            return !GroovyCategorySupport.hasCategoryInCurrentThread()
-                    && ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
-                    && (skipVersionCheck || ((MetaClassImpl) metaClass).getVersion() == version);
-        } catch (NullPointerException e) {
-            if (receiver == null) return false;
-            throw e;
-        } catch (ClassCastException e) {
-            if (!(receiver instanceof GroovyObject)) return false;
-            throw e;
-        }
-    }
-
-    protected boolean checkCall(Object receiver, Object[] args) {
-        return nonParamCheck(receiver)
-                && MetaClassHelper.sameClasses(params, args);
-    }
-
-    protected boolean checkCall(Object receiver) {
-        return nonParamCheck(receiver)
-                && MetaClassHelper.sameClasses(params);
-    }
-
-    protected boolean checkCall(Object receiver, Object arg1) {
-        return nonParamCheck(receiver)
-                && MetaClassHelper.sameClasses(params, arg1);
-    }
-
-    protected boolean checkCall(Object receiver, Object arg1, Object arg2) {
-        return nonParamCheck(receiver)
-                && MetaClassHelper.sameClasses(params, arg1, arg2);
-    }
-
-    protected boolean checkCall(Object receiver, Object arg1, Object arg2, Object arg3) {
-        return nonParamCheck(receiver)
-                && MetaClassHelper.sameClasses(params, arg1, arg2, arg3);
-    }
-
-    protected boolean checkCall(Object receiver, Object arg1, Object arg2, Object arg3, Object arg4) {
-        return nonParamCheck(receiver)
-                && MetaClassHelper.sameClasses(params, arg1, arg2, arg3, arg4);
-    }
-
-    public static CallSite createPogoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object[] args) {
-        if (metaMethod.getClass() == CachedMethod.class)
-          return createCachedMethodSite (site, metaClass, (CachedMethod) metaMethod, params, args);
-
-        return createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-    }
-
-    private static CallSite createNonAwareCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object[] args) {
-        if (metaMethod.correctArguments(args) == args) {
-            if (noWrappers(args)) {
-                if (noCoerce(metaMethod,args))
-                    return new PogoMetaMethodSiteNoUnwrap(site, metaClass, metaMethod, params);
-                else {
-                    return new PogoMetaMethodSiteNoUnwrapNoCoerce(site, metaClass, metaMethod, params);
-                }
-            }
-        }
-        return new PogoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    public static CallSite createCachedMethodSite(CallSite site, MetaClassImpl metaClass, CachedMethod metaMethod, Class[] params, Object[] args) {
-        if (metaMethod.correctArguments(args) == args) {
-            if (noWrappers(args)) {
-                if (noCoerce(metaMethod,args))
-                    return new PogoCachedMethodSiteNoUnwrap(site, metaClass, metaMethod, params);
-                else {
-                    return metaMethod.createPogoMetaMethodSite(site, metaClass, params);
-                }
-            }
-        }
-        return new PogoCachedMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    public static class PogoCachedMethodSite extends PogoMetaMethodSite {
-        final Method reflect;
-
-        public PogoCachedMethodSite(CallSite site, MetaClassImpl metaClass, CachedMethod metaMethod, Class[] params) {
-            super(site, metaClass, VM_PLUGIN.transformMetaMethod(metaClass, metaMethod), params);
-            reflect = ((CachedMethod) super.metaMethod).setAccessible();
-        }
-
-        public Object invoke(Object receiver, Object[] args) throws Throwable {
-            MetaClassHelper.unwrap(args);
-            args = metaMethod.coerceArgumentsToClasses(args);
-            return doInvoke(receiver, args, reflect);
-        }
-    }
-
-    public static class PogoCachedMethodSiteNoUnwrap extends PogoCachedMethodSite {
-
-        public PogoCachedMethodSiteNoUnwrap(CallSite site, MetaClassImpl metaClass, CachedMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) throws Throwable {
-            args = metaMethod.coerceArgumentsToClasses(args);
-            return doInvoke(receiver, args, reflect);
-        }
-    }
-
-    public static class PogoCachedMethodSiteNoUnwrapNoCoerce extends PogoCachedMethodSite {
-
-        public PogoCachedMethodSiteNoUnwrapNoCoerce(CallSite site, MetaClassImpl metaClass, CachedMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) throws Throwable {
-            return doInvoke(receiver, args, reflect);
-        }
-    }
-
-    /**
-     * Call site where we know there is no need to unwrap arguments
-     */
-    public static class PogoMetaMethodSiteNoUnwrap extends PogoMetaMethodSite {
-
-        public PogoMetaMethodSiteNoUnwrap(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) throws Throwable {
-            try {
-                return metaMethod.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 PogoMetaMethodSiteNoUnwrapNoCoerce extends PogoMetaMethodSite {
-
-        public PogoMetaMethodSiteNoUnwrapNoCoerce(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) throws Throwable {
-            try {
-                return metaMethod.invoke(receiver,  args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaClassGetPropertySite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaClassGetPropertySite.java
deleted file mode 100644
index f5733e2..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaClassGetPropertySite.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-public class PojoMetaClassGetPropertySite extends AbstractCallSite {
-    public PojoMetaClassGetPropertySite(CallSite parent) {
-        super(parent);
-    }
-
-    public final CallSite acceptGetProperty(Object receiver) {
-          return this;
-    }
-
-    public final Object getProperty(Object receiver) throws Throwable {
-        try {
-            return InvokerHelper.getProperty(receiver, name);
-        } catch (GroovyRuntimeException gre) {
-            throw ScriptBytecodeAdapter.unwrap(gre);
-        }
-    }
-
-    public Object callGetProperty(Object receiver) throws Throwable {
-        try {
-            return InvokerHelper.getProperty(receiver, name);
-        } catch (GroovyRuntimeException gre) {
-            throw ScriptBytecodeAdapter.unwrap(gre);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaClassSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaClassSite.java
deleted file mode 100644
index c1fae7f..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaClassSite.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClass;
-import org.codehaus.groovy.reflection.ClassInfo;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-/**
- * POJO call site
- *   meta class - cached
- *   method - not cached
-*/
-public class PojoMetaClassSite extends MetaClassSite{
-    private final ClassInfo classInfo;
-    private final int version;
-
-    public PojoMetaClassSite(CallSite site, MetaClass metaClass) {
-        super(site, metaClass);
-        classInfo = ClassInfo.getClassInfo(metaClass.getTheClass());
-        version = classInfo.getVersion();
-    }
-
-    public Object call(Object receiver, Object[] args) throws Throwable {
-        if(checkCall(receiver)) {
-          try{
-              return metaClass.invokeMethod(receiver, name, args);
-          } catch (GroovyRuntimeException gre) {
-              throw ScriptBytecodeAdapter.unwrap(gre);
-          }
-        } else {
-          return CallSiteArray.defaultCall(this, receiver, args);
-        }
-    }
-
-    protected final boolean checkCall(Object receiver) {
-        return  receiver!=null &&
-                receiver.getClass() == metaClass.getTheClass() &&
-                version == classInfo.getVersion(); // metaClass is still valid
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite.java
deleted file mode 100644
index 7b54125..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
-import org.codehaus.groovy.reflection.CachedMethod;
-import org.codehaus.groovy.runtime.GroovyCategorySupport;
-import org.codehaus.groovy.runtime.MetaClassHelper;
-import org.codehaus.groovy.runtime.NullObject;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-import org.codehaus.groovy.vmplugin.VMPlugin;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
-
-import java.lang.reflect.Method;
-
-/**
- * POJO call site
- *   meta class - cached
- *   method - cached
-*/
-public class PojoMetaMethodSite extends PlainObjectMetaMethodSite {
-    private static final VMPlugin VM_PLUGIN = VMPluginFactory.getPlugin();
-
-    protected final int version;
-
-    public PojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-        super(site, metaClass, metaMethod, params);
-        version = metaClass.getVersion();
-    }
-
-    public Object invoke(Object receiver, Object[] args) throws Throwable {
-        MetaClassHelper.unwrap(args);
-        return metaMethod.doMethodInvoke(receiver,  args);
-    }
-
-    public Object call(Object receiver, Object[] args) throws Throwable {
-        if(checkCall(receiver, args))
-          return invoke(receiver,args);
-        else
-          return CallSiteArray.defaultCall(this, receiver, args);
-    }
-
-    protected final boolean checkPojoMetaClass() {
-        return !GroovyCategorySupport.hasCategoryInCurrentThread()
-            && ((MetaClassImpl)metaClass).getVersion() == version;
-    }
-
-    protected final boolean checkCall(Object receiver, Object[] args) {
-        try {
-            return receiver.getClass() == metaClass.getTheClass() // meta class match receiver
-               && checkPojoMetaClass()
-               && MetaClassHelper.sameClasses(params, args);
-        }
-        catch (NullPointerException e) {
-            if (receiver == null)
-              return checkCall(NullObject.getNullObject(), args);
-
-            throw e;
-        }
-    }
-
-    protected final boolean checkCall(Object receiver) {
-        try {
-            return receiver.getClass() == metaClass.getTheClass() // meta class match receiver
-               && checkPojoMetaClass()
-               && MetaClassHelper.sameClasses(params);
-        } catch (NullPointerException e) {
-            if (receiver == null)
-              return checkCall(NullObject.getNullObject());
-
-            throw e;
-        }
-    }
-
-    protected final boolean checkCall(Object receiver, Object arg1) {
-        try {
-            return receiver.getClass() == metaClass.getTheClass() // meta class match receiver
-               && checkPojoMetaClass()
-               && MetaClassHelper.sameClasses(params, arg1);
-        } catch (NullPointerException e) {
-            if (receiver == null)
-              return checkCall(NullObject.getNullObject(), arg1);
-
-            throw e;
-        }
-    }
-
-    protected final boolean checkCall(Object receiver, Object arg1, Object arg2) {
-        try {
-            return receiver.getClass() == metaClass.getTheClass() // meta class match receiver
-               && checkPojoMetaClass()
-               && MetaClassHelper.sameClasses(params, arg1, arg2);
-        } catch (NullPointerException e) {
-            if (receiver == null)
-              return checkCall(NullObject.getNullObject(), arg1, arg2);
-
-            throw e;
-        }
-    }
-
-    protected final boolean checkCall(Object receiver, Object arg1, Object arg2, Object arg3) {
-        try {
-            return receiver.getClass() == metaClass.getTheClass() // meta class match receiver
-               && checkPojoMetaClass()
-               && MetaClassHelper.sameClasses(params, arg1, arg2, arg3);
-        } catch (NullPointerException e) {
-            if (receiver == null)
-              return checkCall(NullObject.getNullObject(), arg1, arg2, arg3);
-
-            throw e;
-        }
-    }
-
-    protected final boolean checkCall(Object receiver, Object arg1, Object arg2, Object arg3, Object arg4) {
-        try {
-            return receiver.getClass() == metaClass.getTheClass() // meta class match receiver
-               && checkPojoMetaClass()
-               && MetaClassHelper.sameClasses(params, arg1, arg2, arg3, arg4);
-        } catch (NullPointerException e) {
-            if (receiver == null)
-              return checkCall(NullObject.getNullObject(), arg1, arg2, arg3, arg4);
-
-            throw e;
-        }
-    }
-
-    public static CallSite createPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (metaMethod instanceof CallSiteAwareMetaMethod) {
-            return ((CallSiteAwareMetaMethod)metaMethod).createPojoCallSite(site, metaClass, metaMethod, params, receiver, args);
-        }
-
-        if (metaMethod.getClass() == CachedMethod.class)
-          return createCachedMethodSite (site, metaClass, (CachedMethod) metaMethod, params, args);
-
-        return createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-    }
-
-    public static CallSite createCachedMethodSite(CallSite site, MetaClassImpl metaClass, CachedMethod metaMethod, Class[] params, Object[] args) {
-        if (metaMethod.correctArguments(args) == args) {
-            if (noWrappers(args)) {
-                if (noCoerce(metaMethod,args))
-                    return new PojoCachedMethodSiteNoUnwrap(site, metaClass, metaMethod, params);
-                else
-                    return metaMethod.createPojoMetaMethodSite(site, metaClass, params);
-            }
-        }
-        return new PojoCachedMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    public static CallSite createNonAwareCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object[] args) {
-        if (metaMethod.correctArguments(args) == args) {
-            if (noWrappers(args)) {
-                if (noCoerce(metaMethod,args))
-                    return new PojoMetaMethodSiteNoUnwrap(site, metaClass, metaMethod, params);
-                else
-                    return new PojoMetaMethodSiteNoUnwrapNoCoerce(site, metaClass, metaMethod, params);
-            }
-        }
-        return new PojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    public static class PojoCachedMethodSite extends PojoMetaMethodSite {
-        final Method reflect;
-
-        public PojoCachedMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, VM_PLUGIN.transformMetaMethod(metaClass, metaMethod), params);
-            reflect = ((CachedMethod) super.metaMethod).setAccessible();
-        }
-
-        public Object invoke(Object receiver, Object[] args) throws Throwable {
-            MetaClassHelper.unwrap(args);
-            args = metaMethod.coerceArgumentsToClasses(args);
-            return doInvoke(receiver, args, reflect);
-        }
-    }
-
-    public static class PojoCachedMethodSiteNoUnwrap extends PojoCachedMethodSite {
-
-        public PojoCachedMethodSiteNoUnwrap(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) throws Throwable {
-            args = metaMethod.coerceArgumentsToClasses(args);
-            return doInvoke(receiver, args, reflect);
-        }
-    }
-
-    public static class PojoCachedMethodSiteNoUnwrapNoCoerce extends PojoCachedMethodSite {
-
-        public PojoCachedMethodSiteNoUnwrapNoCoerce(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) throws Throwable {
-            return doInvoke(receiver, args, reflect);
-        }
-    }
-
-    /**
-     * Call site where we know there is no need to unwrap arguments
-     */
-    public static class PojoMetaMethodSiteNoUnwrap extends PojoMetaMethodSite {
-
-        public PojoMetaMethodSiteNoUnwrap(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) throws Throwable {
-            try {
-                return metaMethod.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 PojoMetaMethodSiteNoUnwrapNoCoerce extends PojoMetaMethodSite {
-
-        public PojoMetaMethodSiteNoUnwrapNoCoerce(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) throws Throwable {
-            try {
-                return metaMethod.invoke(receiver,  args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaClassSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaClassSite.java
deleted file mode 100644
index a97fe92..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaClassSite.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClass;
-import org.codehaus.groovy.reflection.ClassInfo;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-/**
- * Call site for invoking static methods
- *   meta class  - cached
- *   method - not cached
- */
-public class StaticMetaClassSite extends MetaClassSite {
-
-    private final ClassInfo classInfo;
-    private final int version;
-
-    public StaticMetaClassSite(CallSite site, MetaClass metaClass) {
-        super(site, metaClass);
-        classInfo = ClassInfo.getClassInfo(metaClass.getTheClass());
-        version = classInfo.getVersion();
-    }
-
-    private boolean checkCall(Object receiver) {
-        return receiver == metaClass.getTheClass()
-            && version == classInfo.getVersion(); // metaClass still be valid
-    }
-
-    public final Object call(Object receiver, Object[] args) throws Throwable {
-        if (checkCall(receiver)) {
-            try {
-                return metaClass.invokeStaticMethod(receiver, name, args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-            return CallSiteArray.defaultCall(this, receiver, args);
-        }
-    }
-
-    public final Object callStatic(Class receiver, Object[] args) throws Throwable {
-        if (checkCall(receiver)) {
-            try {
-                return metaClass.invokeStaticMethod(receiver, name, args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-            return CallSiteArray.defaultCallStatic(this, receiver, args);
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite.java
deleted file mode 100644
index 399594f..0000000
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
-import org.codehaus.groovy.reflection.CachedMethod;
-import org.codehaus.groovy.runtime.MetaClassHelper;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-/**
- * POJO call site
- *   meta class - cached
- *   method - cached
-*/
-public class StaticMetaMethodSite extends MetaMethodSite {
-    private final int version;
-
-    public StaticMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-        super(site, metaClass, metaMethod, params);
-        version = metaClass.getVersion ();
-    }
-
-    public Object invoke(Object receiver, Object[] args) throws Throwable {
-        MetaClassHelper.unwrap(args);
-        try {
-            return metaMethod.doMethodInvoke(receiver,  args);
-        } catch (GroovyRuntimeException gre) {
-            throw ScriptBytecodeAdapter.unwrap(gre);
-        }
-    }
-
-    protected final boolean checkCall(Object receiver, Object[] args) {
-        return receiver == metaClass.getTheClass() // meta class match receiver
-           && ((MetaClassImpl)metaClass).getVersion() == version // metaClass still be valid
-           && MetaClassHelper.sameClasses(params, args);
-    }
-
-    protected final boolean checkCall(Object receiver) {
-        return receiver == metaClass.getTheClass() // meta class match receiver
-           && ((MetaClassImpl)metaClass).getVersion() == version // metaClass still be valid
-           && MetaClassHelper.sameClasses(params);
-    }
-
-    protected final boolean checkCall(Object receiver, Object arg1) {
-        return receiver == metaClass.getTheClass() // meta class match receiver
-           && ((MetaClassImpl)metaClass).getVersion() == version // metaClass still be valid
-           && MetaClassHelper.sameClasses(params, arg1);
-    }
-
-    protected final boolean checkCall(Object receiver, Object arg1, Object arg2) {
-        return receiver == metaClass.getTheClass() // meta class match receiver
-           && ((MetaClassImpl)metaClass).getVersion() == version // metaClass still be valid
-           && MetaClassHelper.sameClasses(params, arg1, arg2);
-    }
-
-    protected final boolean checkCall(Object receiver, Object arg1, Object arg2, Object arg3) {
-        return receiver == metaClass.getTheClass() // meta class match receiver
-           && ((MetaClassImpl)metaClass).getVersion() == version // metaClass still be valid
-           && MetaClassHelper.sameClasses(params, arg1, arg2, arg3);
-    }
-
-    protected final boolean checkCall(Object receiver, Object arg1, Object arg2, Object arg3, Object arg4) {
-        return receiver == metaClass.getTheClass() // meta class match receiver
-           && ((MetaClassImpl)metaClass).getVersion() == version // metaClass still be valid
-           && MetaClassHelper.sameClasses(params, arg1, arg2, arg3, arg4);
-    }
-
-    public Object call(Object receiver, Object[] args) throws Throwable {
-        if(checkCall(receiver, args)) {
-            try {
-                return invoke(receiver, args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        } else {
-          return CallSiteArray.defaultCall(this, receiver, args);
-        }
-    }
-
-    public Object callStatic(Class receiver, Object[] args) throws Throwable {
-        if(checkCall(receiver, args))
-          return invoke(receiver, args);
-        else
-          return CallSiteArray.defaultCallStatic(this, receiver, args);
-    }
-
-    public static CallSite createStaticMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object[] args) {
-        if (metaMethod.correctArguments(args) == args) {
-            if (noWrappers(args)) {
-                if (noCoerce(metaMethod,args))
-                    return new StaticMetaMethodSiteNoUnwrap(site, metaClass, metaMethod, params);
-                else
-                    if (metaMethod.getClass() == CachedMethod.class)
-                      return ((CachedMethod)metaMethod).createStaticMetaMethodSite(site, metaClass, params);
-                    else
-                      return new StaticMetaMethodSiteNoUnwrapNoCoerce (site, metaClass, metaMethod, params);
-            }
-        }
-        return new StaticMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    /**
-     * Call site where we know there is no need to unwrap arguments
-     */
-    public static class StaticMetaMethodSiteNoUnwrap extends StaticMetaMethodSite {
-
-        public StaticMetaMethodSiteNoUnwrap(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) throws Throwable {
-            try {
-                return metaMethod.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 site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) throws Throwable {
-            try {
-                return metaMethod.invoke(receiver,  args);
-            } catch (GroovyRuntimeException gre) {
-                throw ScriptBytecodeAdapter.unwrap(gre);
-            }
-        }
-    }
-}
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberDiv.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberDiv.java
index f49fa78..f3a5fdf 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberDiv.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberDiv.java
@@ -18,9 +18,6 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
-import org.codehaus.groovy.runtime.callsite.CallSite;
 import org.codehaus.groovy.runtime.typehandling.NumberMath;
 
 public final class NumberNumberDiv extends NumberNumberMetaMethod {
@@ -46,306 +43,4 @@ public final class NumberNumberDiv extends NumberNumberMetaMethod {
         return NumberMath.divide(left, right);
     }
 
-
-    public CallSite createIntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return createNumberNumber(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createIntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return createNumberNumber(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createIntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createIntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return createNumberNumber(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return createNumberNumber(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createNumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new NumberNumber(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    private static class IntegerFloat extends NumberNumberCallSite {
-        public IntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Integer) receiver).doubleValue() / ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerDouble extends NumberNumberCallSite {
-        public IntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Integer) receiver / (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongFloat extends NumberNumberCallSite {
-        public LongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Long) receiver).doubleValue() / ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongDouble extends NumberNumberCallSite {
-        public LongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Long) receiver).doubleValue() / (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatInteger extends NumberNumberCallSite {
-        public FloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() / ((Integer) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatLong extends NumberNumberCallSite {
-        public FloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() / ((Long) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatFloat extends NumberNumberCallSite {
-        public FloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() / ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) {
-            return ((Float) receiver).doubleValue() / ((Float) args[0]).doubleValue();
-        }
-
-        public final Object invoke(Object receiver, Object arg) {
-            return ((Float) receiver).doubleValue() / ((Float) arg).doubleValue();
-        }
-    }
-
-    private static class FloatDouble extends NumberNumberCallSite {
-        public FloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() / (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class DoubleInteger extends NumberNumberCallSite {
-        public DoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver / ((Integer) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) {
-            return (Double) receiver / ((Integer) args[0]).doubleValue();
-        }
-
-        public final Object invoke(Object receiver, Object arg) {
-            return (Double) receiver / ((Integer) arg).doubleValue();
-        }
-    }
-
-    private static class DoubleLong extends NumberNumberCallSite {
-        public DoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver / ((Long) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class DoubleFloat extends NumberNumberCallSite {
-        public DoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver / ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class DoubleDouble extends NumberNumberCallSite {
-        public DoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver / (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class NumberNumber extends NumberNumberCallSite {
-        public NumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) {
-            return math.divideImpl((Number)receiver,(Number)args[0]);
-        }
-
-        public final Object invoke(Object receiver, Object arg) {
-            return math.divideImpl((Number)receiver,(Number)arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java
index 6dcddfb..c54f4e0 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java
@@ -18,18 +18,13 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl;
 
-import groovy.lang.MetaClassImpl;
 import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.CallSiteAwareMetaMethod;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
-import org.codehaus.groovy.runtime.typehandling.NumberMath;
 
 import java.lang.reflect.Modifier;
 
-public abstract class NumberNumberMetaMethod extends CallSiteAwareMetaMethod {
+public abstract class NumberNumberMetaMethod extends MetaMethod {
     private static final CachedClass    NUMBER_CLASS = ReflectionCache.getCachedClass(Number.class);
     private static final CachedClass [] NUMBER_CLASS_ARR = new CachedClass[] { NUMBER_CLASS };
 
@@ -49,93 +44,4 @@ public abstract class NumberNumberMetaMethod extends CallSiteAwareMetaMethod {
         return NUMBER_CLASS;
     }
 
-    public abstract static class NumberNumberCallSite extends PojoMetaMethodSite {
-
-        final NumberMath math;
-
-        public NumberNumberCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Number receiver, Number arg) {
-            super(site, metaClass, metaMethod, params);
-            math = NumberMath.getMath(receiver,arg);
-        }
-    }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        Object firstArg = args[0];
-
-        if (receiver instanceof Integer) {
-            if (firstArg instanceof Integer)
-                return createIntegerInteger(site, metaClass, metaMethod, params, receiver, args);
-
-            if (firstArg instanceof Long)
-                return createIntegerLong(site, metaClass, metaMethod, params, receiver, args);
-
-            if (firstArg instanceof Float)
-                return createIntegerFloat(site, metaClass, metaMethod, params, receiver, args);
-
-            if (firstArg instanceof Double)
-                return createIntegerDouble(site, metaClass, metaMethod, params, receiver, args);
-        }
-
-        if (receiver instanceof Long) {
-            if (firstArg instanceof Integer)
-                return createLongInteger(site, metaClass, metaMethod, params, receiver, args);
-
-            if (firstArg instanceof Long)
-                return createLongLong(site, metaClass, metaMethod, params, receiver, args);
-
-            if (firstArg instanceof Float)
-                return createLongFloat(site, metaClass, metaMethod, params, receiver, args);
-
-            if (firstArg instanceof Double)
-                return createLongDouble(site, metaClass, metaMethod, params, receiver, args);
-        }
-
-        if (receiver instanceof Float) {
-            if (firstArg instanceof Integer)
-                return createFloatInteger(site, metaClass, metaMethod, params, receiver, args);
-
-            if (firstArg instanceof Long)
-                return createFloatLong(site, metaClass, metaMethod, params, receiver, args);
-
-            if (firstArg instanceof Float)
-                return createFloatFloat(site, metaClass, metaMethod, params, receiver, args);
-
-            if (firstArg instanceof Double)
-                return createFloatDouble(site, metaClass, metaMethod, params, receiver, args);
-        }
-
-        if (receiver instanceof Double) {
-            if (firstArg instanceof Integer)
-                return createDoubleInteger(site, metaClass, metaMethod, params, receiver, args);
-
-            if (firstArg instanceof Long)
-                return createDoubleLong(site, metaClass, metaMethod, params, receiver, args);
-
-            if (firstArg instanceof Float)
-                return createDoubleFloat(site, metaClass, metaMethod, params, receiver, args);
-
-            if (firstArg instanceof Double)
-                return createDoubleDouble(site, metaClass, metaMethod, params, receiver, args);
-        }
-
-        return createNumberNumber(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public abstract CallSite createIntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createIntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createIntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createIntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createLongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createLongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createLongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createLongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createFloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createFloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createFloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createFloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createDoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createDoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createDoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createDoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
-    public abstract CallSite createNumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.java
index 573634c..6c11c1a 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.java
@@ -18,9 +18,6 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
-import org.codehaus.groovy.runtime.callsite.CallSite;
 import org.codehaus.groovy.runtime.typehandling.NumberMath;
 
 public final class NumberNumberMinus extends NumberNumberMetaMethod {
@@ -43,358 +40,4 @@ public final class NumberNumberMinus extends NumberNumberMetaMethod {
         return NumberMath.subtract(left, right);
     }
 
-
-    public CallSite createIntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createIntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createIntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createIntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createNumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new NumberNumber(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    private static class DoubleDouble extends NumberNumberCallSite {
-        public DoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver - (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class DoubleFloat extends NumberNumberCallSite {
-        public DoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver - ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class DoubleLong extends NumberNumberCallSite {
-        public DoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver - ((Long) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class DoubleInteger extends NumberNumberCallSite {
-        public DoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver - (Integer) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatDouble extends NumberNumberCallSite {
-        public FloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() - (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatFloat extends NumberNumberCallSite {
-        public FloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() - ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatLong extends NumberNumberCallSite {
-        public FloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() - ((Long) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatInteger extends NumberNumberCallSite {
-        public FloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() - ((Integer) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongDouble extends NumberNumberCallSite {
-        public LongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Long) receiver).doubleValue() - (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongFloat extends NumberNumberCallSite {
-        public LongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Long) receiver).doubleValue() - ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongLong extends NumberNumberCallSite {
-        public LongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Long) receiver - (Long) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongInteger extends NumberNumberCallSite {
-        public LongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Long) receiver - ((Integer) arg).longValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerDouble extends NumberNumberCallSite {
-        public IntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Integer) receiver).doubleValue() - (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerFloat extends NumberNumberCallSite {
-        public IntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Integer) receiver).doubleValue() - ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerLong extends NumberNumberCallSite {
-        public IntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Integer) receiver).longValue() - (Long) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerInteger extends NumberNumberCallSite {
-        public IntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                  return (Integer) receiver - (Integer) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class NumberNumber extends NumberNumberCallSite {
-        public NumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) {
-            return math.subtractImpl((Number)receiver,(Number)args[0]);
-        }
-
-        public final Object invoke(Object receiver, Object arg) {
-            return math.subtractImpl((Number)receiver,(Number)arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMultiply.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMultiply.java
index a326515..d2f2d60 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMultiply.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMultiply.java
@@ -18,9 +18,6 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
-import org.codehaus.groovy.runtime.callsite.CallSite;
 import org.codehaus.groovy.runtime.typehandling.NumberMath;
 
 public final class NumberNumberMultiply extends NumberNumberMetaMethod {
@@ -45,358 +42,4 @@ public final class NumberNumberMultiply extends NumberNumberMetaMethod {
         return NumberMath.multiply(left, right);
     }
 
-
-    public CallSite createIntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createIntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createIntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createIntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createNumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new NumberNumber(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    private static class DoubleDouble extends NumberNumberCallSite {
-        public DoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver * (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class DoubleFloat extends NumberNumberCallSite {
-        public DoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver * ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class DoubleLong extends NumberNumberCallSite {
-        public DoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver * ((Long) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class DoubleInteger extends NumberNumberCallSite {
-        public DoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver * (Integer) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatDouble extends NumberNumberCallSite {
-        public FloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() * (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatFloat extends NumberNumberCallSite {
-        public FloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() * ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatLong extends NumberNumberCallSite {
-        public FloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() * ((Long) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatInteger extends NumberNumberCallSite {
-        public FloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() * ((Integer) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongDouble extends NumberNumberCallSite {
-        public LongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Long) receiver).doubleValue() * (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongFloat extends NumberNumberCallSite {
-        public LongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Long) receiver).doubleValue() * ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongLong extends NumberNumberCallSite {
-        public LongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Long) receiver * (Long) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongInteger extends NumberNumberCallSite {
-        public LongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Long) receiver * ((Integer) arg).longValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerDouble extends NumberNumberCallSite {
-        public IntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Integer) receiver).doubleValue() * (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerFloat extends NumberNumberCallSite {
-        public IntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Integer) receiver).doubleValue() * ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerLong extends NumberNumberCallSite {
-        public IntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Integer) receiver).longValue() * (Long) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerInteger extends NumberNumberCallSite {
-        public IntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                  return (Integer) receiver * (Integer) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class NumberNumber extends NumberNumberCallSite {
-        public NumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object invoke(Object receiver, Object[] args) {
-            return math.multiplyImpl((Number)receiver,(Number)args[0]);
-        }
-
-        public final Object invoke(Object receiver, Object arg) {
-            return math.multiplyImpl((Number)receiver,(Number)arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberPlus.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberPlus.java
index 33e2128..e3dab6a 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberPlus.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberPlus.java
@@ -18,9 +18,6 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
-import org.codehaus.groovy.runtime.callsite.CallSite;
 import org.codehaus.groovy.runtime.typehandling.NumberMath;
 
 public final class NumberNumberPlus extends NumberNumberMetaMethod {
@@ -43,352 +40,4 @@ public final class NumberNumberPlus extends NumberNumberMetaMethod {
         return NumberMath.add(left, right);
     }
 
-    public CallSite createIntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createIntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createIntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createIntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new IntegerDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createLongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new LongDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createFloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new FloatDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleInteger(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleLong(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleFloat(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createDoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new DoubleDouble(site, metaClass, metaMethod, params, receiver, args);
-    }
-
-    public CallSite createNumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        return new NumberNumberCallSite(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]) {
-            public Object invoke(Object receiver, Object[] args) {
-                return math.addImpl((Number) receiver, (Number) args[0]);
-            }
-
-            public Object invoke(Object receiver, Object arg) {
-                return math.addImpl((Number) receiver, (Number) arg);
-            }
-        };
-    }
-
-
-    private static class DoubleDouble extends NumberNumberCallSite {
-        public DoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver + (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class DoubleFloat extends NumberNumberCallSite {
-        public DoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver + ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class DoubleLong extends NumberNumberCallSite {
-        public DoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver + ((Long) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class DoubleInteger extends NumberNumberCallSite {
-        public DoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Double) receiver + (Integer) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatDouble extends NumberNumberCallSite {
-        public FloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() + (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatFloat extends NumberNumberCallSite {
-        public FloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() + ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatLong extends NumberNumberCallSite {
-        public FloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() + ((Long) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class FloatInteger extends NumberNumberCallSite {
-        public FloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Float) receiver).doubleValue() + ((Integer) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongDouble extends NumberNumberCallSite {
-        public LongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Long) receiver).doubleValue() + (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongFloat extends NumberNumberCallSite {
-        public LongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Long) receiver).doubleValue() + ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongLong extends NumberNumberCallSite {
-        public LongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Long) receiver + (Long) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class LongInteger extends NumberNumberCallSite {
-        public LongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Long) receiver + ((Integer) arg).longValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerDouble extends NumberNumberCallSite {
-        public IntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Integer) receiver).doubleValue() + (Double) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerFloat extends NumberNumberCallSite {
-        public IntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Integer) receiver).doubleValue() + ((Float) arg).doubleValue();
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerLong extends NumberNumberCallSite {
-        public IntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return ((Integer) receiver).longValue() + (Long) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
-
-    private static class IntegerInteger extends NumberNumberCallSite {
-        public IntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-            super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);
-        }
-
-        public final Object call(Object receiver, Object arg) throws Throwable {
-            try {
-                if (checkCall(receiver, arg)) {
-                    return (Integer) receiver + (Integer) arg;
-                }
-            }
-            catch (ClassCastException e) {//
-            }
-            return super.call(receiver, arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayMetaMethod.java
index 4c2243e..cf71555 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayMetaMethod.java
@@ -18,13 +18,13 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
+import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSiteAwareMetaMethod;
 
 import java.lang.reflect.Modifier;
 
-public abstract class ArrayMetaMethod extends CallSiteAwareMetaMethod {
+public abstract class ArrayMetaMethod extends MetaMethod {
     protected static final CachedClass INTEGER_CLASS = ReflectionCache.getCachedClass(Integer.class);
     protected static final CachedClass[] INTEGER_CLASS_ARR = new CachedClass[]{INTEGER_CLASS};
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayGetAtMetaMethod.java
index d56d930..b3412df 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayGetAtMetaMethod.java
@@ -18,12 +18,8 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 
 public class BooleanArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
     private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(boolean[].class);
@@ -40,26 +36,4 @@ public class BooleanArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
         final boolean[] objects = (boolean[]) object;
         return objects[normaliseIndex((Integer) args[0], objects.length)];
     }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof boolean[] && arg instanceof Integer)
-                    && checkPojoMetaClass()) {
-                final boolean[] objects = (boolean[]) receiver;
-                return objects[normaliseIndex((Integer) arg, objects.length)];
-            } else
-                return super.call(receiver, arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayPutAtMetaMethod.java
index 3f52e13..102f4d6 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayPutAtMetaMethod.java
@@ -18,12 +18,8 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 
 public class BooleanArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
     private static final CachedClass OBJECT_CLASS = ReflectionCache.OBJECT_CLASS;
@@ -44,42 +40,4 @@ public class BooleanArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
         objects[index] = (Boolean) args[1];
         return null;
     }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer) || !(args[1] instanceof Boolean))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof boolean[] && args[0] instanceof Integer && args[1] instanceof Boolean)
-                    && checkPojoMetaClass()) {
-                final boolean[] objects = (boolean[]) receiver;
-                objects[normaliseIndex((Integer) args[0], objects.length)] = (Boolean) args[1];
-                return null;
-            } else
-                return super.call(receiver, args);
-        }
-
-        public Object call(Object receiver, Object arg1, Object arg2) throws Throwable {
-            if (checkPojoMetaClass()) {
-                try {
-                    final boolean[] objects = (boolean[]) receiver;
-                    objects[normaliseIndex((Integer) arg1, objects.length)] = (Boolean) arg2;
-                    return null;
-                }
-                catch (ClassCastException e) {
-                    if ((receiver instanceof boolean[]) && (arg1 instanceof Integer))
-                        throw e;
-                }
-            }
-            return super.call(receiver, arg1, arg2);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayGetAtMetaMethod.java
index e378f81..df8f5ab 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayGetAtMetaMethod.java
@@ -18,12 +18,8 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 
 public class ByteArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
     private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(byte[].class);
@@ -40,26 +36,4 @@ public class ByteArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
         final byte[] objects = (byte[]) object;
         return objects[normaliseIndex((Integer) args[0], objects.length)];
     }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof byte[] && arg instanceof Integer)
-                    && checkPojoMetaClass()) {
-                final byte[] objects = (byte[]) receiver;
-                return objects[normaliseIndex((Integer) arg, objects.length)];
-            } else
-                return super.call(receiver, arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayPutAtMetaMethod.java
index 2aba904..91557cb 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayPutAtMetaMethod.java
@@ -18,12 +18,8 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 
 public class ByteArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
     private static final CachedClass OBJECT_CLASS = ReflectionCache.OBJECT_CLASS;
@@ -48,42 +44,4 @@ public class ByteArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
             objects[index] = (Byte) args[1];
         return null;
     }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer) || !(args[1] instanceof Byte))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof byte[] && args[0] instanceof Integer && args[1] instanceof Byte)
-                    && checkPojoMetaClass()) {
-                final byte[] objects = (byte[]) receiver;
-                objects[normaliseIndex((Integer) args[0], objects.length)] = (Byte) args[1];
-                return null;
-            } else
-                return super.call(receiver, args);
-        }
-
-        public Object call(Object receiver, Object arg1, Object arg2) throws Throwable {
-            if (checkPojoMetaClass()) {
-                try {
-                    final byte[] objects = (byte[]) receiver;
-                    objects[normaliseIndex((Integer) arg1, objects.length)] = (Byte) arg2;
-                    return null;
-                }
-                catch (ClassCastException e) {
-                    if ((receiver instanceof byte[]) && (arg1 instanceof Integer))
-                        throw e;
-                }
-            }
-            return super.call(receiver, arg1, arg2);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayGetAtMetaMethod.java
index c86fa31..a97e3bf 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayGetAtMetaMethod.java
@@ -18,12 +18,8 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 
 public class CharacterArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
     private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(char[].class);
@@ -41,25 +37,4 @@ public class CharacterArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
         return objects[normaliseIndex((Integer) args[0], objects.length)];
     }
 
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof char[] && arg instanceof Integer)
-                    && checkPojoMetaClass()) {
-                final char[] objects = (char[]) receiver;
-                return objects[normaliseIndex((Integer) arg, objects.length)];
-            } else
-                return super.call(receiver, arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayPutAtMetaMethod.java
index 039e21c..04b07fc 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayPutAtMetaMethod.java
@@ -18,12 +18,8 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
 
 public class CharacterArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
@@ -46,41 +42,4 @@ public class CharacterArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
         return null;
     }
 
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer) || !(args[1] instanceof Character))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof char[] && args[0] instanceof Integer && args[1] instanceof Character)
-                    && checkPojoMetaClass()) {
-                final char[] objects = (char[]) receiver;
-                objects[normaliseIndex((Integer) args[0], objects.length)] = (Character) args[1];
-                return null;
-            } else
-                return super.call(receiver, args);
-        }
-
-        public Object call(Object receiver, Object arg1, Object arg2) throws Throwable {
-            if (checkPojoMetaClass()) {
-                try {
-                    final char[] objects = (char[]) receiver;
-                    objects[normaliseIndex((Integer) arg1, objects.length)] = (Character) arg2;
-                    return null;
-                }
-                catch (ClassCastException e) {
-                    if ((receiver instanceof char[]) && (arg1 instanceof Integer))
-                        throw e;
-                }
-            }
-            return super.call(receiver, arg1, arg2);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java
index 0dac9ab..b73da20 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java
@@ -18,12 +18,8 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 
 public class DoubleArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
     private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(double[].class);
@@ -40,26 +36,4 @@ public class DoubleArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
         final double[] objects = (double[]) object;
         return objects[normaliseIndex((Integer) args[0], objects.length)];
     }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof double[] && arg instanceof Integer)
-                    && checkPojoMetaClass()) {
-                final double[] objects = (double[]) receiver;
-                return objects[normaliseIndex((Integer) arg, objects.length)];
-            } else
-                return super.call(receiver, arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java
index d588d55..17969f2 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java
@@ -19,12 +19,8 @@
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
 import groovy.lang.GString;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
 
 public class DoubleArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
@@ -56,41 +52,4 @@ public class DoubleArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
         return null;
     }
 
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer) || !(args[1] instanceof Double))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof double[] && args[0] instanceof Integer && args[1] instanceof Double)
-                    && checkPojoMetaClass()) {
-                final double[] objects = (double[]) receiver;
-                objects[normaliseIndex((Integer) args[0], objects.length)] = (Double) args[1];
-                return null;
-            } else
-                return super.call(receiver, args);
-        }
-
-        public Object call(Object receiver, Object arg1, Object arg2) throws Throwable {
-            if (checkPojoMetaClass()) {
-                try {
-                    final double[] objects = (double[]) receiver;
-                    objects[normaliseIndex((Integer) arg1, objects.length)] = (Double) arg2;
-                    return null;
-                }
-                catch (ClassCastException e) {
-                    if ((receiver instanceof double[]) && (arg1 instanceof Integer))
-                        throw e;
-                }
-            }
-            return super.call(receiver, arg1, arg2);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayGetAtMetaMethod.java
index 3485f24..f504aef 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayGetAtMetaMethod.java
@@ -18,12 +18,8 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 
 public class FloatArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
     private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(float[].class);
@@ -40,26 +36,4 @@ public class FloatArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
         final float[] objects = (float[]) object;
         return objects[normaliseIndex((Integer) args[0], objects.length)];
     }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof float[] && arg instanceof Integer)
-                    && checkPojoMetaClass()) {
-                final float[] objects = (float[]) receiver;
-                return objects[normaliseIndex((Integer) arg, objects.length)];
-            } else
-                return super.call(receiver, arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayPutAtMetaMethod.java
index 5b70f5e..f97c075 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayPutAtMetaMethod.java
@@ -19,12 +19,8 @@
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
 import groovy.lang.GString;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
 
 public class FloatArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
@@ -55,42 +51,4 @@ public class FloatArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
             objects[index] = (Float) args[1];
         return null;
     }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer) || !(args[1] instanceof Float))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof float[] && args[0] instanceof Integer && args[1] instanceof Float)
-                    && checkPojoMetaClass()) {
-                final float[] objects = (float[]) receiver;
-                objects[normaliseIndex((Integer) args[0], objects.length)] = (Float) args[1];
-                return null;
-            } else
-                return super.call(receiver, args);
-        }
-
-        public Object call(Object receiver, Object arg1, Object arg2) throws Throwable {
-            if (checkPojoMetaClass()) {
-                try {
-                    final float[] objects = (float[]) receiver;
-                    objects[normaliseIndex((Integer) arg1, objects.length)] = (Float) arg2;
-                    return null;
-                }
-                catch (ClassCastException e) {
-                    if ((receiver instanceof float[]) && (arg1 instanceof Integer))
-                        throw e;
-                }
-            }
-            return super.call(receiver, arg1, arg2);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayGetAtMetaMethod.java
index aadcde0..9b50454 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayGetAtMetaMethod.java
@@ -18,12 +18,8 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 
 public class IntegerArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
     private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(int[].class);
@@ -40,26 +36,4 @@ public class IntegerArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
         final int[] objects = (int[]) object;
         return objects[normaliseIndex((Integer) args[0], objects.length)];
     }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof int[] && arg instanceof Integer)
-                    && checkPojoMetaClass()) {
-                final int[] objects = (int[]) receiver;
-                return objects[normaliseIndex((Integer) arg, objects.length)];
-            } else
-                return super.call(receiver, arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayPutAtMetaMethod.java
index 71d4114..8c8ea11 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayPutAtMetaMethod.java
@@ -19,12 +19,8 @@
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
 import groovy.lang.GString;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
 
 public class IntegerArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
@@ -56,41 +52,4 @@ public class IntegerArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
         return null;
     }
 
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer) || !(args[1] instanceof Integer))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof int[] && args[0] instanceof Integer && args[1] instanceof Integer)
-                    && checkPojoMetaClass()) {
-                final int[] objects = (int[]) receiver;
-                objects[normaliseIndex((Integer) args[0], objects.length)] = (Integer) args[1];
-                return null;
-            } else
-                return super.call(receiver, args);
-        }
-
-        public Object call(Object receiver, Object arg1, Object arg2) throws Throwable {
-            if (checkPojoMetaClass()) {
-                try {
-                    final int[] objects = (int[]) receiver;
-                    objects[normaliseIndex((Integer) arg1, objects.length)] = (Integer) arg2;
-                    return null;
-                }
-                catch (ClassCastException e) {
-                    if ((receiver instanceof int[]) && (arg1 instanceof Integer))
-                        throw e;
-                }
-            }
-            return super.call(receiver, arg1, arg2);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayGetAtMetaMethod.java
index d3f14bb..d682c5d 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayGetAtMetaMethod.java
@@ -18,12 +18,8 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 
 public class LongArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
     private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(long[].class);
@@ -40,26 +36,4 @@ public class LongArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
         final long[] objects = (long[]) object;
         return objects[normaliseIndex((Integer) args[0], objects.length)];
     }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof long[] && arg instanceof Integer)
-                    && checkPojoMetaClass()) {
-                final long[] objects = (long[]) receiver;
-                return objects[normaliseIndex((Integer) arg, objects.length)];
-            } else
-                return super.call(receiver, arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayPutAtMetaMethod.java
index 097d21f..c57a620 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayPutAtMetaMethod.java
@@ -19,12 +19,8 @@
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
 import groovy.lang.GString;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
 
 public class LongArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
@@ -56,41 +52,4 @@ public class LongArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
         return null;
     }
 
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer) || !(args[1] instanceof Long))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof long[] && args[0] instanceof Integer && args[1] instanceof Long)
-                    && checkPojoMetaClass()) {
-                final long[] objects = (long[]) receiver;
-                objects[normaliseIndex((Integer) args[0], objects.length)] = (Long) args[1];
-                return null;
-            } else
-                return super.call(receiver, args);
-        }
-
-        public Object call(Object receiver, Object arg1, Object arg2) throws Throwable {
-            if (checkPojoMetaClass()) {
-                try {
-                    final long[] objects = (long[]) receiver;
-                    objects[normaliseIndex((Integer) arg1, objects.length)] = (Long) arg2;
-                    return null;
-                }
-                catch (ClassCastException e) {
-                    if ((receiver instanceof long[]) && (arg1 instanceof Integer))
-                        throw e;
-                }
-            }
-            return super.call(receiver, arg1, arg2);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayGetAtMetaMethod.java
index c2dcfa5..e511527 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayGetAtMetaMethod.java
@@ -18,12 +18,8 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 
 public class ObjectArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
     private static final CachedClass OBJECT_ARR_CLASS = ReflectionCache.OBJECT_ARRAY_CLASS;
@@ -40,31 +36,4 @@ public class ObjectArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
         final Object[] objects = (Object[]) object;
         return objects[normaliseIndex((Integer) arguments[0], objects.length)];
     }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object arg) throws Throwable {
-            if (checkPojoMetaClass()) {
-                try {
-                    final Object[] objects = (Object[]) receiver;
-                    return objects[normaliseIndex((Integer) arg, objects.length)];
-                }
-                catch (ClassCastException e) {
-                    if ((receiver instanceof Object[]) && (arg instanceof Integer))
-                        throw e;
-                }
-            }
-            return super.call(receiver, arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayPutAtMetaMethod.java
index 3db454d..832fa88 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayPutAtMetaMethod.java
@@ -19,12 +19,8 @@
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
 import groovy.lang.GString;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
 
 public class ObjectArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
@@ -66,32 +62,4 @@ public class ObjectArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
         }
         return adjustedNewVal;
     }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object arg1, Object arg2) throws Throwable {
-            if (checkPojoMetaClass()) {
-                try {
-                    final Object[] objects = (Object[]) receiver;
-                    objects[normaliseIndex((Integer) arg1, objects.length)] = adjustNewValue(objects, arg2);
-                    return null;
-                }
-                catch (ClassCastException e) {
-                    if ((receiver instanceof Object[]) && (arg1 instanceof Integer))
-                        throw e;
-                }
-            }
-            return super.call(receiver, arg1, arg2);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayGetAtMetaMethod.java
index d061874..53bf797 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayGetAtMetaMethod.java
@@ -18,12 +18,8 @@
  */
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 
 public class ShortArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
     private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(short[].class);
@@ -40,26 +36,4 @@ public class ShortArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
         final short[] objects = (short[]) object;
         return objects[normaliseIndex((Integer) args[0], objects.length)];
     }
-
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof short[] && arg instanceof Integer)
-                    && checkPojoMetaClass()) {
-                final short[] objects = (short[]) receiver;
-                return objects[normaliseIndex((Integer) arg, objects.length)];
-            } else
-                return super.call(receiver, arg);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayPutAtMetaMethod.java
index cc615bf..b6aea07 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayPutAtMetaMethod.java
@@ -19,12 +19,8 @@
 package org.codehaus.groovy.runtime.dgmimpl.arrays;
 
 import groovy.lang.GString;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ReflectionCache;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
 
 public class ShortArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
@@ -56,41 +52,4 @@ public class ShortArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
         return null;
     }
 
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (!(args[0] instanceof Integer) || !(args[1] instanceof Short))
-            return PojoMetaMethodSite.createNonAwareCallSite(site, metaClass, metaMethod, params, args);
-        else
-            return new MyPojoMetaMethodSite(site, metaClass, metaMethod, params);
-    }
-
-    private static class MyPojoMetaMethodSite extends PojoMetaMethodSite {
-        public MyPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params) {
-            super(site, metaClass, metaMethod, params);
-        }
-
-        public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof short[] && args[0] instanceof Integer && args[1] instanceof Short)
-                    && checkPojoMetaClass()) {
-                final short[] objects = (short[]) receiver;
-                objects[normaliseIndex((Integer) args[0], objects.length)] = (Short) args[1];
-                return null;
-            } else
-                return super.call(receiver, args);
-        }
-
-        public Object call(Object receiver, Object arg1, Object arg2) throws Throwable {
-            if (checkPojoMetaClass()) {
-                try {
-                    final short[] objects = (short[]) receiver;
-                    objects[normaliseIndex((Integer) arg1, objects.length)] = (Short) arg2;
-                    return null;
-                }
-                catch (ClassCastException e) {
-                    if ((receiver instanceof short[]) && (arg1 instanceof Integer))
-                        throw e;
-                }
-            }
-            return super.call(receiver, arg1, arg2);
-        }
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
index af0bf2b..6f495d6 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
@@ -37,8 +37,6 @@ import org.codehaus.groovy.reflection.CachedMethod;
 import org.codehaus.groovy.reflection.ParameterTypes;
 import org.codehaus.groovy.runtime.InvokerHelper;
 import org.codehaus.groovy.runtime.MetaClassHelper;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PogoMetaClassSite;
 import org.codehaus.groovy.runtime.wrappers.Wrapper;
 import org.codehaus.groovy.util.FastArray;
 
@@ -672,18 +670,6 @@ public final class ClosureMetaClass extends MetaClassImpl {
         throw new UnsupportedOperationException();
     }
 
-    public CallSite createPojoCallSite(CallSite site, Object receiver, Object[] args) {
-        throw new UnsupportedOperationException();
-    }
-
-    public CallSite createPogoCallSite(CallSite site, Object[] args) {
-        return new PogoMetaClassSite(site, this);
-    }
-
-    public CallSite createPogoCallCurrentSite(CallSite site, Class sender, Object[] args) {
-        return new PogoMetaClassSite(site, this);
-    }
-
     public List respondsTo(Object obj, String name, Object[] argTypes) {
         loadMetaInfo();
         return super.respondsTo(obj, name, argTypes);
diff --git a/src/test/org/codehaus/groovy/classgen/JO.java b/src/test/org/codehaus/groovy/classgen/JO.java
index 206c926..936d2a2 100644
--- a/src/test/org/codehaus/groovy/classgen/JO.java
+++ b/src/test/org/codehaus/groovy/classgen/JO.java
@@ -38,7 +38,6 @@ public class JO {
 
     public static void main(String[] args) throws Exception {
         ASMifier.main(new String[]{"target/classes/groovy/swing/SwingBuilder.class"});
-//        ASMifierClassVisitor.main(new String[]{"target/classes/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.class"});
 //        ASMifierClassVisitor.main(new String[]{"target/test-classes/spectralnorm.class"});
 //        ASMifierClassVisitor.main(new String[]{"target/test-classes/groovy/bugs/CustomMetaClassTest.class"});
     }
diff --git a/subprojects/groovy-nio/src/main/java/org/apache/groovy/nio/extensions/NioExtensions.java b/subprojects/groovy-nio/src/main/java/org/apache/groovy/nio/extensions/NioExtensions.java
index 733e540..f1e5e93 100644
--- a/subprojects/groovy-nio/src/main/java/org/apache/groovy/nio/extensions/NioExtensions.java
+++ b/subprojects/groovy-nio/src/main/java/org/apache/groovy/nio/extensions/NioExtensions.java
@@ -69,6 +69,7 @@ import java.util.regex.Pattern;
 import static java.nio.file.StandardOpenOption.APPEND;
 import static java.nio.file.StandardOpenOption.CREATE;
 import static org.codehaus.groovy.runtime.DefaultGroovyMethods.get;
+import static org.codehaus.groovy.runtime.DefaultGroovyMethods.isCase;
 
 /**
  * This class defines new groovy methods for Readers, Writers, InputStreams and
@@ -1224,12 +1225,11 @@ public class NioExtensions extends DefaultGroovyMethodsSupport {
         checkDir(self);
         try (DirectoryStream<Path> stream = Files.newDirectoryStream(self)) {
             Iterator<Path> itr = stream.iterator();
-            BooleanReturningMethodInvoker bmi = new BooleanReturningMethodInvoker("isCase");
             while (itr.hasNext()) {
                 Path currentPath = itr.next();
                 if ((fileType != FileType.FILES && Files.isDirectory(currentPath)) ||
                         (fileType != FileType.DIRECTORIES && Files.isRegularFile(currentPath))) {
-                    if (bmi.invoke(nameFilter, currentPath.getFileName().toString()))
+                    if (isCase(nameFilter, currentPath.getFileName().toString()))
                         closure.call(currentPath);
                 }
             }