protected override IEnumerable <ItemInfo> ScanItems(Unit target) { var scanner = new UnitScanner(); target.AcceptVisitor(scanner); return(scanner.ScannedItems); }
public Tuple <CppParsedFile, AstNode, CompilationUnit> GetTypeBeforeCursor() { CompilationUnit baseUnit; if (currentMember == null && currentType == null) { return(null); } if (Unit == null) { return(null); } baseUnit = ParseStub("x> a"); var memberLocation = currentMember != null ? currentMember.Region.Begin : currentType.Region.Begin; var expr = baseUnit.GetNodeAt <AstType> (location.Line, location.Column + 1); // '>' position var member = Unit.GetNodeAt <AttributedNode> (memberLocation); var member2 = baseUnit.GetNodeAt <AttributedNode> (memberLocation); if (member == null || member2 == null) { return(null); } member2.Remove(); member.ReplaceWith(member2); var tsvisitor = new TypeSystemConvertVisitor(CSharpParsedFile.FileName); Unit.AcceptVisitor(tsvisitor, null); return(Tuple.Create(tsvisitor.ParsedFile, (AstNode)expr, Unit)); }
public Tuple <CSharpParsedFile, AstNode, CompilationUnit> GetIndexerBeforeCursor() { CompilationUnit baseUnit; if (currentMember == null && currentType == null) { return(null); } baseUnit = ParseStub("x] = a[1"); var memberLocation = currentMember != null ? currentMember.Region.Begin : currentType.Region.Begin; var mref = baseUnit.GetNodeAt(location, n => n is IndexerExpression); Print(baseUnit); AstNode expr; if (mref is IndexerExpression) { expr = ((IndexerExpression)mref).Target; } else { return(null); } var member = Unit.GetNodeAt <AttributedNode> (memberLocation); var member2 = baseUnit.GetNodeAt <AttributedNode> (memberLocation); member2.Remove(); member.ReplaceWith(member2); var tsvisitor = new TypeSystemConvertVisitor(CSharpParsedFile.FileName); Unit.AcceptVisitor(tsvisitor, null); return(Tuple.Create(tsvisitor.ParsedFile, (AstNode)expr, Unit)); }
private void AddBodyPullThreat(Unit enemy) { if (!IsHostile(enemy)) { return; } var helper = new BodyPullThreatHelper(this); enemy.AcceptVisitor(helper); }
protected Tuple <CSharpParsedFile, AstNode, CompilationUnit> GetInvocationBeforeCursor(bool afterBracket) { CompilationUnit baseUnit; if (currentMember == null) { baseUnit = ParseStub("", false); var section = baseUnit.GetNodeAt <AttributeSection> (location.Line, location.Column - 2); var attr = section != null?section.Attributes.LastOrDefault() : null; if (attr != null) { // insert target type into compilation unit, to respect the attr.Remove(); var node = Unit.GetNodeAt(location) ?? Unit; node.AddChild(attr, AttributeSection.AttributeRole); return(Tuple.Create(CSharpParsedFile, (AstNode)attr, Unit)); } } if (currentMember == null && currentType == null) { return(null); } baseUnit = ParseStub(afterBracket ? "" : "x"); var memberLocation = currentMember != null ? currentMember.Region.Begin : currentType.Region.Begin; var mref = baseUnit.GetNodeAt(location.Line, location.Column - 1, n => n is InvocationExpression || n is ObjectCreateExpression); AstNode expr; if (mref is InvocationExpression) { expr = ((InvocationExpression)mref).Target; } else if (mref is ObjectCreateExpression) { expr = mref; } else { return(null); } var member = Unit.GetNodeAt <AttributedNode> (memberLocation); var member2 = baseUnit.GetNodeAt <AttributedNode> (memberLocation); member2.Remove(); member.ReplaceWith(member2); var tsvisitor = new TypeSystemConvertVisitor(CSharpParsedFile.FileName); Unit.AcceptVisitor(tsvisitor, null); return(Tuple.Create(tsvisitor.ParsedFile, (AstNode)expr, Unit)); }
public static void Generate(Unit unit) { var generator = new MissionStructureNameGenerator(); unit.AcceptVisitor(generator); }