Ejemplo n.º 1
0
 void UpdateClass(string[] classes)
 {
     for(int i = 0; i < classes.Length; i++) {
         Type type = WrapReflectionTools.GetType(classes[i]);
         OnlyRemoveClass(WrapReflectionTools.GetWrapFolderName(type), WrapReflectionTools.GetWrapFileName(type));
         OnlyAddClass(type);
     }
     UpdateWrapCore();// 有可能WrapCore被改坏了,还是更新一下
     AssetDatabase.Refresh();
 }
Ejemplo n.º 2
0
 void RemoveClass(string[] classes)
 {
     for(int i = 0; i < classes.Length; i++) {
         Type type = WrapReflectionTools.GetType(classes[i]);
         OnlyRemoveClass(WrapReflectionTools.GetWrapFolderName(type), WrapReflectionTools.GetWrapFileName(type));
     }
     ReloadWrap();
     UpdateWrapCore();
     //Remove完毕ReloadDataBase,会编译代码
     AssetDatabase.Refresh();
 }
Ejemplo n.º 3
0
    void OnlyAddClass(Type type)
    {
        List<string> _typeDic = new List<string>();
        string classFullName = WrapReflectionTools.GetTrueName(type);
        if(!WrapTextTools.IsSupported(classFullName))
            return;
        if(_classBlackList.Contains(classFullName))
            return;

        string assemblyName = WrapReflectionTools.GetWrapFolderName(type);
        string classname = WrapReflectionTools.GetWrapFileName(type);

        string manifest = "";//一个记事本,用来保存哪些内容做了Wrap

        //变量或属性
        List<Property> savePropertys = WrapReflectionTools.GetPropertys(type, ref manifest, _memberBlackList);
        string[] propertyPartStr = WrapTextTools.Propertys2PartStr(classFullName, savePropertys);

        //构造函数
        List<Method> constructMethods = WrapReflectionTools.GetConstructor(type, ref manifest);
        string wrapNew = WrapTextTools.Constructor2PartStr(classFullName, constructMethods);
        WrapTextTools.CallTypes2TypeStr(classFullName, constructMethods, _typeDic);

        //静态方法(最后的参数是忽略属性,因为属性也是一种方法)
        List<Method> staticMethods = WrapReflectionTools.GetStaticMethods(type, ref manifest, savePropertys, _memberBlackList);
        string wrapSCall = WrapTextTools.SCall2PartStr(classFullName, staticMethods);
        WrapTextTools.CallTypes2TypeStr(classFullName, staticMethods, _typeDic);

        //成员方法
        List<Method> memberMethods = WrapReflectionTools.GetInstanceMethods(type, ref manifest, savePropertys, _memberBlackList);
        string wrapMCall = WrapTextTools.MCall2PartStr(classFullName, memberMethods);
        WrapTextTools.CallTypes2TypeStr(classFullName, memberMethods, _typeDic);

        //索引
        List<Method> indexMethods = WrapReflectionTools.GetIndex(type, ref manifest);
        string[] wrapIndex = WrapTextTools.Index2PartStr(classFullName, indexMethods);

        //运算符(数学运算和逻辑运算)
        List<Method> opMethods = WrapReflectionTools.GetOp(type, ref manifest);
        string[] wrapOp = WrapTextTools.Op2PartStr(opMethods);

        UpdateWrapPart(assemblyName, classname, manifest, _typeDic, propertyPartStr,
            wrapNew, wrapSCall, wrapMCall, wrapIndex, wrapOp);
    }
Ejemplo n.º 4
0
    //Wrap一个自己输入的内容,需要判断是一个类还是一个命名空间
    public void WrapCustom(string text)
    {
        Type type = WrapReflectionTools.GetType(text);

        //输入的是一个类
        if(type != null) {
            string assemblyName = WrapReflectionTools.GetWrapFolderName(type);
            string className = WrapReflectionTools.GetWrapFileName(type);
            WrapClass wc = GetWrapClass(assemblyName);
            if(wc == null) {
                wc = new WrapClass(assemblyName);
                AddClass(type);
            }
            else {
                if(!wc.m_classes.Contains(className))
                    AddClass(type);
                else
                    UpdateClass(new string[]{text});
            }
        }
        //输入的是一个命名空间
        else{
            Type[] types = WrapReflectionTools.GetTypesByNamespace(text);
            if(types != null) {
                for(int i = 0; i < types.Length; i++) {
        //					Debug.Log(types[i].ToString());
                    AddClass(types[i]);
                }
            }
        }

        ReloadWrap();
        UpdateWrapCore();
        //Add完毕ReloadDataBase,会编译代码
        AssetDatabase.Refresh();
    }