You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2020/08/29 22:58:28 UTC
[groovy] branch master updated: reuse CachedField#getProperty
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 57c8a11 reuse CachedField#getProperty
57c8a11 is described below
commit 57c8a116098c750e6e00b727112f66f2b8c10df5
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sat Aug 29 17:57:47 2020 -0500
reuse CachedField#getProperty
---
.../callsite/GetEffectivePogoFieldSite.java | 58 ++++++++--------------
.../callsite/GetEffectivePojoFieldSite.java | 36 ++++++--------
2 files changed, 36 insertions(+), 58 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePogoFieldSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePogoFieldSite.java
index efa5fb5..b345cbe 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePogoFieldSite.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePogoFieldSite.java
@@ -19,60 +19,46 @@
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;
+ private final CachedField effective;
- public GetEffectivePogoFieldSite(CallSite site, MetaClass metaClass, CachedField effective) {
+ public GetEffectivePogoFieldSite(final CallSite site, final MetaClass metaClass, final CachedField effective) {
super(site);
this.metaClass = metaClass;
- this.effective = effective.getCachedField();
+ this.effective = effective;
+ }
+
+ @Override
+ public final CallSite acceptGetProperty(final Object receiver) {
+ return isEffective(receiver) ? this : createGetPropertySite(receiver);
}
- 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);
- }
+ @Override
+ public final CallSite acceptGroovyObjectGetProperty(final Object receiver) {
+ return isEffective(receiver) ? this : createGroovyObjectGetPropertySite(receiver);
}
- public final CallSite acceptGetProperty(Object receiver) {
- if (GroovyCategorySupport.hasCategoryInCurrentThread() || !(receiver instanceof GroovyObject) || ((GroovyObject)receiver).getMetaClass() != metaClass) {
- return createGetPropertySite(receiver);
- } else {
- return this;
- }
+ @Override
+ public final Object callGetProperty(final Object receiver) throws Throwable {
+ return isEffective(receiver) ? getProperty(receiver) : createGetPropertySite(receiver).getProperty(receiver);
}
- public final Object callGroovyObjectGetProperty (Object receiver) throws Throwable {
- if (GroovyCategorySupport.hasCategoryInCurrentThread() || ((GroovyObject) receiver).getMetaClass() != metaClass) {
- return createGroovyObjectGetPropertySite(receiver).getProperty(receiver);
- } else {
- return getProperty(receiver);
- }
+ @Override
+ public final Object callGroovyObjectGetProperty (final Object receiver) throws Throwable {
+ return isEffective(receiver) ? getProperty(receiver) : createGroovyObjectGetPropertySite(receiver).getProperty(receiver);
}
- public final CallSite acceptGroovyObjectGetProperty(Object receiver) {
- if (GroovyCategorySupport.hasCategoryInCurrentThread() || !(receiver instanceof GroovyObject) || ((GroovyObject)receiver).getMetaClass() != metaClass) {
- return createGroovyObjectGetPropertySite(receiver);
- } else {
- return this;
- }
+ @Override
+ public final Object getProperty(final Object receiver) {
+ return effective.getProperty(receiver);
}
- public final Object getProperty(Object receiver) {
- try {
- return effective.get(receiver);
- } catch (IllegalAccessException e) {
- throw new GroovyRuntimeException("Cannot get the property '" + name + "'.", e);
- }
+ private boolean isEffective(final Object receiver) {
+ return !GroovyCategorySupport.hasCategoryInCurrentThread() && receiver instanceof GroovyObject && ((GroovyObject) receiver).getMetaClass() == metaClass;
}
}
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePojoFieldSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePojoFieldSite.java
index f1c4d71..2e8a698 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePojoFieldSite.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/GetEffectivePojoFieldSite.java
@@ -18,43 +18,35 @@
*/
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;
+ private final CachedField effective;
+ private final int metaClassVersion;
- public GetEffectivePojoFieldSite(CallSite site, MetaClassImpl metaClass, CachedField effective) {
+ public GetEffectivePojoFieldSite(final CallSite site, final MetaClassImpl metaClass, final CachedField effective) {
super(site);
this.metaClass = metaClass;
- this.effective = effective.getCachedField();
- version = metaClass.getVersion();
+ this.effective = effective;
+ this.metaClassVersion = metaClass.getVersion();
}
-// public final Object callGetProperty (Object receiver) throws Throwable {
-// return acceptGetProperty(receiver).getProperty(receiver);
-// }
+ @Override
+ public final CallSite acceptGetProperty(final Object receiver) {
+ if (GroovyCategorySupport.hasCategoryInCurrentThread()
+ || metaClass.getTheClass() != receiver.getClass()
+ || metaClass.getVersion() != metaClassVersion) {
- 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;
}
+ 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);
- }
+ @Override
+ public final Object getProperty(final Object receiver) {
+ return effective.getProperty(receiver);
}
}