Esempio n. 1
0
        Expression LookInUsingScopeNamespace(ResolveContext rc, ResolvedUsingScope usingScope, INamespace n, string identifier, IList <IType> typeArguments, bool parameterizeResultType)
        {
            if (n == null)
            {
                return(null);
            }
            // first look for a namespace
            int k = typeArguments.Count;

            if (k == 0)
            {
                INamespace childNamespace = n.GetChildNamespace(identifier);
                if (childNamespace != null)
                {
                    if (usingScope != null && usingScope.HasAlias(identifier))
                    {
                        rc.Report.Error(7, loc, "The name `{0}' is ambigious", name);
                        return(new TypeExpression((IType) new UnknownTypeSpec(null, identifier), Location)); // ambigious
                    }

                    return(new AliasNamespace(childNamespace, Location));
                }
            }
            // then look for a type
            ITypeDefinition def = n.GetTypeDefinition(identifier, k);

            if (def != null)
            {
                IType result = def;
                if (parameterizeResultType && k > 0)
                {
                    result = new ParameterizedTypeSpec(def, typeArguments);
                }

                if (usingScope != null && usingScope.HasAlias(identifier))
                {
                    rc.Report.Error(7, loc, "The name `{0}' is ambigious", name);
                    return(new TypeExpression((IType) new UnknownTypeSpec(null, identifier), Location)); // ambigious
                }
                else
                {
                    return(new TypeExpression(result, Location));
                }
            }
            return(null);
        }
 ResolveResult LookInUsingScopeNamespace(ResolvedUsingScope usingScope, INamespace n, string identifier, IList<IType> typeArguments, bool parameterizeResultType)
 {
     if (n == null)
         return null;
     // first look for a namespace
     int k = typeArguments.Count;
     if (k == 0) {
         INamespace childNamespace = n.GetChildNamespace(identifier);
         if (childNamespace != null) {
             if (usingScope != null && usingScope.HasAlias(identifier))
                 return new AmbiguousTypeResolveResult(new UnknownType(null, identifier));
             return new NamespaceResolveResult(childNamespace);
         }
     }
     // then look for a type
     ITypeDefinition def = n.GetTypeDefinition(identifier, k);
     if (def != null) {
         IType result = def;
         if (parameterizeResultType && k > 0) {
             result = new ParameterizedType(def, typeArguments);
         }
         if (usingScope != null && usingScope.HasAlias(identifier))
             return new AmbiguousTypeResolveResult(result);
         else
             return new TypeResolveResult(result);
     }
     return null;
 }