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/03/28 12:07:00 UTC
[groovy] 01/01: GROOVY-9487: Update and check if initialized via
same field of metaclass
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch GROOVY-9487
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 1665bb5763658c08c288779794ae905e102f966c
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sat Mar 28 20:06:21 2020 +0800
GROOVY-9487: Update and check if initialized via same field of metaclass
---
src/main/java/groovy/lang/ExpandoMetaClass.java | 4 +++-
src/main/java/groovy/lang/MetaClassImpl.java | 6 +++++-
.../codehaus/groovy/runtime/metaclass/ClosureMetaClass.java | 10 ++++++++--
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/main/java/groovy/lang/ExpandoMetaClass.java b/src/main/java/groovy/lang/ExpandoMetaClass.java
index 3ecf073..73a2ad4 100644
--- a/src/main/java/groovy/lang/ExpandoMetaClass.java
+++ b/src/main/java/groovy/lang/ExpandoMetaClass.java
@@ -272,7 +272,7 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
// These two properties are used when no ExpandoMetaClassCreationHandle is present
private MetaClass myMetaClass;
- private boolean initialized;
+ private volatile boolean initialized;
private volatile boolean modified;
private boolean initCalled;
@@ -502,6 +502,7 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
* Checks if the meta class is initialized.
* @see groovy.lang.MetaClassImpl#isInitialized()
*/
+ @Override
protected boolean isInitialized() {
try {
readLock.lock();
@@ -511,6 +512,7 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
}
}
+ @Override
protected void setInitialized(boolean b) {
this.initialized = b;
}
diff --git a/src/main/java/groovy/lang/MetaClassImpl.java b/src/main/java/groovy/lang/MetaClassImpl.java
index 141deab..f3a149a 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -3135,6 +3135,10 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
return initialized;
}
+ protected void setInitialized(boolean initialized) {
+ this.initialized = initialized;
+ }
+
/**
* @return {@code false}: add method
* {@code null} : ignore method
@@ -3391,7 +3395,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
// Introspection failure...
// May happen in Android
}
- initialized = true;
+ setInitialized(true);
}
}
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 786a0ba..af0bf2b 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
@@ -436,6 +436,7 @@ public final class ClosureMetaClass extends MetaClassImpl {
attributeInitDone = !attributes.isEmpty();
}
+ @Override
public synchronized void initialize() {
if (!isInitialized()) {
CachedMethod[] methodArray = theCachedClass.getMethods();
@@ -446,8 +447,7 @@ public final class ClosureMetaClass extends MetaClassImpl {
}
}
assignMethodChooser();
-
- initialized = true;
+ setInitialized(true);
}
}
@@ -575,10 +575,16 @@ public final class ClosureMetaClass extends MetaClassImpl {
return null;
}
+ @Override
protected boolean isInitialized() {
return initialized;
}
+ @Override
+ protected void setInitialized(boolean initialized) {
+ this.initialized = initialized;
+ }
+
public MetaMethod getStaticMetaMethod(String name, Object[] args) {
return CLOSURE_METACLASS.getStaticMetaMethod(name, args);
}