Fixed string null constant conversion to object constant
[mono.git] / mcs / mcs / namespace.cs
index 77b261ca1479df0acd8516593199b6cf6f1e8c20..f454b93498665cd1da1c66d74f2f4d03f96d42e9 100644 (file)
@@ -252,7 +252,7 @@ namespace Mono.CSharp {
 
                        case "System.Windows.Forms":
                        case "System.Windows.Forms.Layout":
-                               assembly = "System.Windows.Name";
+                               assembly = "System.Windows.Forms";
                                break;
                        }
 
@@ -276,16 +276,7 @@ namespace Mono.CSharp {
 
                public Namespace AddNamespace (MemberName name)
                {
-                       Namespace ns_parent;
-                       if (name.Left != null) {
-                               if (parent != null)
-                                       ns_parent = parent.AddNamespace (name.Left);
-                               else
-                                       ns_parent = AddNamespace (name.Left);
-                       } else {
-                               ns_parent = this;
-                       }
-
+                       var ns_parent = name.Left == null ? this : AddNamespace (name.Left);
                        return ns_parent.TryAddNamespace (name.Basename);
                }
 
@@ -378,8 +369,10 @@ namespace Mono.CSharp {
                                        if (mode != LookupMode.Normal)
                                                continue;
 
-                                       if (ts.MemberDefinition.IsImported)
+                                       if (ts.MemberDefinition.IsImported) {
+                                               ctx.Module.Compiler.Report.SymbolRelatedToPreviousError (best);
                                                ctx.Module.Compiler.Report.SymbolRelatedToPreviousError (ts);
+                                       }
 
                                        ctx.Module.Compiler.Report.Warning (436, 2, loc,
                                                "The type `{0}' conflicts with the imported type of same name'. Ignoring the imported type definition",
@@ -498,12 +491,14 @@ namespace Mono.CSharp {
                                types = new Dictionary<string, IList<TypeSpec>> (64);
                        }
 
-                       if ((ts.IsStatic || ts.MemberDefinition.IsPartial) && ts.Arity == 0 &&
-                               (ts.MemberDefinition.DeclaringAssembly == null || ts.MemberDefinition.DeclaringAssembly.HasExtensionMethod)) {
-                               if (extension_method_types == null)
-                                       extension_method_types = new List<TypeSpec> ();
+                       if (ts.IsClass && ts.Arity == 0) {
+                               var extension_method_allowed = ts.MemberDefinition.IsImported ? (ts.Modifiers & Modifiers.METHOD_EXTENSION) != 0 : (ts.IsStatic || ts.MemberDefinition.IsPartial);
+                               if (extension_method_allowed) {
+                                       if (extension_method_types == null)
+                                               extension_method_types = new List<TypeSpec> ();
 
-                               extension_method_types.Add (ts);
+                                       extension_method_types.Add (ts);
+                               }
                        }
 
                        var name = ts.Name;
@@ -759,6 +754,11 @@ namespace Mono.CSharp {
 
                        return Compiler.Settings.IsConditionalSymbolDefined (value);
                }
+
+               public override void Accept (StructuralVisitor visitor)
+               {
+                       visitor.Visit (this);
+               }
        }
 
 
@@ -892,7 +892,7 @@ namespace Mono.CSharp {
                        MemberCore mc;
                        if (names_container.DefinedNames.TryGetValue (name, out mc)) {
                                if (tc is NamespaceContainer && mc is NamespaceContainer) {
-                                       containers.Add (tc);
+                                       AddTypeContainerMember (tc);
                                        return;
                                }
 
@@ -1062,6 +1062,9 @@ namespace Mono.CSharp {
 
                public override void GetCompletionStartingWith (string prefix, List<string> results)
                {
+                       if (Usings == null)
+                               return;
+
                        foreach (var un in Usings) {
                                if (un.Alias != null)
                                        continue;
@@ -1137,7 +1140,7 @@ namespace Mono.CSharp {
                        if (aliases != null && arity == 0) {
                                UsingAliasNamespace uan;
                                if (aliases.TryGetValue (name, out uan)) {
-                                       if (fne != null) {
+                                       if (fne != null && mode != LookupMode.Probing) {
                                                // TODO: Namespace has broken location
                                                //Report.SymbolRelatedToPreviousError (fne.Location, null);
                                                Compiler.Report.SymbolRelatedToPreviousError (uan.Location, null);
@@ -1330,6 +1333,11 @@ namespace Mono.CSharp {
 
                        return false;
                }
+
+               public override void Accept (StructuralVisitor visitor)
+               {
+                       visitor.Visit (this);
+               }
        }
 
        public class UsingNamespace