public static void AddNamespace(INamespace ns)
        {
            if (ns == null)
                throw new ArgumentNullException("ns");

            namespaces[ns.Identifier] = ns;
        }
Ejemplo n.º 2
0
		public static IEntity ResolveSingle(INamespace root, string name)
		{
			var resolved = new List<IEntity>();
			Assert.IsTrue(root.Resolve(resolved, name, EntityType.Any), "Failed to resolve '{0}' against '{1}'", name, root);
			Assert.AreEqual(1, resolved.Count);
			return resolved[0];
		}
Ejemplo n.º 3
0
		public static bool ResolveCoalescingNamespaces(INamespace parent, INamespace namespaceToResolveAgainst, string name, EntityType typesToConsider, ICollection<IEntity> resultingSet)
		{
			var resolved = new Set<IEntity>();
			if (!namespaceToResolveAgainst.Resolve(resolved, name, typesToConsider))
				return false;
			return CoalesceResolved(resolved, parent, name, resultingSet);
		}
Ejemplo n.º 4
0
		public void AddNamespace (INamespace ns)
		{
			if (usedNamespaces.Contains (ns.Name))
				return;
			usedNamespaces.Add (ns.Name);
			result.Add (Factory.CreateNamespaceCompletionData (ns));
		}
Ejemplo n.º 5
0
 public CodeNamespace(CodeModelContext context, INamespace ns)
     : base(context)
 {
     this.ns = ns;
     this.InfoLocation = global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal;
     this.Language = context.CurrentProject.GetCodeModelLanguage();
 }
Ejemplo n.º 6
0
		public static IEntity ResolveQualifiedNameToSingle(INamespace root, string qualifiedName)
		{
			IEntity current = root;
			foreach (string part in qualifiedName.Split('.'))
				current = ResolveSingle((INamespace) current, part);
			return current;
		}
Ejemplo n.º 7
0
 public void SetChild(string name, INamespace entity)
 {
     _children[name] = entity;
     if (name == "")
     {
         _empty = entity;
     }
 }
Ejemplo n.º 8
0
		AstNode[] FindReferences(INamespace ns)
		{
			var result = new List<AstNode>();
			var searchScopes = findReferences.GetSearchScopes(ns);
			findReferences.FindReferencesInFile(searchScopes, unresolvedFile, syntaxTree, compilation,
			                                    (node, rr) => result.Add(node), CancellationToken.None);
			return result.OrderBy(n => n.StartLocation).ToArray();
		}
Ejemplo n.º 9
0
        public NamespaceEntity(INamespace parent, TypeSystemServices tagManager, string name)
        {
            _parent = parent;
            _typeSystemServices = tagManager;
            _name = name;
			_assemblies = new Dictionary<Assembly, Dictionary<string, List<Type>>>(AssemblyEqualityComparer.Default);
            _childrenNamespaces = new Dictionary<string, NamespaceEntity>();
            _internalModules = new List<ModuleEntity>();
            _externalModules = new List<ExternalType>();
Ejemplo n.º 10
0
 public GlobalNamespace(IDictionary children)
     : base(null, children)
 {
     _empty = (INamespace)children[""];
     if (null == _empty)
     {
         _empty = NullNamespace.Default;
     }
 }
Ejemplo n.º 11
0
 public Hypertable(String host, String ns)
 {
     this.host = host;
     this.ns = ns;
     String conn = "Provider=Hyper;Uri=net.tcp://" + host;
     htContext = Context.Create(conn);
     htClient = htContext.CreateClient();
     htNs = htClient.OpenNamespace(ns, OpenDispositions.OpenAlways | OpenDispositions.CreateIntermediate);
 }
Ejemplo n.º 12
0
 public SimpleNamespace(INamespace parent, IDictionary children)
 {
     if (null == children)
     {
         throw new ArgumentNullException("children");
     }
     _parent = parent;
     _children = children;
 }
Ejemplo n.º 13
0
 public NamespaceDelegator(INamespace parent, params INamespace[] namespaces)
 {
     if (null == namespaces)
     {
         throw new ArgumentNullException("namespaces");
     }
     _parent = parent;
     _namespaces = namespaces;
 }
		bool IsAccessible(MemberLookup lookup, INamespace ns)
		{
			if (ns.Types.Any (t => lookup.IsAccessible (t, false)))
				return true;
			foreach (var child in ns.ChildNamespaces)
				if (IsAccessible (lookup, child))
					return true;
			return false;
		}
Ejemplo n.º 15
0
        public void LoadNMeta()
        {
            EPackage package;

            package = EcoreInterop.LoadPackageFromFile("NMeta.ecore");

            Assert.IsNotNull(package);

            metaNamespace = EcoreInterop.Transform2Meta(package);

            var boolean = metaNamespace.Resolve(new Uri("Boolean", UriKind.Relative));
            var isInterface = metaNamespace.Resolve(new Uri("Class/IsInterface", UriKind.Relative)) as IAttribute;

            //var serializer = new ModelSerializer();
            //serializer.RootPrefix = "nmeta";
            //using (var sw = new FileStream(@"C:\Projekte\NMF\NMeta.nmf", FileMode.OpenOrCreate))
            //{
            //    serializer.Serialize(metaNamespace.Model, sw);
            //}

            Assert.IsNotNull(metaNamespace);

            Assert.AreEqual(20, metaNamespace.Types.OfType<IClass>().Count());

            type = GetClass("Type");
            @class = GetClass("Class");
            structuredType = GetClass("StructuredType");
            typedElement = GetClass("ITypedElement");
            metaElement = GetClass("MetaElement");
            attribute = GetClass("Attribute");
            reference = GetClass("Reference");
            referenceType = GetClass("ReferenceType");
            dataType = GetClass("DataType");
            primitiveType = GetClass("PrimitiveType");
            @namespace = GetClass("Namespace");
            extension = GetClass("Extension");
            @event = GetClass("Event");
            operation = GetClass("Operation");
            parameter = GetClass("Parameter");
            enumeration = GetClass("Enumeration");
            literal = GetClass("Literal");
            modelElement = GetClass("ModelElement");

            direction = metaNamespace.Types.OfType<IEnumeration>().FirstOrDefault(en => en.Name == "Direction");
            Assert.IsNotNull(direction);
            direction.Literals.Select(l => l.Name).AssertSequence("In", "Out", "InOut");

            AssertBaseTypes();
            AssertProperties();

            var model = metaNamespace.Model;
            Assert.IsNotNull(model);

            Assert.AreSame(type, model.Resolve("#//Type"));
            Assert.AreSame(@class, model.Resolve("#//Class"));
            Assert.AreSame(structuredType, model.Resolve("#//StructuredType"));
        }
Ejemplo n.º 16
0
		public static Set<IEntity> ResolveQualifiedName(INamespace root, string qualifiedName)
		{
			INamespace current = root;
			string[] parts = qualifiedName.Split('.');
			for (int i=0; i < parts.Length - 1; ++i)
				current = (INamespace) ResolveSingle(current, parts[i]);
			var result = new Set<IEntity>();
			current.Resolve(result, parts[parts.Length - 1], EntityType.Any);
			return result;
		}
Ejemplo n.º 17
0
		/// <summary>
		/// Creates a new merged root namespace.
		/// </summary>
		/// <param name="compilation">The main compilation.</param>
		/// <param name="namespaces">The individual namespaces being merged.</param>
		/// <param name="externAlias">The extern alias for this namespace.</param>
		public MergedNamespace(ICompilation compilation, INamespace[] namespaces, string externAlias = null)
		{
			if (compilation == null)
				throw new ArgumentNullException("compilation");
			if (namespaces == null)
				throw new ArgumentNullException("namespaces");
			this.compilation = compilation;
			this.namespaces = namespaces;
			this.externAlias = externAlias;
		}
		public void AddNamespace (MemberLookup lookup, INamespace ns)
		{
			if (usedNamespaces.Contains (ns.Name))
				return;
			if (!IsAccessible (lookup, ns)) {
				usedNamespaces.Add (ns.Name);
				return;
			}
			usedNamespaces.Add (ns.Name);
			result.Add (Factory.CreateNamespaceCompletionData (ns));
		}
Ejemplo n.º 19
0
		/// <summary>
		/// Creates a new merged child namespace.
		/// </summary>
		/// <param name="parentNamespace">The parent merged namespace.</param>
		/// <param name="namespaces">The individual namespaces being merged.</param>
		public MergedNamespace(INamespace parentNamespace, INamespace[] namespaces)
		{
			if (parentNamespace == null)
				throw new ArgumentNullException("parentNamespace");
			if (namespaces == null)
				throw new ArgumentNullException("namespaces");
			this.parentNamespace = parentNamespace;
			this.namespaces = namespaces;
			this.compilation = parentNamespace.Compilation;
			this.externAlias = parentNamespace.ExternAlias;
		}
Ejemplo n.º 20
0
 public static bool ResolveCoalescingNamespaces(INamespace parent, INamespace namespaceToResolveAgainst, string name, EntityType typesToConsider, ICollection<IEntity> resultingSet)
 {
     var resolved = AcquireSet();
     try {
         if (!namespaceToResolveAgainst.Resolve(resolved, name, typesToConsider))
             return false;
         return CoalesceResolved(resolved, parent, name, resultingSet);
     }
     finally {
         ReleaseSet(resolved);
     }
 }
Ejemplo n.º 21
0
 public static INamespace CoalescedNamespaceFor(INamespace parent, string name, List<INamespace> namespaces)
 {
     switch (namespaces.Count)
     {
         case 0:
             return null;
         case 1:
             return namespaces.First();
         default:
             return new ResolvedNamespaces(name, parent, namespaces.ToArray());
     }
 }
Ejemplo n.º 22
0
 private static void CollectAllMembers(List<IEntity> members, INamespace entity)
 {
     var type = entity as IType;
     if (null != type)
     {
         members.ExtendUnique(type.GetMembers());
         CollectBaseTypeMembers(members, type.BaseType);
     }
     else
     {
         members.Extend(entity.GetMembers());
     }
 }
Ejemplo n.º 23
0
		public static bool ResolveCoalescingNamespaces(INamespace parent, IEnumerable<INamespace> namespacesToResolveAgainst, string name, EntityType typesToConsider, ICollection<IEntity> resultingSet)
		{
			bool success = false;

			var resolved = new Set<IEntity>();
			foreach (var root in namespacesToResolveAgainst)
				if (root.Resolve(resolved, name, typesToConsider))
					success = true;

			if (!success)
				return false;

			return CoalesceResolved(resolved, parent, name, resultingSet);
		}
Ejemplo n.º 24
0
 public void WriteNamespace(INamespace namespaceDeclaration)
 {
     if (_injectXmlDoc)
     {
         // inject XML documentation into generated namespace
         string nsStr = GetNamespaceAsString(namespaceDeclaration);
         _formatter.Write(nsStr);
     }
     else
     {
         // write it as the original implementor does it
         _writer.WriteNamespace(namespaceDeclaration);
     }
 }
Ejemplo n.º 25
0
		private static bool CoalesceResolved(IEnumerable<IEntity> resolved, INamespace parent, string name, ICollection<IEntity> resultingSet)
		{
			var namespaces = new List<INamespace>();
			foreach (IEntity entity in resolved)
			{
				if (entity.EntityType == EntityType.Namespace)
					namespaces.Add((INamespace) entity);
				else
					resultingSet.Add(entity);
			}

			INamespace resolvedNamespace = CoalescedNamespaceFor(parent, name, namespaces);
			if (resolvedNamespace != null)
				resultingSet.Add(resolvedNamespace);

			return true;
		}
Ejemplo n.º 26
0
		public bool Compile(List<Input> inputs)
		{
			this.inputs = inputs;
			var parser = new CSharpParser();
			var project = (IProjectContent)new CSharpProjectContent();

			// Parse each input
			var parsing = Stopwatch.StartNew();
			foreach (var input in inputs) {
				input.tree = parser.Parse(input.contents, input.name);
				input.file = input.tree.ToTypeSystem();
				project = project.AddOrUpdateFiles(input.file);
			}
			timingInMilliseconds["Parsing"] = parsing.ElapsedMilliseconds;

			// Add errors and warnings
			foreach (var diagnostic in parser.ErrorsAndWarnings) {
				diagnostics.Add(diagnostic);
			}

			// Compilation fails for parse errors
			if (parser.HasErrors) {
				return false;
			}

			// Scan the type system
			var compiling = Stopwatch.StartNew();
			compilation = project.CreateCompilation();
			root = compilation.RootNamespace;
			ScanTypes(root);
			timingInMilliseconds["Compiling"] = compiling.ElapsedMilliseconds;

			// Scan the syntax tree, linking it to the type system
			var visitor = new Visitor(this);
			foreach (var input in inputs) {
				visitor.resolver = input.resolver = new CSharpAstResolver(compilation, input.tree, input.file);
				input.tree.AcceptVisitor(visitor);
			}

			// Transform the syntax tree into valid JavaScript
			var lowering = Stopwatch.StartNew();
			var success = LoweringContext.Lower(this);
			timingInMilliseconds["Lowering"] = lowering.ElapsedMilliseconds;
			return success;
		}
Ejemplo n.º 27
0
        public static bool ResolveCoalescingNamespaces(INamespace parent, IList<INamespace> namespacesToResolveAgainst, string name, EntityType typesToConsider, ICollection<IEntity> resultingSet)
        {
            bool success = false;

            var resolved = AcquireSet();
            try {
                //foreach (var root in namespacesToResolveAgainst)
                for (int i = 0; i < namespacesToResolveAgainst.Count; ++i)
                    if (namespacesToResolveAgainst[i].Resolve(resolved, name, typesToConsider))
                        success = true;

                if (!success)
                    return false;

                return CoalesceResolved(resolved, parent, name, resultingSet);
            }
            finally {
                ReleaseSet(resolved);
            }
        }
Ejemplo n.º 28
0
        protected INamespace SafeGetNamespace(string qname)
        {
            INamespace ns = (INamespace)NameResolutionService.ResolveQualifiedName(qname);

            return(null == ns ? NullNamespace.Default : ns);
        }
Ejemplo n.º 29
0
 public ClassOutputModel(string type, INamespace ns, IDesignModel designModel, IProjectFile file = null) : base(type, ns, designModel, file)
 {
 }
Ejemplo n.º 30
0
 public void LeaveNamespace()
 {
     CurrentNamespace = CurrentNamespace.ParentNamespace;
 }
Ejemplo n.º 31
0
 internal void AddChild(INamespace ns)
 {
     _children.Add(ns);
 }
Ejemplo n.º 32
0
 public string GetOutputFolderPath(INamespace classNamespace)
 {
     return(this.GetNamespaceName(classNamespace).Replace(".", "/"));
 }
Ejemplo n.º 33
0
 public NamespaceImpl(string name, INamespace nsp = null)
 {
     Namespace = nsp;
     nsp?.Members.Add(this);
     Name = name;
 }
Ejemplo n.º 34
0
        private void SearchInTheCode(string sQuery)
        {
            lstResults.Items.Clear();
            object value = this.assemblyBrowser.ActiveItem;

            TextFormatter formatter = new TextFormatter();
            ILanguage     language  = this.languageManager.ActiveLanguage;

            if ((language == null) || (formatter == null))
            {
                return;
            }

            // is selected item an assembly
            IAssembly assembly = value as IAssembly;

            if (assembly != null)
            {
                try
                {
                    bCountAtModuleLevel = true;
                    pgBar.Maximum       = 0;
                    foreach (IModule m in assembly.Modules)
                    {
                        pgBar.Maximum = pgBar.Maximum + m.Types.Count;
                    }

                    SearchInAssembly(value);
                }
                finally
                {
                    pgBar.Value         = 0;
                    bCountAtModuleLevel = false;
                }
                return;
            }

            if (this.bIsCanceledRequired)
            {
                return;
            }

            // is selected item a module
            IModule module = value as IModule;

            if (module != null)
            {
                try
                {
                    bCountAtModuleLevel = true;
                    pgBar.Maximum       = module.Types.Count;
                    SearchInModule(value);
                }
                finally
                {
                    pgBar.Value         = 0;
                    bCountAtModuleLevel = false;
                }
                return;
            }

            if (this.bIsCanceledRequired)
            {
                return;
            }

            // is selected item a namespace
            INamespace namespaceDeclaration = value as INamespace;

            if (namespaceDeclaration != null)
            {
                try
                {
                    bCountAtNSLevel = true;
                    pgBar.Maximum   = namespaceDeclaration.Types.Count;
                    SearchInNameSpace(value);
                }
                finally
                {
                    pgBar.Value     = 0;
                    bCountAtNSLevel = false;
                }
                return;
            }

            if (this.bIsCanceledRequired)
            {
                return;
            }

            // is selected item a type
            ITypeDeclaration typeDeclaration = value as ITypeDeclaration;

            if (typeDeclaration != null)
            {
                try
                {
                    bCountAtTypeLevel = true;
                    pgBar.Maximum     = typeDeclaration.Methods.Count;
                    SearchInType(value);
                }
                finally
                {
                    pgBar.Value       = 0;
                    bCountAtTypeLevel = false;
                }
                return;
            }

            if (this.bIsCanceledRequired)
            {
                return;
            }

            // is selected item a method
            IMethodDeclaration methodDeclaration = value as IMethodDeclaration;

            if (methodDeclaration != null)
            {
                SearchInMethod(value);
                return;
            }
        }
 public NamespaceResolveResult(INamespace ns) : base(SpecialType.UnknownType)
 {
     this.ns = ns;
 }
Ejemplo n.º 36
0
        private void PopulateAssemblyTypes(List<StaticDeclaredTypeWrapper> types, INamespace namespaceHandle,
            IDeclarationsCache cache, bool includeNonPublicTypes)
        {
            if (namespaceHandle == null || ! namespaceHandle.IsValid())
                return;

            foreach (IDeclaredElement elementHandle in namespaceHandle.GetNestedElements(cache))
            {
                ITypeElement typeHandle = elementHandle as ITypeElement;
                if (typeHandle != null)
                {
                    PopulateAssemblyTypes(types, typeHandle, includeNonPublicTypes);
                }
                else
                {
                    INamespace nestedNamespace = elementHandle as INamespace;
                    if (nestedNamespace != null)
                        PopulateAssemblyTypes(types, nestedNamespace, cache, includeNonPublicTypes);
                }
            }
        }
Ejemplo n.º 37
0
 public ClassModel(string name, string type, INamespace ns, IXmlElement element = null, IParseLocationInfo parseLocation = null)
     : base(name, type, ns, element, parseLocation)
 {
 }
Ejemplo n.º 38
0
 internal static UsedNamespaceOrType CreateNamespace(INamespace @namespace, IAssemblyReference assemblyOpt = null, string aliasOpt = null)
 {
     Debug.Assert(@namespace != null);
     return(new UsedNamespaceOrType(alias: aliasOpt, targetAssembly: assemblyOpt, targetNamespace: @namespace));
 }
Ejemplo n.º 39
0
 public DocumentElement(IEnumerable <IUsing> usings, INamespace @namespace, IClass @class)
     : this(usings, @namespace, new List <IClass> {
     @class
 })
 {
 }
Ejemplo n.º 40
0
 public string GetNamespaceName(INamespace classNamespace)
 {
     return(classNamespace.Name);
 }
Ejemplo n.º 41
0
 public DocumentElement(IEnumerable <IUsing> usings, INamespace @namespace, IEnumerable <IClass> classes)
 {
     this.Usings    = usings;
     this.Namespace = @namespace;
     this.Classes   = classes;
 }
Ejemplo n.º 42
0
        public ClassOutputModelBuilder CreateInterface(string className, INamespace classNamespace = null)
        {
            CreateClassInternal(className, classNamespace, true);

            return(this);
        }
Ejemplo n.º 43
0
 /// <inheritdoc/>
 public virtual void VisitNamespace(INamespace @namespace)
 {
 }
Ejemplo n.º 44
0
 private static void FlattenChildNamespaces(ICollection <INamespace> resultingList, INamespace ns)
 {
     foreach (IEntity ent in ns.GetMembers())
     {
         if (EntityType.Namespace != ent.EntityType)
         {
             continue;
         }
         INamespace nsEnt = (INamespace)ent;
         resultingList.Add(nsEnt);
         FlattenChildNamespaces(resultingList, nsEnt);
     }
 }
Ejemplo n.º 45
0
 public IEntity Resolve(INamespace ns, string name)
 {
     return(Resolve(ns, name, EntityType.Any));
 }
Ejemplo n.º 46
0
 ICompletionData ICompletionDataFactory.CreateNamespaceCompletionData(INamespace name)
 {
     return(new CompletionData(name.Name, AstStockIcons.Namespace));
 }
Ejemplo n.º 47
0
 private bool ResolveCoalescingNamespaces(INamespace ns, string name, EntityType elementType, ICollection <IEntity> resultingSet)
 {
     return(Namespaces.ResolveCoalescingNamespaces(ns.ParentNamespace, ns, name, elementType, resultingSet));
 }
 public static bool NeedsQualificationFor(this Node node, INamespace ns)
 {
     return(node.GetAncestors <Import>().Any(imp => imp.Namespace == ns.FullName));
 }
Ejemplo n.º 49
0
 protected void EnterNamespace(INamespace ns)
 {
     NameResolutionService.EnterNamespace(ns);
 }
Ejemplo n.º 50
0
        ///////////////////////////////////////////////////////////////////////

        #region IExecute Members
        public override ReturnCode Execute(
            Interpreter interpreter,
            IClientData clientData,
            ArgumentList arguments,
            ref Result result
            )
        {
            ReturnCode code;

            //
            // NOTE: *WARNING* We do NOT actually support namespaces.  This
            //       command exists for the sole purpose of improving source
            //       code compatibility with simple stand alone scripts that
            //       may simply wrap themselves in a "namespace eval" block,
            //       etc.  Any other (more involved) use may not work at all
            //       or may cause undesired and/or unpredictable results.
            //
            if (interpreter != null)
            {
                if (arguments != null)
                {
                    if (arguments.Count >= 2)
                    {
                        string subCommand = arguments[1];
                        bool   tried      = false;

                        code = ScriptOps.TryExecuteSubCommandFromEnsemble(
                            interpreter, this, clientData, arguments, true,
                            false, ref subCommand, ref tried, ref result);

                        if ((code == ReturnCode.Ok) && !tried)
                        {
                            switch (subCommand)
                            {
                            case "children":
                            {
                                if ((arguments.Count >= 2) && (arguments.Count <= 4))
                                {
                                    string name = null;

                                    if (arguments.Count >= 3)
                                    {
                                        name = arguments[2];
                                    }

                                    string pattern = null;

                                    if (arguments.Count >= 4)
                                    {
                                        pattern = arguments[3];
                                    }

                                    IEnumerable <INamespace> children = NamespaceOps.Children(
                                        interpreter, name, pattern, false, ref result);

                                    if (children != null)
                                    {
                                        StringList list = new StringList();

                                        foreach (INamespace child in children)
                                        {
                                            list.Add(child.QualifiedName);
                                        }

                                        result = list;
                                    }
                                    else
                                    {
                                        code = ReturnCode.Error;
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace children ?name? ?pattern?\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "code":
                            {
                                if (arguments.Count == 3)
                                {
                                    string text = arguments[2];

                                    if (!NamespaceOps.IsSubCommand(interpreter, text, "inscope"))
                                    {
                                        INamespace currentNamespace = null;

                                        code = interpreter.GetCurrentNamespaceViaResolvers(
                                            null, LookupFlags.Default, ref currentNamespace,
                                            ref result);

                                        if (code == ReturnCode.Ok)
                                        {
                                            StringList list = new StringList();

                                            list.Add(NamespaceOps.MakeAbsoluteName(
                                                         this.Name));

                                            list.Add("inscope");

                                            list.Add(NamespaceOps.MakeAbsoluteName(
                                                         currentNamespace.QualifiedName));

                                            list.Add(text);

                                            result = list;
                                        }
                                    }
                                    else
                                    {
                                        result = text;         /* COMPAT: Tcl. */
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace code script\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "current":
                            {
                                if (arguments.Count == 2)
                                {
                                    INamespace currentNamespace = null;

                                    code = interpreter.GetCurrentNamespaceViaResolvers(
                                        null, LookupFlags.Default, ref currentNamespace,
                                        ref result);

                                    if (code == ReturnCode.Ok)
                                    {
                                        if (currentNamespace != null)
                                        {
                                            result = currentNamespace.QualifiedName;
                                        }
                                        else
                                        {
                                            result = "current namespace is invalid";
                                            code   = ReturnCode.Error;
                                        }
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace current\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "delete":
                            {
                                if (arguments.Count >= 2)
                                {
                                    for (int index = 2; index < arguments.Count; index++)
                                    {
                                        code = interpreter.DeleteNamespace(
                                            VariableFlags.None, arguments[index], false,
                                            ref result);

                                        if (code != ReturnCode.Ok)
                                        {
                                            break;
                                        }
                                    }

                                    if (code == ReturnCode.Ok)
                                    {
                                        result = String.Empty;
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace delete ?name name ...?\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "enable":
                            {
                                if ((arguments.Count >= 2) && (arguments.Count <= 4))
                                {
                                    if (arguments.Count >= 3)
                                    {
                                        bool enabled = false;

                                        code = Value.GetBoolean2(
                                            arguments[2], ValueFlags.AnyBoolean,
                                            interpreter.CultureInfo, ref enabled, ref result);

                                        bool force = false;

                                        if ((code == ReturnCode.Ok) && (arguments.Count >= 4))
                                        {
                                            code = Value.GetBoolean2(
                                                arguments[3], ValueFlags.AnyBoolean,
                                                interpreter.CultureInfo, ref force, ref result);
                                        }

                                        if (code == ReturnCode.Ok)
                                        {
                                            code = NamespaceOps.Enable(
                                                interpreter, enabled, force, ref result);
                                        }
                                    }

                                    if (code == ReturnCode.Ok)
                                    {
                                        result = interpreter.AreNamespacesEnabled();
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace enable ?enabled? ?force?\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "eval":
                            {
                                if (arguments.Count >= 4)
                                {
                                    string namespaceName = NamespaceOps.MapName(
                                        interpreter, arguments[2]);

                                    INamespace @namespace = NamespaceOps.Lookup(
                                        interpreter, namespaceName, false, true,
                                        ref result);

                                    if (@namespace != null)
                                    {
                                        string name = StringList.MakeList("namespace eval", @namespace.QualifiedName);

                                        ICallFrame frame = interpreter.NewNamespaceCallFrame(
                                            name, CallFrameFlags.Evaluate | CallFrameFlags.UseNamespace,
                                            arguments, @namespace, false);

                                        interpreter.PushNamespaceCallFrame(frame);

                                        if (arguments.Count == 4)
                                        {
                                            code = interpreter.EvaluateScript(arguments[3], ref result);
                                        }
                                        else
                                        {
                                            code = interpreter.EvaluateScript(arguments, 3, ref result);
                                        }

                                        if (code == ReturnCode.Error)
                                        {
                                            Engine.AddErrorInformation(interpreter, result,
                                                                       String.Format("{0}    (in namespace eval \"{1}\" script line {2})",
                                                                                     Environment.NewLine, NamespaceOps.MaybeQualifiedName(@namespace,
                                                                                                                                          true), Interpreter.GetErrorLine(interpreter)));
                                        }

                                        /* IGNORED */
                                        interpreter.PopNamespaceCallFrame(frame);

                                        /* NO RESULT */
                                        Engine.CleanupNamespacesOrComplain(interpreter);
                                    }
                                    else
                                    {
                                        code = ReturnCode.Error;
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace eval name arg ?arg ...?\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "exists":
                            {
                                if (arguments.Count == 3)
                                {
                                    result = ConversionOps.ToInt(NamespaceOps.Lookup(
                                                                     interpreter, arguments[2], false, false) != null);
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace exists name\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "export":
                            {
                                if (arguments.Count >= 2)
                                {
                                    OptionDictionary options = new OptionDictionary(
                                        new IOption[] {
                                            new Option(null, OptionFlags.None, Index.Invalid, Index.Invalid, "-clear", null),
                                            new Option(null, OptionFlags.None, Index.Invalid, Index.Invalid, Option.EndOfOptions, null)
                                        });

                                    int argumentIndex = Index.Invalid;

                                    if (arguments.Count > 2)
                                    {
                                        code = interpreter.GetOptions(options, arguments, 0, 2, Index.Invalid, false, ref argumentIndex, ref result);
                                    }
                                    else
                                    {
                                        code = ReturnCode.Ok;
                                    }

                                    if (code == ReturnCode.Ok)
                                    {
                                        bool clear = false;

                                        if (options.IsPresent("-clear"))
                                        {
                                            clear = true;
                                        }

                                        StringList patterns = new StringList();

                                        if (argumentIndex != Index.Invalid)
                                        {
                                            patterns.AddObjects(ArgumentList.GetRange(arguments, argumentIndex));
                                        }

                                        code = NamespaceOps.Export(interpreter, null, patterns, clear, ref result);
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace export ?-clear? ?pattern pattern ...?\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "forget":
                            {
                                if (arguments.Count >= 2)
                                {
                                    if (arguments.Count >= 3)
                                    {
                                        code = NamespaceOps.Forget(interpreter,
                                                                   new StringList(ArgumentList.GetRange(arguments, 2)),
                                                                   ref result);

                                        if (code == ReturnCode.Ok)
                                        {
                                            result = String.Empty;
                                        }
                                    }
                                    else
                                    {
                                        result = String.Empty;
                                        code   = ReturnCode.Ok;
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace forget ?pattern pattern ...?\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "import":
                            {
                                if (arguments.Count >= 2)
                                {
                                    OptionDictionary options = new OptionDictionary(
                                        new IOption[] {
                                            new Option(null, OptionFlags.None, Index.Invalid, Index.Invalid, "-force", null),
                                            new Option(null, OptionFlags.None, Index.Invalid, Index.Invalid, Option.EndOfOptions, null)
                                        });

                                    int argumentIndex = Index.Invalid;

                                    if (arguments.Count > 2)
                                    {
                                        code = interpreter.GetOptions(options, arguments, 0, 2, Index.Invalid, false, ref argumentIndex, ref result);
                                    }
                                    else
                                    {
                                        code = ReturnCode.Ok;
                                    }

                                    if (code == ReturnCode.Ok)
                                    {
                                        bool force = false;

                                        if (options.IsPresent("-force"))
                                        {
                                            force = true;
                                        }

                                        StringList patterns = new StringList();

                                        if (argumentIndex != Index.Invalid)
                                        {
                                            patterns.AddObjects(ArgumentList.GetRange(arguments, argumentIndex));
                                        }

                                        code = NamespaceOps.Import(interpreter, patterns, force, ref result);
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace import ?-force? ?pattern pattern ...?\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "info":
                            {
                                if (arguments.Count == 3)
                                {
                                    code = NamespaceOps.InfoSubCommand(
                                        interpreter, arguments[2], ref result);
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace info name\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "inscope":
                            {
                                if (arguments.Count >= 4)
                                {
                                    string namespaceName = NamespaceOps.MapName(
                                        interpreter, arguments[2]);

                                    INamespace @namespace = NamespaceOps.Lookup(
                                        interpreter, namespaceName, false, false,
                                        ref result);

                                    if (@namespace != null)
                                    {
                                        if (arguments.Count > 4)
                                        {
                                            IScriptLocation location = null;

#if DEBUGGER && BREAKPOINTS
                                            code = ScriptOps.GetLocation(
                                                interpreter, arguments, 3, ref location,
                                                ref result);

                                            if (code == ReturnCode.Ok)
#endif
                                            {
                                                string name = StringList.MakeList("namespace inscope", @namespace.QualifiedName);

                                                ICallFrame frame = interpreter.NewNamespaceCallFrame(
                                                    name, CallFrameFlags.InScope | CallFrameFlags.UseNamespace,
                                                    arguments, @namespace, false);

                                                interpreter.PushNamespaceCallFrame(frame);

                                                StringList list = new StringList(arguments, 4);

                                                code = interpreter.EvaluateScript(
                                                    ListOps.Concat(arguments[3], list.ToString()),
                                                    location, ref result);

                                                if (code == ReturnCode.Error)
                                                {
                                                    Engine.AddErrorInformation(interpreter, result,
                                                                               String.Format("{0}    (in namespace inscope \"{1}\" script line {2})",
                                                                                             Environment.NewLine, NamespaceOps.MaybeQualifiedName(@namespace,
                                                                                                                                                  true), Interpreter.GetErrorLine(interpreter)));
                                                }

                                                /* IGNORED */
                                                interpreter.PopNamespaceCallFrame(frame);

                                                /* NO RESULT */
                                                Engine.CleanupNamespacesOrComplain(interpreter);
                                            }
                                        }
                                        else
                                        {
                                            string name = StringList.MakeList("namespace inscope", @namespace.QualifiedName);

                                            ICallFrame frame = interpreter.NewNamespaceCallFrame(
                                                name, CallFrameFlags.InScope | CallFrameFlags.UseNamespace,
                                                arguments, @namespace, false);

                                            interpreter.PushNamespaceCallFrame(frame);

                                            code = interpreter.EvaluateScript(arguments[3], ref result);

                                            if (code == ReturnCode.Error)
                                            {
                                                Engine.AddErrorInformation(interpreter, result,
                                                                           String.Format("{0}    (in namespace inscope \"{1}\" script line {2})",
                                                                                         Environment.NewLine, NamespaceOps.MaybeQualifiedName(@namespace,
                                                                                                                                              true), Interpreter.GetErrorLine(interpreter)));
                                            }

                                            /* IGNORED */
                                            interpreter.PopNamespaceCallFrame(frame);

                                            /* NO RESULT */
                                            Engine.CleanupNamespacesOrComplain(interpreter);
                                        }
                                    }
                                    else
                                    {
                                        code = ReturnCode.Error;
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace inscope name arg ?arg...?\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "mappings":
                            {
                                if (arguments.Count == 2)
                                {
                                    lock (interpreter.SyncRoot)         /* TRANSACTIONAL */
                                    {
                                        StringDictionary namespaceMappings = interpreter.NamespaceMappings;

                                        if (namespaceMappings != null)
                                        {
                                            result = namespaceMappings.KeysAndValuesToString(null, false);
                                            code   = ReturnCode.Ok;
                                        }
                                        else
                                        {
                                            result = "namespace mappings not available";
                                            code   = ReturnCode.Error;
                                        }
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace mappings\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "name":
                            {
                                if (arguments.Count == 3)
                                {
                                    string name = arguments[2];

                                    if (!NamespaceOps.IsQualifiedName(name))
                                    {
                                        result = NamespaceOps.MakeQualifiedName(interpreter, name, true);
                                        code   = ReturnCode.Ok;
                                    }
                                    else
                                    {
                                        result = "only non-qualified names are allowed";
                                        code   = ReturnCode.Error;
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace name name\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "origin":
                            {
                                if (arguments.Count == 3)
                                {
                                    code = NamespaceOps.Origin(interpreter, null, arguments[2], ref result);
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace origin name\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "parent":
                            {
                                if ((arguments.Count == 2) || (arguments.Count == 3))
                                {
                                    code = NamespaceOps.Parent(
                                        interpreter, (arguments.Count == 3) ? arguments[2] : null,
                                        ref result);
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace parent ?name?\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "qualifiers":
                            {
                                if (arguments.Count == 3)
                                {
                                    string qualifiers = null;
                                    string tail       = null;

                                    code = NamespaceOps.SplitName(
                                        arguments[2], ref qualifiers, ref tail, ref result);

                                    if (code == ReturnCode.Ok)
                                    {
                                        result = qualifiers;
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace qualifiers string\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "rename":
                            {
                                if (arguments.Count == 4)
                                {
                                    code = interpreter.RenameNamespace(
                                        arguments[2], arguments[3], RenameGlobalOk,
                                        RenameInUseOk, ref result);
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace rename oldName newName\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "tail":
                            {
                                if (arguments.Count == 3)
                                {
                                    string qualifiers = null;
                                    string tail       = null;

                                    code = NamespaceOps.SplitName(
                                        arguments[2], ref qualifiers, ref tail, ref result);

                                    if (code == ReturnCode.Ok)
                                    {
                                        result = tail;
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace tail string\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "unknown":
                            {
                                if ((arguments.Count == 2) || (arguments.Count == 3))
                                {
                                    INamespace currentNamespace = null;

                                    code = interpreter.GetCurrentNamespaceViaResolvers(
                                        null, LookupFlags.Default, ref currentNamespace,
                                        ref result);

                                    if (code == ReturnCode.Ok)
                                    {
                                        if (currentNamespace != null)
                                        {
                                            if (arguments.Count == 3)
                                            {
                                                string unknown = StringOps.NullIfEmpty(arguments[2]);

                                                if (String.IsNullOrEmpty(unknown) &&
                                                    NamespaceOps.IsGlobal(interpreter, currentNamespace))
                                                {
                                                    currentNamespace.Unknown = interpreter.GlobalUnknown;
                                                }
                                                else
                                                {
                                                    currentNamespace.Unknown = unknown;
                                                }

                                                result = unknown;
                                            }
                                            else
                                            {
                                                result = currentNamespace.Unknown;
                                            }
                                        }
                                        else
                                        {
                                            if (arguments.Count == 3)
                                            {
                                                string unknown = StringOps.NullIfEmpty(arguments[2]);

                                                if (String.IsNullOrEmpty(unknown))
                                                {
                                                    interpreter.GlobalUnknown = TclVars.Unknown;
                                                }
                                                else
                                                {
                                                    interpreter.GlobalUnknown = unknown;
                                                }

                                                result = unknown;
                                            }
                                            else
                                            {
                                                result = interpreter.GlobalUnknown;
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace unknown ?script?\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            case "which":
                            {
                                if (arguments.Count >= 2)
                                {
                                    OptionDictionary options = new OptionDictionary(
                                        new IOption[] {
                                            new Option(null, OptionFlags.None, Index.Invalid, Index.Invalid, "-command", null),
                                            new Option(null, OptionFlags.None, Index.Invalid, Index.Invalid, "-variable", null),
                                            new Option(null, OptionFlags.None, Index.Invalid, Index.Invalid, Option.EndOfOptions, null)
                                        });

                                    int argumentIndex = Index.Invalid;

                                    if (arguments.Count > 2)
                                    {
                                        code = interpreter.GetOptions(options, arguments, 0, 2, Index.Invalid, OptionBehaviorFlags.LastIsNonOption, false, ref argumentIndex, ref result);
                                    }
                                    else
                                    {
                                        code = ReturnCode.Ok;
                                    }

                                    if (code == ReturnCode.Ok)
                                    {
                                        if ((argumentIndex != Index.Invalid) &&
                                            ((argumentIndex + 1) == arguments.Count))
                                        {
                                            string name = arguments[argumentIndex];

                                            bool isCommand = false;

                                            if (options.IsPresent("-command"))
                                            {
                                                isCommand = true;
                                            }

                                            bool isVariable = false;

                                            if (options.IsPresent("-variable"))
                                            {
                                                isVariable = true;
                                            }

                                            if (!isCommand || !isVariable)
                                            {
                                                NamespaceFlags flags = NamespaceFlags.None;

                                                if (isCommand)
                                                {
                                                    flags |= NamespaceFlags.Command;
                                                }
                                                else if (isVariable)
                                                {
                                                    flags |= NamespaceFlags.Variable;
                                                }
                                                else
                                                {
                                                    flags |= NamespaceFlags.Command;
                                                }

                                                code = NamespaceOps.Which(interpreter, null, name, flags, ref result);
                                            }
                                            else
                                            {
                                                result = "wrong # args: should be \"namespace which ?-command? ?-variable? name\"";
                                                code   = ReturnCode.Error;
                                            }
                                        }
                                        else
                                        {
                                            if ((argumentIndex != Index.Invalid) &&
                                                Option.LooksLikeOption(arguments[argumentIndex]))
                                            {
                                                result = OptionDictionary.BadOption(options, arguments[argumentIndex]);
                                            }
                                            else
                                            {
                                                result = "wrong # args: should be \"namespace which ?-command? ?-variable? name\"";
                                            }

                                            code = ReturnCode.Error;
                                        }
                                    }
                                }
                                else
                                {
                                    result = "wrong # args: should be \"namespace which ?-command? ?-variable? name\"";
                                    code   = ReturnCode.Error;
                                }
                                break;
                            }

                            default:
                            {
                                result = ScriptOps.BadSubCommand(
                                    interpreter, null, null, subCommand, this, null, null);

                                code = ReturnCode.Error;
                                break;
                            }
                            }
                        }
                    }
                    else
                    {
                        result = "wrong # args: should be \"namespace subcommand ?arg ...?\"";
                        code   = ReturnCode.Error;
                    }
                }
                else
                {
                    result = "invalid argument list";
                    code   = ReturnCode.Error;
                }
            }
            else
            {
                result = "invalid interpreter";
                code   = ReturnCode.Error;
            }

            return(code);
        }
Ejemplo n.º 51
0
 public string GetOutputFolderPath(INamespace classNamespace)
 {
     return(classNamespace.Name.Replace(".", "/"));
 }
Ejemplo n.º 52
0
 public GenericParametersNamespaceExtender(IType type, INamespace currentNamespace)
 {
     _type   = type;
     _parent = currentNamespace;
 }
Ejemplo n.º 53
0
 public static CompilerError MemberNotFound(MemberReferenceExpression node, INamespace @namespace, string suggestion)
 {
     return(MemberNotFound(node, node.Name, @namespace, suggestion));
 }
Ejemplo n.º 54
0
 public static CompilerError MemberNotFound(Node node, string memberName, INamespace @namespace, string suggestion)
 {
     return(Instantiate("BCE0019", node, memberName, @namespace, DidYouMeanOrNull(suggestion)));
 }
Ejemplo n.º 55
0
 public DummyNamespace(INamespace parentNamespace, string name)
 {
     this.parentNamespace = parentNamespace;
     this.name            = name;
 }
Ejemplo n.º 56
0
 public ProjectConfiguration(string type, INamespace ns, IXmlElement designModelElement, IProjectCollection projects)
     : base(null, type, ns, designModelElement)
 {
     Projects = projects;
 }
Ejemplo n.º 57
0
 void ProcessNodeInMethodContext(InternalMethod entity, INamespace ns, Node node)
 {
     PushMethodInfo(entity);
     EnterNamespace(ns);
     try
     {
         Visit(node);
     }
     finally
     {
         LeaveNamespace();
         PopMethodInfo();
     }
 }
Ejemplo n.º 58
0
 public override void Rename(INamespace ns, string name)
 {
     RenameRefactoring.RenameNamespace(ns, name);
 }
Ejemplo n.º 59
0
 IEnumerable<IMethod> GetExtensionMethods(INamespace ns)
 {
     // TODO: maybe make this a property on INamespace?
     return
         from c in ns.Types
         where c.IsStatic && c.HasExtensionMethods && c.TypeParameters.Count == 0
         from m in c.Methods
         where m.IsExtensionMethod
         select m;
 }
Ejemplo n.º 60
0
 NamespaceDeclaration ConvertNamespaceDeclaration(INamespace ns)
 {
     return(new NamespaceDeclaration(ns.FullName));
 }