コード例 #1
0
        public void ClassKind_ClassIsNotPartial_ReturnsMainClassKind()
        {
            CreateProjectContent();
            CreatePublicClass("MyClass");

            vsCMClassKind kind = codeClass.ClassKind;

            Assert.AreEqual(vsCMClassKind.vsCMClassKindMainClass, kind);
        }
コード例 #2
0
        /// <summary>
        /// Adds a class to the <see cref="CodeNamespace"/> and supports adding a partial class.
        /// </summary>
        /// <param name="codeNamespace"><see cref="CodeNamespace"/> instance.</param>
        /// <param name="name">Name of the class.</param>
        /// <param name="baseName">Name of the base class. Null indicates no base class.</param>
        /// <param name="access">Class access.</param>
        /// <param name="classKind">Class kind.</param>
        /// <returns><see cref="CodeClass"/> instance.</returns>
        internal static CodeClass AddClassWithPartialSupport(this CodeNamespace codeNamespace, string name, string baseName, 
            vsCMAccess access, vsCMClassKind classKind)
        {
            // Workaround to support existing partial class, set name after.
            CodeClass codeClass = codeNamespace.AddClass(Resources.TempClassName, AppConstants.PLACE_AT_THE_END, baseName, null, access);

            (codeClass as CodeClass2).ClassKind = classKind;

            codeClass.Name = name;

            return codeClass;
        }
コード例 #3
0
        /// <summary>
        /// Adds a class to the <see cref="CodeNamespace"/> and supports adding a partial class.
        /// </summary>
        /// <param name="codeNamespace"><see cref="CodeNamespace"/> instance.</param>
        /// <param name="name">Name of the class.</param>
        /// <param name="baseName">Name of the base class. Null indicates no base class.</param>
        /// <param name="access">Class access.</param>
        /// <param name="classKind">Class kind.</param>
        /// <returns><see cref="CodeClass"/> instance.</returns>
        internal static CodeClass AddClassWithPartialSupport(this CodeNamespace codeNamespace, string name, string baseName,
                                                             vsCMAccess access, vsCMClassKind classKind)
        {
            // Workaround to support existing partial class, set name after.
            CodeClass codeClass = codeNamespace.AddClass(Resources.TempClassName, AppConstants.PLACE_AT_THE_END, baseName, null, access);

            (codeClass as CodeClass2).ClassKind = classKind;

            codeClass.Name = name;

            return(codeClass);
        }
コード例 #4
0
		///-------------------------------------------------------------------------------------------------------------
		/// <summary>
		///	 Returns field names in the specified class using code model.
		///	 If publicOnly is true only public fields are returned.
		/// </summary>
		///-------------------------------------------------------------------------------------------------------------
		protected void GetFieldNames(CodeClass codeClass, bool caseSensitive, bool onlyBaseClasses, int depth, int maxDepth, ref FieldDataDictionary fields)
		{
			if (codeClass != null && depth <= maxDepth)
			{
				if (!(onlyBaseClasses && depth == 0))
				{
					foreach (CodeElement codeElement in codeClass.Members)
					{
						//vsCMElement kind = codeElement.Kind; //vsCMElementVariable
						CodeVariable codeVariable = codeElement as CodeVariable;
						if (codeVariable != null)
						{
							FieldData field = new FieldData(codeClass, codeVariable, depth);

							if (field != null && !string.IsNullOrEmpty(field.Name))
							{
								if (fields == null)
								{
									fields = new FieldDataDictionary(caseSensitive);
								}

								try
								{
									if (!fields.ContainsKey(field.Name))
									{
										fields.Add(field.Name, field);
									}
								}
								catch
								{
								}
							}
						}
					}
				}

				foreach (CodeElement baseCodeElement in codeClass.Bases)
				{
					CodeClass baseCodeClass = baseCodeElement as CodeClass;
					if (baseCodeClass != null)
					{
						CodeElements partCodeElements = null;
						CodeClass2 baseCodeClass2 = baseCodeClass as CodeClass2;
						if (baseCodeClass2 != null)
						{
							vsCMClassKind classKind = baseCodeClass2.ClassKind;
							if ((classKind | vsCMClassKind.vsCMClassKindPartialClass) == vsCMClassKind.vsCMClassKindPartialClass)
							{
								try
								{
									partCodeElements = baseCodeClass2.Parts;
								}
								catch
								{
								}
							}
						}

						if (partCodeElements != null && partCodeElements.Count > 1)
						{
							foreach (CodeElement partCodeElement in partCodeElements)
							{
								CodeClass partCodeClass = partCodeElement as CodeClass;
								if (partCodeClass != null)
								{
									GetFieldNames(partCodeClass, caseSensitive, onlyBaseClasses, depth + 1, maxDepth, ref fields);
								}
							}
						}
						else
						{
							GetFieldNames(baseCodeClass, caseSensitive, onlyBaseClasses, depth + 1, maxDepth, ref fields);
						}
					}
				}
			}
		}