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 2021/09/08 07:18:28 UTC
[groovy] 01/01: GROOVY-10216: Avoid unnecessary security checks for
each invocation
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch danielsun/avoid-unnecessary-security-checks
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 9b383ac8b3a9e78c61c7c7d2f9b5d36c01b580c3
Author: Daniel Sun <su...@apache.org>
AuthorDate: Wed Sep 8 13:48:54 2021 +0800
GROOVY-10216: Avoid unnecessary security checks for each invocation
---
src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java | 6 ++++++
src/main/java/org/codehaus/groovy/reflection/CachedField.java | 6 ++++++
src/main/java/org/codehaus/groovy/reflection/CachedMethod.java | 6 ++++++
3 files changed, 18 insertions(+)
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java b/src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java
index 1546bd4..8b584f1 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java
@@ -125,6 +125,12 @@ public class CachedConstructor extends ParameterTypes {
private boolean makeAccessibleDone = false;
private void makeAccessibleIfNecessary() {
if (!makeAccessibleDone) {
+ if (cachedConstructor.isAccessible()) {
+ try {
+ cachedConstructor.setAccessible(true);
+ } catch (Throwable ignored) {
+ }
+ }
makeAccessibleInPrivilegedAction(cachedConstructor);
makeAccessibleDone = true;
}
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedField.java b/src/main/java/org/codehaus/groovy/reflection/CachedField.java
index 6c666aa..6e7b64c 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedField.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedField.java
@@ -95,6 +95,12 @@ public class CachedField extends MetaProperty {
private transient boolean madeAccessible;
private void makeAccessibleIfNecessary() {
if (!madeAccessible) {
+ if (field.isAccessible()) {
+ try {
+ field.setAccessible(true);
+ } catch (Throwable ignored) {
+ }
+ }
makeAccessibleInPrivilegedAction(field);
madeAccessible = true;
}
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedMethod.java b/src/main/java/org/codehaus/groovy/reflection/CachedMethod.java
index 838db6a..6eb68d8 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedMethod.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedMethod.java
@@ -394,6 +394,12 @@ public class CachedMethod extends MetaMethod implements Comparable {
private boolean makeAccessibleDone = false;
private void makeAccessibleIfNecessary() {
if (!makeAccessibleDone) {
+ if (cachedMethod.isAccessible()) {
+ try {
+ cachedMethod.setAccessible(true);
+ } catch (Throwable ignored) {
+ }
+ }
makeAccessibleInPrivilegedAction(cachedMethod);
makeAccessibleDone = true;
}