public override bool IsAccessible(AccessLevelMask accessLevelMask)
 {
     foreach (var method in methods)
     {
         if (method.IsAccessible(accessLevelMask))
         {
             return(true);
         }
     }
     return(false);
 }
Exemple #2
0
    public override void GetMembersCompletionData(Dictionary <string, SymbolDefinition> data, BindingFlags flags, AccessLevelMask mask, SD_Assembly assembly)
    {
        base.GetMembersCompletionData(data, flags, mask, assembly);

        if (completionsFromBase)
        {
            return;
        }
        completionsFromBase = true;

        var baseType   = BaseType();
        var interfaces = Interfaces();

        if (flags != BindingFlags.Static && (kind == SymbolKind.Interface || kind == SymbolKind.TypeParameter))
        {
            foreach (var i in interfaces)
            {
                i.Definition.GetMembersCompletionData(data, flags, mask & ~AccessLevelMask.Private, assembly);
            }
        }
        if (baseType != null && (kind != SymbolKind.Enum || flags != BindingFlags.Static) &&
            (baseType.kind != SymbolKind.Interface || kind == SymbolKind.Interface || kind == SymbolKind.TypeParameter))
        {
            baseType.GetMembersCompletionData(data, flags, mask & ~AccessLevelMask.Private, assembly);
        }

        completionsFromBase = false;
    }
Exemple #3
0
    public void GetExtensionMethodsCompletionData(TypeDefinitionBase targetType, Dictionary <string, SymbolDefinition> data, AccessLevelMask accessLevelMask)
    {
        //	Debug.Log("Extensions for " + targetType.GetTooltipText());
        foreach (var t in members)
        {
            if (t.kind == SymbolKind.Class && t.IsStatic && t.NumTypeParameters == 0 &&
                (t as TypeDefinitionBase).numExtensionMethods > 0 && t.IsAccessible(accessLevelMask))
            {
                var classMembers = t.members;
                foreach (var cm in classMembers)
                {
                    if (cm.kind == SymbolKind.MethodGroup)
                    {
                        var mg = cm as SD_MethodGroup;
                        if (mg == null)
                        {
                            continue;
                        }
                        if (data.ContainsKey(mg.name))
                        {
                            continue;
                        }
                        foreach (var m in mg.methods)
                        {
                            if (m.kind != SymbolKind.Method)
                            {
                                continue;
                            }
                            if (!m.IsExtensionMethod)
                            {
                                continue;
                            }
                            if (!m.IsAccessible(accessLevelMask))
                            {
                                continue;
                            }

                            var parameters = m.GetParameters();
                            if (parameters == null || parameters.Count == 0)
                            {
                                continue;
                            }
                            if (!targetType.CanConvertTo(parameters[0].TypeOf() as TypeDefinitionBase))
                            {
                                continue;
                            }

                            data.Add(m.name, m);
                            break;
                        }
                    }
                }
            }
        }
    }
Exemple #4
0
    public void GetTypesOnlyCompletionData(Dictionary <string, SymbolDefinition> data, AccessLevelMask mask, SD_Assembly assembly)
    {
        if ((mask & AccessLevelMask.Public) != 0)
        {
            if (assembly.InternalsVisibleIn(this.Assembly))
            {
                mask |= AccessLevelMask.Internal;
            }
            else
            {
                mask &= ~AccessLevelMask.Internal;
            }
        }

        foreach (var m in members)
        {
            if (m.kind == SymbolKind.Namespace)
            {
                continue;
            }

            if (m.kind != SymbolKind.MethodGroup)
            {
                if (m.IsAccessible(mask) && !data.ContainsKey(m.ReflectionName))
                {
                    data.Add(m.ReflectionName, m);
                }
            }
        }

        var assemblyDefinition = Assembly;

        if (assemblyDefinition != null)
        {
            assemblyDefinition.GetTypesOnlyCompletionDataFromReferencedAssemblies(data, this);
        }
    }
Exemple #5
0
    public override void GetMembersCompletionData(Dictionary <string, SymbolDefinition> data, BindingFlags flags, AccessLevelMask mask, SD_Assembly assembly)
    {
        base.GetMembersCompletionData(data, flags, mask, assembly);

        var assemblyDefinition = assembly ?? parentSymbol;

        while (assemblyDefinition != null && !(assemblyDefinition is SD_Assembly))
        {
            assemblyDefinition = assemblyDefinition.parentSymbol;
        }
        ((SD_Assembly)assemblyDefinition).GetMembersCompletionDataFromReferencedAssemblies(data, this);
    }
Exemple #6
0
    public override void GetMembersCompletionData(Dictionary <string, SymbolDefinition> data, BindingFlags flags, AccessLevelMask mask, SD_Assembly assembly)
    {
        var symbolType = TypeOf();

        if (symbolType != null)
        {
            symbolType.GetMembersCompletionData(data, BindingFlags.Instance, mask, assembly);
        }
    }
    //private Dictionary<BindingFlags, Dictionary<string, SymbolDefinition>> cachedMemberCompletions;
    public override void GetMembersCompletionData(Dictionary <string, SymbolDefinition> data, BindingFlags flags, AccessLevelMask mask, SD_Assembly assembly)
    {
        if (!allPublicMembersReflected)
        {
            if (!allNonPublicMembersReflected && ((mask & AccessLevelMask.NonPublic) != 0 || (flags & BindingFlags.NonPublic) != 0))
            {
                ReflectAllMembers(BindingFlags.Public | BindingFlags.NonPublic);
            }
            else
            {
                ReflectAllMembers(BindingFlags.Public);
            }
        }
        else if (!allNonPublicMembersReflected && ((mask & AccessLevelMask.NonPublic) != 0 || (flags & BindingFlags.NonPublic) != 0))
        {
            ReflectAllMembers(BindingFlags.NonPublic);
        }

        base.GetMembersCompletionData(data, flags, mask, assembly);
    }
Exemple #8
0
    private static void GetMemberCompletions(SymbolDefinition targetDef, SyntaxTreeNode_Base parseTreeNode,
                                             SD_Assembly assemblyDefinition, Dictionary <string, SymbolDefinition> d, bool includeExtensionMethods)
    {
        if (targetDef != null)
        {
            var typeOf = targetDef.TypeOf();
            var flags  = BindingFlags.Instance | BindingFlags.Static;
            switch (targetDef.kind)
            {
            case SymbolKind.None:
            case SymbolKind.Error:
                break;

            case SymbolKind.Namespace:
            case SymbolKind.Interface:
            case SymbolKind.Struct:
            case SymbolKind.Class:
            case SymbolKind.TypeParameter:
            case SymbolKind.Delegate:
                flags = BindingFlags.Static;
                break;

            case SymbolKind.Enum:
                flags = BindingFlags.Static;
                break;

            case SymbolKind.Field:
            case SymbolKind.ConstantField:
            case SymbolKind.LocalConstant:
            case SymbolKind.Property:
            case SymbolKind.Event:
            case SymbolKind.Indexer:
            case SymbolKind.Method:
            case SymbolKind.MethodGroup:
            case SymbolKind.Constructor:
            case SymbolKind.Destructor:
            case SymbolKind.Operator:
            case SymbolKind.Accessor:
            case SymbolKind.Parameter:
            case SymbolKind.CatchParameter:
            case SymbolKind.Variable:
            case SymbolKind.ForEachVariable:
            case SymbolKind.FromClauseVariable:
            case SymbolKind.EnumMember:
                flags = BindingFlags.Instance;
                break;

            case SymbolKind.BaseTypesList:
            case SymbolKind.TypeParameterConstraintList:
                flags = BindingFlags.Static;
                break;

            case SymbolKind.Instance:
                flags = BindingFlags.Instance;
                break;

            case SymbolKind.Null:
                return;

            default:
                throw new ArgumentOutOfRangeException();
            }
            //targetDef.kind = targetDef is TypeDefinitionBase && targetDef.kind != SymbolKind.Enum ? BindingFlags.Static : targetDef is InstanceDefinition ? BindingFlags.Instance : 0;

            TypeDefinitionBase contextType = null;
            for (var n = parseTreeNode as SyntaxTreeNode_Rule ?? parseTreeNode.Parent; n != null; n = n.Parent)
            {
                var s = n.scope as Scope_SymbolDeclaration;
                if (s != null)
                {
                    contextType = s.declaration.definition as TypeDefinitionBase;
                    if (contextType != null)
                    {
                        break;
                    }
                }
            }

            AccessLevelMask mask =
                typeOf == contextType || typeOf.IsSameOrParentOf(contextType) ? AccessLevelMask.Private | AccessLevelMask.Protected | AccessLevelMask.Internal | AccessLevelMask.Public :
                contextType != null && contextType.DerivesFrom(typeOf as TypeDefinitionBase) ? AccessLevelMask.Protected | AccessLevelMask.Internal | AccessLevelMask.Public :
                AccessLevelMask.Internal | AccessLevelMask.Public;

            if (typeOf.Assembly == null || !typeOf.Assembly.InternalsVisibleIn(assemblyDefinition))
            {
                mask &= ~AccessLevelMask.Internal;
            }

            typeOf.GetMembersCompletionData(d, flags, mask, assemblyDefinition);

            if (includeExtensionMethods && flags == BindingFlags.Instance &&
                (typeOf.kind == SymbolKind.Class || typeOf.kind == SymbolKind.Struct || typeOf.kind == SymbolKind.Interface || typeOf.kind == SymbolKind.Enum))
            {
                var enclosingScopeNode = parseTreeNode as SyntaxTreeNode_Rule ?? parseTreeNode.Parent;
                while (enclosingScopeNode != null && enclosingScopeNode.scope == null)
                {
                    enclosingScopeNode = enclosingScopeNode.Parent;
                }
                var enclosingScope = enclosingScopeNode != null ? enclosingScopeNode.scope : null;

                if (enclosingScope != null)
                {
                    enclosingScope.GetExtensionMethodsCompletionData(typeOf as TypeDefinitionBase, d);
                }
            }
        }
    }
Exemple #9
0
    //public override TypeDefinitionBase SubstituteTypeParameters(SymbolDefinition context)
    //{
    //	if (typeParameters == null)
    //		return base.SubstituteTypeParameters(context);

    //	var constructType = false;
    //	var typeArguments = new SymbolReference[typeParameters.Count];
    //	for (var i = 0; i < typeArguments.Length; ++i)
    //	{
    //		typeArguments[i] = new SymbolReference(typeParameters[i]);
    //		var original = typeParameters[i];
    //		if (original == null)
    //			continue;
    //		var substitute = original.SubstituteTypeParameters(context);
    //		if (substitute != original)
    //		{
    //			typeArguments[i] = new SymbolReference(substitute);
    //			constructType = true;
    //		}
    //	}
    //	if (!constructType)
    //		return this;
    //	return ConstructType(typeArguments);
    //}


    public override void GetMembersCompletionData(Dictionary <string, SymbolDefinition> data, BindingFlags flags, AccessLevelMask mask, SD_Assembly assembly)
    {
        foreach (var parameter in GetParameters())
        {
            var parameterName = parameter.GetName();
            if (!data.ContainsKey(parameterName))
            {
                data.Add(parameterName, parameter);
            }
        }
        if ((flags & (BindingFlags.Instance | BindingFlags.Static)) != BindingFlags.Instance)
        {
            if (typeParameters != null)
            {
                foreach (var parameter in typeParameters)
                {
                    var parameterName = parameter.name;
                    if (!data.ContainsKey(parameterName))
                    {
                        data.Add(parameterName, parameter);
                    }
                }
            }
        }
        //	ReturnType().GetMembersCompletionData(data, flags, mask, assembly);
    }
Exemple #10
0
 public override void GetMembersCompletionData(Dictionary <string, SymbolDefinition> data, BindingFlags flags, AccessLevelMask mask, SD_Assembly assembly)
 {
 }
    public override void GetMembersCompletionData(Dictionary <string, SymbolDefinition> data, BindingFlags flags, AccessLevelMask mask, SD_Assembly assembly)
    {
        var dataFromDefinition = new Dictionary <string, SymbolDefinition>();

        genericTypeDefinition.GetMembersCompletionData(dataFromDefinition, flags, mask, assembly);
        foreach (var entry in dataFromDefinition)
        {
            if (!data.ContainsKey(entry.Key))
            {
                var member = GetConstructedMember(entry.Value);
                data.Add(entry.Key, member);
            }
        }
    }