isArray() private method

private isArray ( ) : bool
return bool
コード例 #1
0
    static bool isStaticallyInvocable(MemberName member)
    {
        if (member == null)
        {
            return(false);
        }
        if (member.isConstructor())
        {
            return(false);
        }
        Class cls = member.getDeclaringClass();

        if (cls.isArray() || cls.isPrimitive())
        {
            return(false);  // FIXME
        }

        /*
         * if (cls.isAnonymousClass() || cls.isLocalClass())
         *  return false;  // inner class of some sort
         * if (cls.getClassLoader() != MethodHandle.class.getClassLoader())
         *  return false;  // not on BCP
         * if (ReflectUtil.isVMAnonymousClass(cls)) // FIXME: switch to supported API once it is added
         *  return false;
         * MethodType mtype = member.getMethodOrFieldType();
         * if (!isStaticallyNameable(mtype.returnType()))
         *  return false;
         * for (Class<?> ptype : mtype.parameterArray())
         *  if (!isStaticallyNameable(ptype))
         *      return false;
         * if (!member.isPrivate() && VerifyAccess.isSamePackage(MethodHandle.class, cls))
         *  return true;   // in java.lang.invoke package
         * if (member.isPublic() && isStaticallyNameable(cls))
         *  return true;
         */
        if (member.isMethod())
        {
            // [IKVM] If we can't call the method directly, invoke it via the invokeBasic infrastructure.
            return(IsMethodHandleLinkTo(member) ||
                   IsMethodHandleInvokeBasic(member) ||
                   IsStaticallyInvocable(GetMethodWrapper(member)));
        }
        if (member.isField())
        {
            // [IKVM] If we can't access the field directly, use the invokeBasic infrastructure.
            return(IsStaticallyInvocable(GetFieldWrapper(member)));
        }
        return(false);
    }
コード例 #2
0
 internal static string JavaSignature(Class clazz)
 {
     string name = clazz.FullName;
     if (clazz.isPrimitive())
     {
         switch (name)
         {
             case "boolean":
                 return "Z";
             case "int":
                 return "I";
             case "double":
                 return "D";
             case "float":
                 return "F";
             case "short":
                 return "S";
             case "long":
                 return "J";
             case "char":
                 return "C";
             case "byte":
                 return "B";
             case "void":
                 return "V";
             default:
                 throw new NotImplementedException();
         }
     }
     if (clazz.isArray())
     {
         return name.Replace('.', '/');
     }
     return "L" + name.Replace('.', '/') + ";";
 }
コード例 #3
0
ファイル: Repository.JVM.cs プロジェクト: Mazrick/jni4net
        internal static GType RegisterClass(Class clazz, TypeRegistration registration)
        {
            if (knownClasses.ContainsKey(clazz))
            {
                GType known = knownClasses[clazz];
                if (registration != null)
                {
                    known.Registration = registration;
                }
                return known;
            }
            var res = new GType();
            if (clazz.isArray())
            {
                res.ArrayElement = RegisterClass(clazz.getComponentType(), null);
                res.IsArray = true;
                string array = "[]";
                Class comp = clazz.getComponentType();
                while (comp.isArray())
                {
                    array += "[]";
                    comp = comp.getComponentType();
                }
                res.LowerName = ((string) comp.getName()).ToLowerInvariant() + array;
            }
            else
            {
                res.LowerName = ((string) clazz.getName()).ToLowerInvariant();
            }

            res.Attributes = 0;
            var classModifiers = (ModifierFlags) clazz.getModifiers();
            if ((classModifiers & ModifierFlags.Abstract) != 0)
            {
                res.IsAbstract = true;
                res.Attributes |= TypeAttributes.Abstract;
            }
            if ((classModifiers & ModifierFlags.Final) != 0)
            {
                res.IsFinal = true;
            }
            if ((classModifiers & ModifierFlags.Public) != 0)
            {
                res.Attributes |= TypeAttributes.Public;
            }
            else if ((classModifiers & ModifierFlags.Private) != 0)
            {
                res.Attributes |= TypeAttributes.NotPublic;
            }
            //TODO internal ?
            if (knownNames.ContainsKey(res.LowerName))
            {
                res = knownNames[res.LowerName];
            }
            if (res.Registration == null && registration != null)
            {
                res.Registration = registration;
            }
            res.JVMType = clazz;
            res.JVMFullName = clazz.getName();
            if (res.IsArray)
            {
                string array = "[]";
                Class comp = clazz.getComponentType();
                while (comp.isArray())
                {
                    array += "[]";
                    comp = comp.getComponentType();
                }
                res.JVMFullName = comp.getName() + array;
            }
            else
            {
                res.JVMFullName = clazz.getName();
            }
            res.IsJVMType = true;
            res.IsPrimitive = clazz.isPrimitive();
            res.IsException = Throwable._class.isAssignableFrom(clazz);
            res.IsInterface = clazz.isInterface();
            res.IsCLRProxy = clrProxyClass != null && clrProxyClass.isAssignableFrom(clazz);
            if (!res.IsCLRProxy)
            {
                res.IsJVMRealType = true;
            }
            Class superclass = clazz.getSuperclass();
            var isBaseClassPublic = superclass == null || ((ModifierFlags)superclass.getModifiers() & ModifierFlags.Public) != 0;
            if (superclass != null && res.Base == null
                && clazz != Object._class
                && clazz != Throwable._class
                && res.JVMFullName != "system.Object"
                && res.JVMFullName != "system.Exception"
                && isBaseClassPublic)
            {
                res.Base = RegisterClass(superclass);
            }
            List<Class> interfaces = new List<Class>(clazz.getInterfaces());
            if (!isBaseClassPublic)
            {
                interfaces.AddRange(superclass.getInterfaces());
                res.Base = RegisterClass(superclass.getSuperclass());
            }
            foreach (Class ifc in interfaces)
            {
                GType gifc = RegisterClass(ifc);
                if (!res.Interfaces.Contains(gifc))
                {
                    if (res.IsInterface && res.Base == null)
                    {
                        res.Base = gifc;
                    }
                    res.Interfaces.Add(gifc);
                    res.AllInterfaces.Add(gifc);
                }
            }
            Register(res);
            return res;
        }
コード例 #4
0
ファイル: Generator.cs プロジェクト: NALSS/SmartDashboard.NET
 public static string getSignature(Class type)
 {
   if (type == Byte.TYPE)
     return "B";
   if (type == Short.TYPE)
     return "S";
   if (type == Integer.TYPE)
     return "I";
   if (type == Long.TYPE)
     return "J";
   if (type == Float.TYPE)
     return "F";
   if (type == Double.TYPE)
     return "D";
   if (type == Boolean.TYPE)
     return "Z";
   if (type == Character.TYPE)
     return "C";
   if (type == Void.TYPE)
     return "V";
   if (type.isArray())
   {
     string name = type.getName();
     string str = ".";
     object obj1 = (object) "/";
     object obj2 = (object) str;
     CharSequence charSequence1;
     charSequence1.__\u003Cref\u003E = (__Null) obj2;
     CharSequence charSequence2 = charSequence1;
     object obj3 = obj1;
     charSequence1.__\u003Cref\u003E = (__Null) obj3;
     CharSequence charSequence3 = charSequence1;
     return String.instancehelper_replace(name, charSequence2, charSequence3);
   }
   else
   {
     StringBuilder stringBuilder = new StringBuilder().append("L");
     string name = type.getName();
     string str1 = ".";
     object obj1 = (object) "/";
     object obj2 = (object) str1;
     CharSequence charSequence1;
     charSequence1.__\u003Cref\u003E = (__Null) obj2;
     CharSequence charSequence2 = charSequence1;
     object obj3 = obj1;
     charSequence1.__\u003Cref\u003E = (__Null) obj3;
     CharSequence charSequence3 = charSequence1;
     string str2 = String.instancehelper_replace(name, charSequence2, charSequence3);
     return stringBuilder.append(str2).append(";").toString();
   }
 }
コード例 #5
0
 public virtual bool canAcceptArrayType(Class type)
 {
   return type.isArray() && this.canAcceptType(type.getComponentType());
 }