From bf0fc381ba18f4d71e72b5b822f5e424cab80060 Mon Sep 17 00:00:00 2001
From: Lari Hotari <lari.hotari@sagire.fi>
Date: Fri, 4 May 2012 06:40:06 +0300
Subject: [PATCH] Fix for GROOVY-5428 (Eliminate ClassCastExceptions)

---
 .../runtime/callsite/PogoMetaMethodSite.java       |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/main/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.java b/src/main/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.java
index 0c27d02..f947060 100644
--- a/src/main/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.java
+++ b/src/main/org/codehaus/groovy/runtime/callsite/PogoMetaMethodSite.java
@@ -73,6 +73,7 @@ public class PogoMetaMethodSite extends MetaMethodSite {
     protected boolean checkCall(Object receiver, Object[] args) {
         try {
             return !GroovyCategorySupport.hasCategoryInCurrentThread()
+               && receiver.getClass() == metaClass.getTheClass()
                && ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
                && MetaClassHelper.sameClasses(params, args);
         }
@@ -91,6 +92,7 @@ public class PogoMetaMethodSite extends MetaMethodSite {
     protected boolean checkCall(Object receiver) {
         try {
             return !GroovyCategorySupport.hasCategoryInCurrentThread()
+               && receiver.getClass() == metaClass.getTheClass()                    
                && ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
                && MetaClassHelper.sameClasses(params);
         }
@@ -109,6 +111,7 @@ public class PogoMetaMethodSite extends MetaMethodSite {
     protected boolean checkCall(Object receiver, Object arg1) {
         try {
             return !GroovyCategorySupport.hasCategoryInCurrentThread()
+               && receiver.getClass() == metaClass.getTheClass()
                && ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
                && MetaClassHelper.sameClasses(params, arg1);
         }
@@ -127,6 +130,7 @@ public class PogoMetaMethodSite extends MetaMethodSite {
     protected boolean checkCall(Object receiver, Object arg1, Object arg2) {
         try {
             return !GroovyCategorySupport.hasCategoryInCurrentThread()
+               && receiver.getClass() == metaClass.getTheClass()                    
                && ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
                && MetaClassHelper.sameClasses(params, arg1, arg2);
         }
@@ -145,6 +149,7 @@ public class PogoMetaMethodSite extends MetaMethodSite {
     protected boolean checkCall(Object receiver, Object arg1, Object arg2, Object arg3) {
         try {
             return !GroovyCategorySupport.hasCategoryInCurrentThread()
+               && receiver.getClass() == metaClass.getTheClass()                  
                && ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
                && MetaClassHelper.sameClasses(params, arg1, arg2, arg3);
         }
@@ -163,6 +168,7 @@ public class PogoMetaMethodSite extends MetaMethodSite {
     protected boolean checkCall(Object receiver, Object arg1, Object arg2, Object arg3, Object arg4) {
         try {
             return !GroovyCategorySupport.hasCategoryInCurrentThread()
+               && receiver.getClass() == metaClass.getTheClass()                    
                && ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
                && MetaClassHelper.sameClasses(params, arg1, arg2, arg3, arg4);
         }
-- 
1.7.0.4

