private static bool ValidateItem(ProjectItem item, IClassFinder classFinder, IStructFinder structFinder, IFunctionFinder functionFinder) { IList <CodeNamespace> codeNamespaces; IList <CodeClass> codeClasses; IList <CodeStruct> codeStructs; IList <CodeFunction> codeFunctions; FileCodeModel fcm = item.FileCodeModel; CodeElements elements = null; if (fcm != null) { elements = fcm.CodeElements; } codeNamespaces = fcm != null?EditorHelper.GetList <CodeNamespace>(elements, vsCMElement.vsCMElementNamespace) : null; codeClasses = classFinder != null && fcm != null ? EditorHelper.GetList <CodeClass>(elements, vsCMElement.vsCMElementClass) : null; codeStructs = structFinder != null && fcm != null ? EditorHelper.GetList <CodeStruct>(elements, vsCMElement.vsCMElementStruct) : null; codeFunctions = (classFinder != null || structFinder != null) && fcm != null ? EditorHelper.GetList <CodeFunction>(elements, vsCMElement.vsCMElementFunction) : null; return(InternalEnumeration(item, codeNamespaces, codeClasses, codeStructs, codeFunctions, classFinder, structFinder, functionFinder)); }
private static bool InternalEnumeration(ProjectItem item, IClassFinder classFinder, IStructFinder structFinder, IFunctionFinder functionFinder) { ProjectItems subItems; if (item != null) { if (ValidateItem(item, classFinder, structFinder, functionFinder)) { return(true); } subItems = item.ProjectItems; if (subItems != null && subItems.Count > 0) { foreach (ProjectItem x in subItems) { if (ValidateItem(x, classFinder, structFinder, functionFinder)) { return(true); } } } } return(false); }
public static void RegisterDependencies( this IServiceCollection collection, IClassFinder classFinder, Func <string, bool> canRegister) { var assemblyFinder = new AssemblyFinder(); var assemblies = assemblyFinder.FindAssemblies(null); Dictionary <string, bool> registeredResponses = new Dictionary <string, bool>(); var classesToRegister = classFinder.FindRegisteredClasses(assemblies); var serviceCollection = new ServiceContainer(collection); foreach (var item in classesToRegister) { if (!registeredResponses.ContainsKey(item.Environment)) { var envCanRegister = canRegister(item.Environment); registeredResponses.Add(item.Environment, envCanRegister); } if (registeredResponses[item.Environment]) { classFinder.RegisterClass(item.Type, serviceCollection, null); } } }
/// <summary> /// Open code editor window and set the cursor at the start of particular class or structure. /// Returns 'true' if editor opened, otherwise 'false'. /// </summary> public static bool Activate(IList <Project> projects, IClassFinder classFinder, IStructFinder structFinder, IFunctionFinder functionFinder) { // nothing to do: if ((classFinder == null && structFinder == null) || projects == null || projects.Count == 0) { return(false); } foreach (Project prj in projects) { ProjectItems pi = prj.ProjectItems; for (int i = 1; i < pi.Count; i++) { ProjectItem f = pi.Item(i); if (InternalEnumeration(f, classFinder, structFinder, functionFinder)) { return(true); } } } return(false); }
/// <summary> /// Registers the first discovered occurrence of /// </summary> /// <param name="collection">Service collection</param> /// <param name="classFinder">EasyIoC finder</param> /// <param name="Environment">Environment to register instances for</param> public static void RegisterDependencies( this IServiceCollection collection, IClassFinder classFinder, string Environment = null) { var assemblyFinder = new AssemblyFinder(); var assemblies = assemblyFinder.FindAssemblies(null); var classesToRegister = classFinder.FindRegisteredClasses(assemblies); var serviceCollection = new ServiceContainer(collection); List <Discoverable> environmentBasedClasses = new List <Discoverable>(); // Pushing onto this list gives us a way to use the non-environment // based classes first, if none was specified foreach (var item in classesToRegister) { if (Environment == null && item.Environment != null) { environmentBasedClasses.Add(item); } else { classFinder.RegisterClass(item.Type, serviceCollection, Environment); } } foreach (var item in classesToRegister) { classFinder.RegisterClass(item.Type, serviceCollection, Environment); } }
public ObjectMemberSlot(ASBinCode.rtData.rtObjectBase obj, RunTimeDataType FunctionClassRtType, RunTimeDataType slottype, IClassFinder classfinder) { this.obj = obj; this.isConstMember = false; this.FunctionClassRtType = FunctionClassRtType; this.slottype = slottype; this.classfinder = classfinder; }
public static bool check_isinherits(RunTimeDataType srcType, RunTimeDataType type, IClassFinder classfinder) { var srcCls = classfinder.getClassByRunTimeDataType(srcType); var cls = classfinder.getClassByRunTimeDataType(type); return(isInherits(srcCls, cls)); }
public static bool check_isImplements(RunTimeValueBase value, RunTimeDataType type, IClassFinder classfinder) { var cls = classfinder.getClassByRunTimeDataType(type); return(isImplements(((rtData.rtObjectBase)value).value._class, cls)); }
/// <summary> /// Recursive enumeration of all solution items. /// </summary> private static bool InternalEnumeration(ProjectItem item, IList <CodeNamespace> codeNamespaces, IList <CodeClass> codeClasses, IList <CodeStruct> codeStructs, IList <CodeFunction> codeFunctions, IClassFinder classFinder, IStructFinder structFinder, IFunctionFinder functionFinder) { IList <CodeNamespace> interNamespaces; IList <CodeClass> interClasses; IList <CodeStruct> interStructs; IList <CodeFunction> internalFunctions; CodeElements elements; // enumerate through all namespaces: if (codeNamespaces != null) { foreach (CodeNamespace n in codeNamespaces) { elements = n.Members; interNamespaces = EditorHelper.GetList <CodeNamespace>(elements, vsCMElement.vsCMElementNamespace); interClasses = classFinder != null?EditorHelper.GetList <CodeClass>(elements, vsCMElement.vsCMElementClass) : null; interStructs = structFinder != null?EditorHelper.GetList <CodeStruct>(elements, vsCMElement.vsCMElementStruct) : null; internalFunctions = EditorHelper.GetList <CodeFunction>(elements, vsCMElement.vsCMElementFunction); if (InternalEnumeration(item, interNamespaces, interClasses, interStructs, internalFunctions, classFinder, structFinder, functionFinder)) { return(true); } } } // enumerate classes: if (codeClasses != null && classFinder != null) { foreach (CodeClass c in codeClasses) { if (classFinder.MatchCriteria(c)) { Window w = item.Open(Constants.vsViewKindTextView); TextSelection sel = w.Selection as TextSelection; classFinder.Activate(item, c, w, sel); return(true); } interClasses = EditorHelper.GetList <CodeClass>(c.Members, vsCMElement.vsCMElementClass); if (codeStructs != null) { interStructs = EditorHelper.GetList <CodeStruct>(c.Members, vsCMElement.vsCMElementStruct); } else { interStructs = null; } if (InternalEnumeration(item, null, interClasses, interStructs, null, classFinder, structFinder, null)) { return(true); } } } // enumerate structures: if (codeStructs != null && structFinder != null) { foreach (CodeStruct s in codeStructs) { if (structFinder.MatchCriteria(s)) { Window w = item.Open(Constants.vsViewKindTextView); TextSelection sel = w.Selection as TextSelection; structFinder.Activate(item, s, w, sel); return(true); } if (classFinder != null) { interClasses = EditorHelper.GetList <CodeClass>(s.Members, vsCMElement.vsCMElementClass); } else { interClasses = null; } interStructs = EditorHelper.GetList <CodeStruct>(s.Members, vsCMElement.vsCMElementStruct); if (InternalEnumeration(item, null, interClasses, interStructs, null, classFinder, structFinder, null)) { return(true); } } } // enumerate all global functions: if (codeFunctions != null && functionFinder != null) { foreach (CodeFunction f in codeFunctions) { if (functionFinder.MatchCriteria(f)) { Window w = item.Open(Constants.vsViewKindTextView); TextSelection sel = w.Selection as TextSelection; functionFinder.Activate(item, f, w, sel); return(true); } } } return(false); }
public vectorSLot(ASBinCode.rtti.Vector_Data vector_data,int idx,IClassFinder classfinder) { this.vector_data = vector_data; this.idx = idx; this.classfinder = classfinder; }
public bool rtValueToLinkObject (RunTimeValueBase value,Type linkType,IClassFinder bin,bool needclone,out object linkobject) { RunTimeDataType vt = value.rtType; if (vt == RunTimeDataType.rt_null) { linkobject = null; return(true); } if (vt > RunTimeDataType.unknown) { var cls = bin.getClassByRunTimeDataType(vt); RunTimeDataType ot; if (TypeConverter.Object_CanImplicit_ToPrimitive( cls,out ot )) { vt = ot; value = TypeConverter.ObjectImplicit_ToPrimitive((ASBinCode.rtData.rtObjectBase)value); } else if (linkType is AS3Class_Type && cls.staticClass == null) { if (cls.getRtType() == ((AS3Class_Type)linkType).rttype) { linkobject = ((AS3Class_Type)linkType).linktype; return(true); } } } RunTimeDataType at = getRuntimeDataType( linkType); if (at == RunTimeDataType.rt_int) { linkobject = (TypeConverter.ConvertToInt(value)); } else if (at == RunTimeDataType.rt_uint) { linkobject = (TypeConverter.ConvertToUInt(value,null,null)); } else if (at == RunTimeDataType.rt_string) { linkobject = (TypeConverter.ConvertToString(value,null,null)); } else if (at == RunTimeDataType.rt_number) { linkobject = (TypeConverter.ConvertToNumber(value)); } else if (at == RunTimeDataType.rt_boolean) { var b = TypeConverter.ConvertToBoolean(value,null,null); linkobject = b.value; } else if (at == RunTimeDataType.rt_array) { linkobject = (ASBinCode.rtData.rtArray)value; } else if (at == RunTimeDataType.rt_function) { if (needclone) { linkobject = (ASBinCode.rtData.rtFunction)value; } else { linkobject = ((ASBinCode.rtData.rtFunction)value).Clone(); } } else if (at == _OBJECT_LINK) { if (vt > RunTimeDataType.unknown) { if (needclone) { linkobject = ((ASBinCode.rtData.rtObjectBase)value).Clone(); } else { linkobject = (ASBinCode.rtData.rtObjectBase)value; } } else { if (needclone) { linkobject = value.Clone(); } else { linkobject = value; } } } else if (at > RunTimeDataType.unknown) { if (vt > RunTimeDataType.unknown) { Class c = bin.getClassByRunTimeDataType(vt); if (c.isLink_System) { LinkSystemObject lo = (LinkSystemObject)((ASBinCode.rtData.rtObjectBase)value).value; linkobject = lo.GetLinkData(); } else if (c.isCrossExtend) { LinkSystemObject lo = (LinkSystemObject)((ASBinCode.rtData.rtObjectBase)value).value; linkobject = lo.GetLinkData(); } else if (c.staticClass == null) { if (c.instanceClass.isCrossExtend) { //***isCrossExtend Class转换为 基础类型的type var sc = c.instanceClass.super; while (!sc.isLink_System) { sc = sc.super; } var nf = (ICrossExtendAdapterCreator)swc.getNativeFunction(((ClassMethodGetter)sc.crossExtendAdapterCreator.bindField).functionId); linkobject = nf.GetAdapterType(); } else { linkobject = null; return(false); } } else { linkobject = null; return(false); } } else if (at == _objectType_) //托管object { if (vt == RunTimeDataType.rt_int) { linkobject = (TypeConverter.ConvertToInt(value)); } else if (vt == RunTimeDataType.rt_uint) { linkobject = (TypeConverter.ConvertToUInt(value,null,null)); } else if (vt == RunTimeDataType.rt_string) { linkobject = (TypeConverter.ConvertToString(value,null,null)); } else if (vt == RunTimeDataType.rt_number) { linkobject = (TypeConverter.ConvertToNumber(value)); } else if (vt == RunTimeDataType.rt_boolean) { var b = TypeConverter.ConvertToBoolean(value,null,null); linkobject = b.value; } else if (vt == RunTimeDataType.rt_void) { linkobject = null; } else { linkobject = null; return(false); } } else { linkobject = null; return(false); } } else { linkobject = null; return(false); } return(true); }
public void storeLinkObject_ToSlot(object obj, RunTimeDataType defineReturnType, SLOT returnSlot,IClassFinder bin,Player player) { if (obj is ICrossExtendAdapter) { obj = ((ICrossExtendAdapter)obj).AS3Object; } if (obj == null) { returnSlot.setValue(ASBinCode.rtData.rtNull.nullptr); } else { RunTimeDataType rt = defineReturnType; //getLinkType(funcDefine.signature.returnType); //RunTimeDataType rt = // getRuntimeDataType(obj.GetType()); if (rt == RunTimeDataType.rt_void) { rt = getRuntimeDataType(obj.GetType()); if (rt == _FLOAT) { rt = RunTimeDataType.rt_number; } else if (rt == _SHORT) { rt = RunTimeDataType.rt_int; } else if (rt == _USHORT) { rt = RunTimeDataType.rt_uint; } } if (rt == _DICT_KEY) { DictionaryKey key = (DictionaryKey)obj; rt = _OBJECT_LINK; obj = key.key; } if (rt == RunTimeDataType._OBJECT) { rt = _OBJECT_LINK; } if (rt == _OBJECT_LINK) { rt = ((RunTimeValueBase)obj).rtType; if (rt < RunTimeDataType.unknown) //否则走下面的Object路径 { returnSlot.directSet((RunTimeValueBase)obj); return; } } if (rt == RunTimeDataType.rt_int) { var realObjType = getRuntimeDataType(obj.GetType()); if (realObjType == RunTimeDataType.rt_uint) { returnSlot.setValue((int)(uint)obj); } else if (realObjType == RunTimeDataType.rt_number) { returnSlot.setValue((int)(double)obj); } else if (realObjType == _FLOAT) { returnSlot.setValue((int)(float)obj); } else if (realObjType == _SHORT) { returnSlot.setValue((int)(short)obj); } else if (realObjType == _USHORT) { returnSlot.setValue((int)(ushort)obj); } else { returnSlot.setValue((int)obj); } } else if (rt == RunTimeDataType.rt_uint) { var realObjType = getRuntimeDataType(obj.GetType()); if (realObjType == RunTimeDataType.rt_int) { returnSlot.setValue((uint)(int)obj); } else if (realObjType == RunTimeDataType.rt_number) { returnSlot.setValue((uint)(double)obj); } else if (realObjType == _FLOAT) { returnSlot.setValue((uint)(float)obj); } else if (realObjType == _SHORT) { returnSlot.setValue((uint)(short)obj); } else if (realObjType == _USHORT) { returnSlot.setValue((uint)(ushort)obj); } else { returnSlot.setValue((uint)obj); } } else if (rt == RunTimeDataType.rt_string) { var realObjType = getRuntimeDataType(obj.GetType()); returnSlot.setValue((string)obj); } else if (rt == RunTimeDataType.rt_number) { var realObjType = getRuntimeDataType(obj.GetType()); if (realObjType == RunTimeDataType.rt_uint) { returnSlot.setValue((double)(uint)obj); } else if (realObjType == RunTimeDataType.rt_int) { returnSlot.setValue((double)(int)obj); } else if (realObjType == _FLOAT) { returnSlot.setValue((double)(float)obj); } else if (realObjType == _SHORT) { returnSlot.setValue((double)(short)obj); } else if (realObjType == _USHORT) { returnSlot.setValue((double)(ushort)obj); } else { returnSlot.setValue((double)obj); } } else if (rt == RunTimeDataType.rt_boolean) { if ((bool)obj) { returnSlot.setValue(ASBinCode.rtData.rtBoolean.True); } else { returnSlot.setValue(ASBinCode.rtData.rtBoolean.False); } } else if (rt == RunTimeDataType.rt_array) { returnSlot.directSet((ASBinCode.rtData.rtArray)obj); } else if (rt == RunTimeDataType.rt_function) { returnSlot.directSet((ASBinCode.rtData.rtFunction)obj); } else if (rt > RunTimeDataType.unknown) { Class rtCls; // = ((ASBinCode.rtData.rtObject)obj).value._class; //bin.getClassByRunTimeDataType(rt); ASBinCode.rtData.rtObjectBase testObj = obj as ASBinCode.rtData.rtObjectBase; if (testObj != null) { rtCls = ((ASBinCode.rtData.rtObjectBase)obj).value._class; if (rtCls.isLink_System) { var f = ((CSWC)bin).class_Creator[rtCls]; f.setLinkObjectValueToSlot(returnSlot,player, ((LinkSystemObject)testObj.value).GetLinkData(),rtCls); } else { returnSlot.directSet((ASBinCode.rtData.rtObjectBase)obj); } } else { rtCls = bin.getClassByRunTimeDataType(rt); if (rtCls.classid == player.swc.TypeClass.classid) { Type type = obj as Type; if (type != null) { try { var rttype = getRuntimeDataType(type); if (rttype < RunTimeDataType.unknown && player.swc.primitive_to_class_table[rttype] != null ) { rttype = player.swc.primitive_to_class_table[rttype].getRtType(); } var rtcls = bin.getClassByRunTimeDataType(rttype); if (player.init_static_class(rtcls,SourceToken.Empty)) { returnSlot.directSet( player.static_instance[rtcls.staticClass.classid]); } else { throw new ASRunTimeException("转换Class失败",String.Empty); } } catch (KeyNotFoundException) { throw new TypeLinkClassException(type.FullName + " 没有链接到脚本"); } } else { throw new ASRunTimeException("没有将Class链接到Type",String.Empty); } } else { var f = ((CSWC)bin).class_Creator[rtCls]; f.setLinkObjectValueToSlot(returnSlot,player,obj,rtCls); } } } else { throw new ASRunTimeException("意外的链接类型",String.Empty); } } }
public InjectionRegistrar(IClassFinder classFinder) { _classFinder = classFinder; }