public CodeMemberShareKind GetTypeShareKind(string typeName) { string fullName = MockSharedCodeService.AssemblyQualifiedTypeNameToFullTypeName(typeName); if (this._unknowableTypes.Any(t => string.Equals(t.FullName, fullName))) { return(CodeMemberShareKind.Unknown); } if (this._unsharedTypes.Any(t => string.Equals(t.FullName, fullName))) { return(CodeMemberShareKind.NotShared); } if (this._sharedTypes.Any(t => string.Equals(t.FullName, fullName))) { return(CodeMemberShareKind.SharedBySource); } // Check for file sharing needs fully qualified name if (this.IsTypeSharedInFile(typeName)) { return(CodeMemberShareKind.SharedBySource); } if (IsSharedFrameworkType(typeName)) { return(CodeMemberShareKind.SharedByReference); } return(CodeMemberShareKind.NotShared); }
private static bool IsSharedFrameworkType(string typeName) { // If this isn't a system assembly, we know immediately that // it's not a shared framework type Type systemType = Type.GetType(typeName, /*throwOnError*/ false); if (systemType != null) { if (!TypeUtility.IsSystemAssembly(systemType.Assembly)) { return(false); } // Mock matches the real shared assemblies in allowing all mscorlib to match if (AssemblyUtilities.IsAssemblyMsCorlib(systemType.Assembly.GetName())) { return(true); } // The mock declares that anything in System is also shared // Anything in EntityFramework.dll is not shared. string assemblyName = systemType.Assembly.FullName; int comma = assemblyName.IndexOf(','); if (comma >= 0) { assemblyName = assemblyName.Substring(0, comma); if (string.Equals("System", assemblyName, StringComparison.OrdinalIgnoreCase)) { return(true); } if (string.Equals("EntityFramework", assemblyName, StringComparison.OrdinalIgnoreCase)) { return(false); } } } typeName = MockSharedCodeService.AssemblyQualifiedTypeNameToFullTypeName(typeName); int dot = typeName.LastIndexOf('.'); string namespaceName = dot < 0 ? string.Empty : typeName.Substring(0, dot); string shortTypeName = typeName.Substring(dot + 1); if (string.Equals("System.ComponentModel.DataAnnotations", namespaceName, StringComparison.OrdinalIgnoreCase)) { return(true); } foreach (Type t in MockSharedCodeService._knownSharedAttributeTypes) { if (string.Equals(t.FullName, typeName)) { return(true); } } return(false); }