Exemplo n.º 1
0
        public GType Resolve()
        {
            if (IsJVMGenerate || IsCLRGenerate)
            {
                return(this);
            }
            if (IsCLRType && IsJVMType)
            {
                return(this);
            }
            if (IsCLRType && JVMSubst != null)
            {
                return(JVMSubst);
            }
            if (IsJVMType && CLRSubst != null)
            {
                return(CLRSubst);
            }
            if (IsArray)
            {
                if (ArrayElement.CLRType == typeof(string))
                {
                    JVMSubst = Repository.RegisterClass(String._class).MakeArray();
                    return(JVMSubst);
                }
                GType subst = ArrayElement.Resolve().MakeArray();
                if (IsCLRType)
                {
                    JVMSubst = subst;
                }
                else
                {
                    CLRSubst = subst;
                }
                return(subst);
            }
            if (IsRootType)
            {
                return(this);
            }
            if (Base != null)
            {
                GType subst = Base.Resolve();
                if (!subst.IsRootType)
                {
                    if (IsCLRType)
                    {
                        JVMSubst = subst;
                    }
                    else
                    {
                        CLRSubst = subst;
                    }
                    return(subst);
                }
            }

            /*
             * foreach (GType ifc in Interfaces)
             * {
             *  GType subst = ifc.Resolve();
             *  if (IsCLRType && ifc.IsJVMType)
             *  {
             *      JVMSubst = subst;
             *      return subst;
             *  }
             *  if (IsJVMType && ifc.IsCLRType)
             *  {
             *      CLRSubst = subst;
             *      return subst;
             *  }
             * }*/
            if (IsCLRType)
            {
                JVMSubst = Repository.systemObject;
                return(Repository.systemObject);
            }
            else
            {
                CLRSubst = Repository.javaLangObject;
                return(Repository.javaLangObject);
            }
        }