static string GetMemberExpression (TextEditor editor, MemberResolveResult mr, DomRegion expressionRegion) { var ed = (ExtensibleTextEditor) editor; string expression = null; string member = null; if (mr.Member != null) { if (mr.Member is IProperty) { // Visual Studio will evaluate Properties if you hover over their definitions... var prop = (IProperty) mr.Member; if (prop.CanGet) { if (prop.IsStatic) expression = prop.FullName; else member = prop.Name; } else { return null; } } else if (mr.Member is IField) { var field = (IField) mr.Member; if (field.IsStatic) expression = field.FullName; else member = field.Name; } else { return null; } } if (expression == null) { if (member == null) return null; if (mr.TargetResult != null) { if (mr.TargetResult is LocalResolveResult) { expression = GetLocalExpression (editor, (LocalResolveResult) mr.TargetResult, expressionRegion); } else if (mr.TargetResult is MemberResolveResult) { expression = GetMemberExpression (editor, (MemberResolveResult) mr.TargetResult, expressionRegion); } else { var targetRegion = mr.TargetResult.GetDefinitionRegion (); if (targetRegion.BeginLine != 0 && targetRegion.BeginColumn != 0) { var start = new DocumentLocation (targetRegion.BeginLine, targetRegion.BeginColumn); var end = new DocumentLocation (targetRegion.EndLine, targetRegion.EndColumn); expression = ed.GetTextBetween (start, end).Trim (); } } } if (!string.IsNullOrEmpty (expression)) expression += "." + member; else expression = member; } return expression; }
protected void WriteTarget(MemberResolveResult memberResult) { if (memberResult.Member.IsStatic) { switch(memberResult.Member.SymbolKind) { case SymbolKind.Method: { if(memberResult.Member.DeclaringType != TransformCtx.CurClass) { this.Write(BridgeTypes.ToJsName(memberResult.Member.DeclaringType, this.Emitter)); this.WriteDot(); } break; } case SymbolKind.Property: { if(Helpers.IsFieldProperty(memberResult.Member, this.Emitter)) { this.Write(BridgeTypes.ToJsName(memberResult.Member.DeclaringType, this.Emitter)); this.WriteDot(); } else { if(memberResult.Member.DeclaringType != TransformCtx.CurClass) { this.Write(BridgeTypes.ToJsName(memberResult.Member.DeclaringType, this.Emitter)); this.WriteDot(); } } break; } default: { this.Write(BridgeTypes.ToJsName(memberResult.Member.DeclaringType, this.Emitter)); this.WriteDot(); break; } } } else { switch(memberResult.Member.SymbolKind) { case SymbolKind.Method: { if(memberResult.Member.DeclaringType != TransformCtx.CurClass) { this.WriteThis(); if(this.IdentifierExpression.Role == Roles.TargetExpression) { this.WriteObjectColon(); } else { this.WriteDot(); } } break; } case SymbolKind.Property: { if(Helpers.IsFieldProperty(memberResult.Member, this.Emitter)) { this.WriteThis(); this.WriteDot(); } else { if(memberResult.Member.DeclaringType != TransformCtx.CurClass) { this.WriteThis(); this.WriteObjectColon(); } } break; } default: { this.WriteThis(); this.WriteDot(); break; } } } }
protected void WriteTarget(MemberResolveResult memberResult) { if (memberResult.Member.IsStatic) { if (!this.Emitter.Validator.IsIgnoreType(memberResult.Member.DeclaringTypeDefinition) && memberResult.Member.DeclaringTypeDefinition.Kind != TypeKind.Enum) { this.Write("Bridge.get(" + BridgeTypes.ToJsName(memberResult.Member.DeclaringType, this.Emitter) + ")"); } else { this.Write(BridgeTypes.ToJsName(memberResult.Member.DeclaringType, this.Emitter)); } } else { this.WriteThis(); } this.WriteDot(); }
protected void WriteTarget(MemberResolveResult memberResult) { if (memberResult.Member.IsStatic) { this.Write(BridgeTypes.ToJsName(memberResult.Member.DeclaringType, this.Emitter)); } else { this.WriteThis(); } this.WriteDot(); }
public static bool IsResourcesMemberField(MemberResolveResult memberResult) { MonoDroidProject monoDroidProject = AndroidProjectHelpers.ResolveAndroidProject (); return (memberResult.TargetResult.Type.DeclaringType.FullName == monoDroidProject.DefaultNamespace + ".Resource"); }
public static List<string> ResolveToFilenames(MemberResolveResult member, MonoDroidProject androidProject, string resolveCategory) { FileInfo fi = new FileInfo (androidProject.AndroidResgenFile.FullPath); var directories = Directory.GetDirectories (fi.Directory.FullName); List<DirectoryInfo> layoutFolders = new List<DirectoryInfo> (); foreach (var d in directories) { if (d.ToLower().Contains(resolveCategory)) { layoutFolders.Add (new DirectoryInfo(d)); } } List<string> resolvedLayouts = new List<string> (); foreach (var folder in layoutFolders) { // Get all the resources directories; var r = androidProject.GetAndroidResources (folder.Name); // Also get the land, portrait etc... resolvedLayouts.AddRange(from l in r where l.Key == member.Member.Name select l.Value.FilePath.FullPath.ToString ()); } return resolvedLayouts; }