void CheckNamespace(INamespace oNs, INamespace nNs, ref AbiCompatibility compatibility) { foreach (var type in oNs.Types) { if (!type.IsPublic && !type.IsProtected) { continue; } var newType = nNs.GetTypeDefinition(type.Name, type.TypeParameterCount); if (newType == null) { OnIncompatibilityFound(new AbiEventArgs(string.Format(TranslateString("Type definition {0} is missing."), type.FullName))); compatibility = AbiCompatibility.Incompatible; if (StopOnIncompatibility) { return; } continue; } CheckTypes(type, newType, ref compatibility); if (compatibility == AbiCompatibility.Incompatible && StopOnIncompatibility) { return; } } if (compatibility == AbiCompatibility.Bigger) { return; } foreach (var type in nNs.Types) { if (!type.IsPublic && !type.IsProtected) { continue; } if (oNs.GetTypeDefinition(type.Name, type.TypeParameterCount) == null) { if (compatibility == AbiCompatibility.Equal) { compatibility = AbiCompatibility.Bigger; } return; } } }
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; }
void CheckNamespace(INamespace oNs, INamespace nNs, ref AbiCompatibility compatibility) { foreach (var type in oNs.Types) { if (!type.IsPublic && !type.IsProtected) continue; var newType = nNs.GetTypeDefinition (type.Name, type.TypeParameterCount); if (newType == null) { OnIncompatibilityFound (new AbiEventArgs (string.Format (TranslateString ("Type definition {0} is missing."), type.FullName))); compatibility = AbiCompatibility.Incompatible; if (StopOnIncompatibility) return; continue; } CheckTypes (type, newType, ref compatibility); if (compatibility == AbiCompatibility.Incompatible && StopOnIncompatibility) return; } if (compatibility == AbiCompatibility.Bigger) return; foreach (var type in nNs.Types) { if (!type.IsPublic && !type.IsProtected) continue; if (oNs.GetTypeDefinition (type.Name, type.TypeParameterCount) == null) { if (compatibility == AbiCompatibility.Equal) compatibility = AbiCompatibility.Bigger; return; } } }