Ejemplo n.º 1
0
        public static string csharpCode(this IMethod iMethod)
        {
            var @namespace = iMethod.@namespace();
            var typeName = iMethod.typeName();
            var ambiance = new CSharpAmbience();
            var csharpCode = ("\t\t{0}".line() +
                              "\t\t{{".line() +
                              "\t\t\tthrow new System.Exception(\"O2 Auto Generated Method\");".line() +
                              "\t\t}}".line())
                             .format(ambiance.Convert(iMethod));

            if (typeName.valid())
                csharpCode = ("\tclass {0}".line() +
                              "\t{{".line() +
                              "{1}".line() +
                              "\t}}".line())
                             .format(typeName, csharpCode);
            if (@namespace.valid())
                csharpCode = ("namespace {0}".line() +
                              "{{".line() +
                              "{1}".line() +
                              "}}".line())
                             .format(@namespace, csharpCode);
            //if (@namespace.valid());

            return csharpCode;
        }
Ejemplo n.º 2
0
 public static string fullName(this IProperty iProperty)
 {
     if (iProperty == null)
         return "[null value]";
     CSharpAmbience ambience = new CSharpAmbience();
     ambience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.UseFullyQualifiedMemberNames | ConversionFlags.UseFullyQualifiedTypeNames;
     return ambience.Convert(iProperty);
 }
Ejemplo n.º 3
0
 public static string fullName(this IMethod iMethod)
 {
     if (iMethod == null)
         return "[null value]";
     CSharpAmbience ambience = new CSharpAmbience();
     ambience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.UseFullyQualifiedMemberNames;
     return ambience.Convert(iMethod);
 }
Ejemplo n.º 4
0
		public void FixtureSetUp()
		{
			valueCollection = SharedProjectContentRegistryForTests.Instance.Mscorlib.GetClass("System.Collections.Generic.Dictionary.ValueCollection", 2);
			Assert.AreEqual(2, valueCollection.TypeParameters.Count);
			Assert.AreEqual(2, valueCollection.DeclaringType.TypeParameters.Count);
			
			fullMemberNameAmbience = new CSharpAmbience();
			fullMemberNameAmbience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.UseFullyQualifiedMemberNames;
		}
		public void RoundMethodParameterConvertedToStringUsingAmbienceReturnsDoubleNumberString()
		{
			IAmbience ambience = new CSharpAmbience();
			string text = ambience.Convert(GetFirstRoundMethodParameter());
			Assert.AreEqual("double number", text);
		}
 static string GetText(ResolveResult result)
 {
     // ReSharper disable CanBeReplacedWithTryCastAndCheckForNull
     if (result == null) {
         return null;
     }
     if (result is MixedResolveResult)
         return GetText(((MixedResolveResult)result).PrimaryResult);
     IAmbience ambience = new CSharpAmbience();
     ambience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.ShowAccessibility;
     if (result is MemberResolveResult) 
     {
         return GetMemberText(ambience, ((MemberResolveResult)result).ResolvedMember);
     }
     if (result is LocalResolveResult) 
     {
         var rr = (LocalResolveResult)result;
         ambience.ConversionFlags = ConversionFlags.UseFullyQualifiedTypeNames
                                    | ConversionFlags.ShowReturnType;
         var b = new StringBuilder();
         b.Append(rr.IsParameter ? "parameter " : "local variable ");
         b.Append(ambience.Convert(rr.Field));
         return b.ToString();
     }
     if (result is NamespaceResolveResult) {
         return "namespace " + ((NamespaceResolveResult)result).Name;
     }
     if (result is TypeResolveResult) {
         IClass c = ((TypeResolveResult)result).ResolvedClass;
         if (c != null)
             return GetMemberText(ambience, c);
         return ambience.Convert(result.ResolvedType);
     }
     if (result is MethodGroupResolveResult) {
         var mrr = result as MethodGroupResolveResult;
         IMethod m = mrr.GetMethodIfSingleOverload();
         if (m != null)
             return GetMemberText(ambience, m);
         return "Overload of " + ambience.Convert(mrr.ContainingType) + "." + mrr.Name;
     }
     return null;
     // ReSharper restore CanBeReplacedWithTryCastAndCheckForNull
 }        
Ejemplo n.º 7
0
 static string GetText(ResolveResult result)
 {
     if (result == null) {
         return null;
     }
     if (result is MixedResolveResult)
         return GetText(((MixedResolveResult)result).PrimaryResult);
     IAmbience ambience = new CSharpAmbience();
     ambience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.ShowAccessibility;
     if (result is MemberResolveResult) {
         return GetMemberText(ambience, ((MemberResolveResult)result).ResolvedMember);
     } else if (result is LocalResolveResult) {
         LocalResolveResult rr = (LocalResolveResult)result;
         ambience.ConversionFlags = ConversionFlags.UseFullyQualifiedTypeNames
             | ConversionFlags.ShowReturnType;
         StringBuilder b = new StringBuilder();
         if (rr.IsParameter)
             b.Append("parameter ");
         else
             b.Append("local variable ");
         b.Append(ambience.Convert(rr.Field));
         return b.ToString();
     } else if (result is NamespaceResolveResult) {
         return "namespace " + ((NamespaceResolveResult)result).Name;
     } else if (result is TypeResolveResult) {
         IClass c = ((TypeResolveResult)result).ResolvedClass;
         if (c != null)
             return GetMemberText(ambience, c);
         else
             return ambience.Convert(result.ResolvedType);
     } else if (result is MethodGroupResolveResult) {
         MethodGroupResolveResult mrr = result as MethodGroupResolveResult;
         IMethod m = mrr.GetMethodIfSingleOverload();
         if (m != null)
             return GetMemberText(ambience, m);
         else
             return "Overload of " + ambience.Convert(mrr.ContainingType) + "." + mrr.Name;
     } else {
         return null;
     }
 }
		/// <summary>
		/// Generates the completion data. This method is called by the text editor control.
		/// </summary>
		public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
		{
			List<ICompletionData> completionData = new List<ICompletionData>();
			completionData.Add(new DelegateCompletionData("new " + resolveResult.ResolvedType.Name + "();", 2,
			                                              "delegate " + resolvedClass.FullyQualifiedName + "\n" + CodeCompletionData.GetDocumentation(resolvedClass.Documentation)));
			completionData.Add(new DelegateCompletionData("delegate {  };", 3,
			                                              "${res:CSharpBinding.InsertAnonymousMethod}"));
			CSharpAmbience ambience = new CSharpAmbience();
			ambience.ConversionFlags = ConversionFlags.ShowParameterNames;
			IMethod invoke = resolvedClass.SearchMember("Invoke", LanguageProperties.CSharp) as IMethod;
			if (invoke != null) {
				StringBuilder builder = new StringBuilder("delegate(");
				for (int i = 0; i < invoke.Parameters.Count; ++i) {
					if (i > 0) {
						builder.Append(", ");
					}
					builder.Append(ambience.Convert(invoke.Parameters[i]));
				}
				builder.Append(") {  };");
				completionData.Add(new DelegateCompletionData(builder.ToString(), 3,
				                                              "${res:CSharpBinding.InsertAnonymousMethodWithParameters}"));
				IClass callingClass = resolveResult.CallingClass;
				IClass eventReturnType = invoke.ReturnType.GetUnderlyingClass();
				IClass[] eventParameters = new IClass[invoke.Parameters.Count];
				for (int i = 0; i < eventParameters.Length; i++) {
					eventParameters[i] = invoke.Parameters[i].ReturnType.GetUnderlyingClass();
					if (eventParameters[i] == null) {
						eventReturnType = null;
						break;
					}
				}
				if (callingClass != null && eventReturnType != null) {
					bool inStatic = false;
					if (resolveResult.CallingMember != null)
						inStatic = resolveResult.CallingMember.IsStatic;
					foreach (IMethod method in callingClass.DefaultReturnType.GetMethods()) {
						if (inStatic && !method.IsStatic)
							continue;
						if (!method.IsAccessible(callingClass, true))
							continue;
						if (method.Parameters.Count != invoke.Parameters.Count)
							continue;
						// check return type compatibility:
						IClass c2 = method.ReturnType.GetUnderlyingClass();
						if (c2 == null || !c2.IsTypeInInheritanceTree(eventReturnType))
							continue;
						bool ok = true;
						for (int i = 0; i < eventParameters.Length; i++) {
							c2 = method.Parameters[i].ReturnType.GetUnderlyingClass();
							if (c2 == null || !eventParameters[i].IsTypeInInheritanceTree(c2)) {
								ok = false;
								break;
							}
						}
						if (ok) {
							completionData.Add(new CodeCompletionData(method));
						}
					}
				}
			}
			return completionData.ToArray();
		}
		public void ExitMethodReturnTypeConvertedToStringUsingAmbienceReturnsVoid()
		{
			IAmbience ambience = new CSharpAmbience();
			List<IMethod> methods = GetExitMethods();
			IReturnType returnType = methods[0].ReturnType;
			string text = ambience.Convert(returnType);
			Assert.AreEqual("void", text);
		}
		public void ExitMethodParameterConvertedToStringUsingAmbienceReturnsObjectCodeString()
		{
			IAmbience ambience = new CSharpAmbience();
			string text = ambience.Convert(GetFirstExitMethodParameter());
			Assert.AreEqual("object code", text);
		}
		/// <summary>
		/// Generates the completion data. This method is called by the text editor control.
		/// </summary>
		public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
		{
			List<ICompletionData> completionData = new List<ICompletionData>();
			
			// delegate {  }
			completionData.Add(new DelegateCompletionData("delegate {  };", 3,
			                                              "${res:CSharpBinding.InsertAnonymousMethod}"));

			CSharpAmbience ambience = new CSharpAmbience();
			// get eventHandler type name incl. type argument list
			ambience.ConversionFlags = ConversionFlags.ShowParameterNames | ConversionFlags.ShowTypeParameterList | ConversionFlags.UseFullyQualifiedTypeNames;
			string eventHandlerFullyQualifiedTypeName = ambience.Convert(resolvedReturnType);
			ambience.ConversionFlags = ConversionFlags.ShowParameterNames | ConversionFlags.ShowTypeParameterList;
			string eventHandlerTypeName = ambience.Convert(resolvedReturnType);
			
			// retrieve Invoke method from resolvedReturnType instead of resolvedClass to get a method where
			// type arguments are substituted.
			IMethod invoke = resolvedReturnType.GetMethods().Find(delegate(IMethod m) { return m.Name == "Invoke"; });
			StringBuilder parameterString = new StringBuilder();
			if (invoke != null) {
				
				// build the parameter string
				for (int i = 0; i < invoke.Parameters.Count; ++i) {
					if (i > 0) {
						parameterString.Append(", ");
					}
					
					parameterString.Append(ambience.Convert(invoke.Parameters[i]));
				}
				
				// delegate(object sender, EventArgs e) {  };
				StringBuilder anonMethodWithParametersBuilder =
					new StringBuilder("delegate(").Append(parameterString.ToString()).Append(") {  };");
				completionData.Add(new DelegateCompletionData(anonMethodWithParametersBuilder.ToString(), 3,
				                                              "${res:CSharpBinding.InsertAnonymousMethodWithParameters}"));

				// new EventHandler(ClassName_EventName);
				IClass callingClass = resolveResult.CallingClass;
				bool inStatic = false;
				if (resolveResult.CallingMember != null)
					inStatic = resolveResult.CallingMember.IsStatic;
				
				// ...build the new handler name...
				string newHandlerName = BuildHandlerName();
				if (newHandlerName == null) {
					MemberResolveResult mrr = resolveResult as MemberResolveResult;
					IEvent eventMember = (mrr != null ? mrr.ResolvedMember as IEvent : null);
					newHandlerName =
						((callingClass != null) ? callingClass.Name : "callingClass")
						+ "_"
						+ ((eventMember != null) ? eventMember.Name : "eventMember");
				}

				// ...build the completion text...
				StringBuilder newHandlerTextBuilder = new StringBuilder("new ").Append(eventHandlerTypeName).Append("(");
				newHandlerTextBuilder.Append(newHandlerName).Append(");");

				// ...build the optional new method text...
				StringBuilder newHandlerCodeBuilder = new StringBuilder();
				newHandlerCodeBuilder.AppendLine().AppendLine();
				if (inStatic)
					newHandlerCodeBuilder.Append("static ");
				newHandlerCodeBuilder.Append(ambience.Convert(invoke.ReturnType)).Append(" ").Append(newHandlerName);
				newHandlerCodeBuilder.Append("(").Append(parameterString.ToString()).AppendLine(")");
				newHandlerCodeBuilder.AppendLine("{");
				newHandlerCodeBuilder.AppendLine("throw new NotImplementedException();");
				newHandlerCodeBuilder.Append("}");

				// ...and add it to the completionData.
				completionData.Add(new NewEventHandlerCompletionData(
					newHandlerTextBuilder.ToString(),
					2+newHandlerName.Length,
					newHandlerName.Length,
					"new " + eventHandlerFullyQualifiedTypeName + 
					"(" + newHandlerName + StringParser.Parse(")\n${res:CSharpBinding.GenerateNewHandlerInstructions}\n")
					+ CodeCompletionData.ConvertDocumentation(resolvedClass.Documentation),
					resolveResult,
					newHandlerCodeBuilder.ToString()
				));
				
				if (callingClass != null) {
					foreach (IMethod method in callingClass.DefaultReturnType.GetMethods()) {
						if (inStatic && !method.IsStatic)
							continue;
						if (!method.IsAccessible(callingClass, true))
							continue;
						if (method.Parameters.Count != invoke.Parameters.Count)
							continue;
						// check return type compatibility:
						if (!MemberLookupHelper.ConversionExists(method.ReturnType, invoke.ReturnType))
							continue;
						bool ok = true;
						for (int i = 0; i < invoke.Parameters.Count; i++) {
							if (!MemberLookupHelper.ConversionExists(invoke.Parameters[i].ReturnType, method.Parameters[i].ReturnType)) {
								ok = false;
								break;
							}
						}
						if (ok) {
							completionData.Add(new CodeCompletionData(method));
						}
					}
				}
			}
			return completionData.ToArray();
		}