зеркало из https://github.com/mono/ikvm-fork.git
Added support for @ikvm.lang.Internal access modifier (doesn't work yet, depends on java.lang.reflect.Constructor/Method/Field to return 0x40000000 bit from getModifiers()).
This commit is contained in:
Родитель
bebe6612b7
Коммит
71f1928fb9
|
@ -23,6 +23,14 @@
|
|||
* have any questions.
|
||||
*/
|
||||
|
||||
/*IKVM*/
|
||||
/* Modified for IKVM by Jeroen Frijters
|
||||
*
|
||||
* May 27, 2007 Added support for @ikvm.lang.Internal access modifier
|
||||
*
|
||||
*/
|
||||
/*IKVM*/
|
||||
|
||||
package sun.reflect;
|
||||
|
||||
import java.lang.reflect.*;
|
||||
|
@ -101,6 +109,9 @@ public class Reflection {
|
|||
}
|
||||
}
|
||||
|
||||
/*IKVM*/
|
||||
private static native boolean checkInternalAccess(Class currentClass, Class memberClass);
|
||||
|
||||
public static boolean verifyMemberAccess(Class currentClass,
|
||||
// Declaring class of field
|
||||
// or method
|
||||
|
@ -124,7 +135,8 @@ public class Reflection {
|
|||
if (!Modifier.isPublic(getClassAccessFlags(memberClass))) {
|
||||
isSameClassPackage = isSameClassPackage(currentClass, memberClass);
|
||||
gotIsSameClassPackage = true;
|
||||
if (!isSameClassPackage) {
|
||||
/*IKVM*/
|
||||
if (!isSameClassPackage && !checkInternalAccess(currentClass, memberClass)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -135,6 +147,12 @@ public class Reflection {
|
|||
return true;
|
||||
}
|
||||
|
||||
/*IKVM*/
|
||||
// Is the member @ikvm.lang.Internal accessible?
|
||||
if ((modifiers & 0x40000000) != 0) {
|
||||
return currentClass.getClassLoader() == memberClass.getClassLoader();
|
||||
}
|
||||
|
||||
boolean successSoFar = false;
|
||||
|
||||
if (Modifier.isProtected(modifiers)) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче