Add special case to filter out getMetaClass for Groovy objects
diff --git a/src/main/java/org/eclipse/yasson/internal/ClassParser.java b/src/main/java/org/eclipse/yasson/internal/ClassParser.java index 832a99f..c5f6016 100644 --- a/src/main/java/org/eclipse/yasson/internal/ClassParser.java +++ b/src/main/java/org/eclipse/yasson/internal/ClassParser.java
@@ -173,7 +173,7 @@ for (Method method : declaredMethods) { String name = method.getName(); //isBridge method filters out methods inherited from interfaces - if (!isPropertyMethod(method) || method.isBridge()) { + if (!isPropertyMethod(method) || method.isBridge() || isSpecialCaseMethod(method)) { continue; } final String propertyName = toPropertyMethod(name); @@ -181,6 +181,16 @@ Property property = registerMethod(propertyName, method, classElement, classProperties); } } + + /** + * Filter out certain methods that get forcibly added to some classes. + * For example the public groovy.lang.MetaClass X.getMetaClass() method from Groovy classes + */ + private boolean isSpecialCaseMethod(Method m) { + if (m.getName().equals("getMetaClass") && m.getReturnType().getCanonicalName().equals("groovy.lang.MetaClass")) + return true; + return false; + } private boolean isGetter(Method m) { return (m.getName().startsWith(GET_PREFIX) || m.getName().startsWith(IS_PREFIX)) && m.getParameterCount() == 0;