public IKaVEList <Query> Extract(ISST sst) { var queries = Lists.NewList <Query>(); foreach (var method in sst.Methods) { var context = new UsageContext { Enclosings = { Type = sst.EnclosingType, Method = method.Name } }; AddDefaultQueries(sst, context); Extract(method, context); foreach (var query in context.AllQueries) { queries.Add(query); } } return(queries); }
protected virtual void ProcessMethodBody(IMethodDeclaration methodDecl, UsageContext context) { foreach (var stmt in methodDecl.Body) { stmt.Accept(_collectorVisitor, context); } }
protected override void ProcessMethodBody(IMethodDeclaration methodDecl, UsageContext context) { base.ProcessMethodBody(methodDecl, context); if (context.TargetType != null) { _matchingQuery = context.AllQueries.First(q => context.TargetType.Equals(q.type)); // prevent traversion of the complete SST throw new CompletionPointFoundException(); } }
private void Extract(IMethodDeclaration methodDecl, UsageContext context) { context.EnterNewScope(); var parameters = methodDecl.Name.Parameters; for (var argIndex = 0; argIndex < parameters.Count; argIndex++) { var parameter = parameters[argIndex]; var id = parameter.Name; var type = parameter.ValueType; var def = DefinitionSites.CreateDefinitionByParam(methodDecl.Name, argIndex); context.DefineVariable(id, type, def); } ProcessMethodBody(methodDecl, context); context.LeaveCurrentScope(); }
private static void AddDefaultQueries(ISST sst, UsageContext context) { context.DefineVariable("this", sst.EnclosingType, DefinitionSites.CreateDefinitionByThis()); context.DefineVariable("base", sst.EnclosingType, DefinitionSites.CreateDefinitionByThis()); foreach (var field in sst.Fields) { var id = field.Name.Name; var type = field.Name.ValueType; var definition = DefinitionSites.CreateDefinitionByField(field.Name); context.DefineVariable(id, type, definition); } foreach (var property in sst.Properties) { var id = property.Name.Name; var type = property.Name.ValueType; var definition = DefinitionSites.CreateDefinitionByField(Names.UnknownField); context.DefineVariable(id, type, definition); } }