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));
        }
Пример #4
0
        private void AddBodyPullThreat(Unit enemy)
        {
            if (!IsHostile(enemy))
            {
                return;
            }

            var helper = new BodyPullThreatHelper(this);

            enemy.AcceptVisitor(helper);
        }
Пример #5
0
        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));
        }
Пример #6
0
        public static void Generate(Unit unit)
        {
            var generator = new MissionStructureNameGenerator();

            unit.AcceptVisitor(generator);
        }