OSDN Git Service

New regression test in 042-new-instance
authorPrzemyslaw Szczepaniak <pszczepaniak@google.com>
Wed, 9 Dec 2015 09:57:36 +0000 (09:57 +0000)
committerPrzemyslaw Szczepaniak <pszczepaniak@google.com>
Wed, 9 Dec 2015 11:36:59 +0000 (11:36 +0000)
Test that Constructor#newInstance uses its caller
frame for the accessibility check.

Bug: 25817515
Change-Id: If8743ac39281db3378da93f793489c1e8f7ea15a
(cherry picked from commit 7a980a2f6af2f0cd83c1ab223a7736a18a8ccde3)

test/042-new-instance/expected.txt
test/042-new-instance/src/Main.java
test/042-new-instance/src/otherpackage/ConstructorAccess.java [new file with mode: 0644]

index 7d843d1..c5de313 100644 (file)
@@ -9,3 +9,4 @@ Cons StaticInnerClass succeeded
 Cons got expected PackageAccess complaint
 Cons got expected InstantationException
 Cons got expected PackageAccess2 complaint
+Cons ConstructorAccess succeeded
index b0a5fd4..8cd6b2e 100644 (file)
@@ -156,6 +156,14 @@ public class Main {
             ex.printStackTrace();
         }
 
+        // should succeed
+        try {
+            otherpackage.ConstructorAccess.newConstructorInstance();
+            System.out.println("Cons ConstructorAccess succeeded");
+        } catch (Exception ex) {
+            System.err.println("Cons ConstructorAccess failed");
+            ex.printStackTrace();
+        }
     }
 
     class InnerClass {
@@ -173,7 +181,6 @@ class LocalClass2 {
     public LocalClass2() {}
 }
 
-
 class LocalClass3 {
     public static void main() {
         try {
diff --git a/test/042-new-instance/src/otherpackage/ConstructorAccess.java b/test/042-new-instance/src/otherpackage/ConstructorAccess.java
new file mode 100644 (file)
index 0000000..a74e9a0
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package otherpackage;
+
+import java.lang.reflect.Constructor;
+
+public class ConstructorAccess {
+
+    static class Inner {
+      Inner() {}
+    }
+
+    // Test for regression in b/25817515. Inner class constructor should
+    // be accessible from this static method, but if we over-shoot and check
+    // accessibility using the frame below (in Main class), we will see an
+    // IllegalAccessException from #newInstance
+    static public void newConstructorInstance() throws Exception {
+      Class c = Inner.class;
+      Constructor cons = c.getDeclaredConstructor((Class[]) null);
+      Object obj = cons.newInstance();
+    }
+}