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 (!SystemWebDomainServices::OpenRiaServices.DomainServices.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);
        }