diff options
author | Shigeru Chiba <chibash@users.noreply.github.com> | 2019-04-16 01:09:18 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-16 01:09:18 +0900 |
commit | ab77824c6fadfc22274b4d1c8e65f5f0401b5b34 (patch) | |
tree | 615ac45b1aacb748dfe745ef5f92aaebe10138f2 /src/main/javassist | |
parent | a332834881c3745f190c97858d1b7881b485a9c0 (diff) | |
parent | e71398c6fc652b8c522da858906a4385cf102130 (diff) | |
download | javassist-ab77824c6fadfc22274b4d1c8e65f5f0401b5b34.tar.gz javassist-ab77824c6fadfc22274b4d1c8e65f5f0401b5b34.zip |
Merge pull request #253 from sam-ma/master
Fix #252 make instrumentation works on JDK11 for the inner class which has access to the private constructor of the host class
Diffstat (limited to 'src/main/javassist')
-rw-r--r-- | src/main/javassist/compiler/MemberCodeGen.java | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/main/javassist/compiler/MemberCodeGen.java b/src/main/javassist/compiler/MemberCodeGen.java index ad254816..25be0ee1 100644 --- a/src/main/javassist/compiler/MemberCodeGen.java +++ b/src/main/javassist/compiler/MemberCodeGen.java @@ -636,8 +636,22 @@ public class MemberCodeGen extends CodeGen { throw new CompileError("no such constructor: " + targetClass.getName()); if (declClass != thisClass && AccessFlag.isPrivate(acc)) { - desc = getAccessibleConstructor(desc, declClass, minfo); - bytecode.addOpcode(Opcode.ACONST_NULL); // the last parameter + boolean isNested = false; + if (declClass.getClassFile().getMajorVersion() >= ClassFile.JAVA_11) { + try { + CtClass[] nestedClasses = declClass.getNestedClasses(); + for (int i = 0; i < nestedClasses.length; i++) { + if (thisClass == nestedClasses[i]) { + isNested = true; + break; + } + } + } catch (NotFoundException ignored) { } + } + if (!isNested) { + desc = getAccessibleConstructor(desc, declClass, minfo); + bytecode.addOpcode(Opcode.ACONST_NULL); // the last parameter + } } } else if (AccessFlag.isPrivate(acc)) |