public override void EnterStructure_([NotNull] XSharpParser.Structure_Context context)
        {
            var   tokens    = context.Modifiers?._Tokens;
            XType newStruct = new XType(context.Id.GetText(),
                                        Kind.Structure,
                                        decodeModifiers(tokens),
                                        decodeVisibility(tokens),
                                        new TextRange(context), new TextInterval(context));

            //

            newStruct.NameSpace = decodeNamespace(context.Namespace, currentNamespace);

            // and push into the current Namespace
            //CurrentNamespace.Types.Add(newClass);
            // Static Class ?
            newStruct.IsStatic = this.isStatic(tokens);
            // Partial Class ?
            newStruct.IsPartial = this.isPartial(tokens);
            // IMPLEMENTS ?
            if ((context._Implements != null) && (context._Implements.Count > 0))
            {
                foreach (var interfaces in context._Implements)
                {
                    //newClass.BaseTypes.Add(new CodeTypeReference(interfaces.GetText()));
                }
            }

            //
            newStruct = addType(newStruct);
            // Set as Current working Class
            pushType(newStruct);
        }
Beispiel #2
0
        public override void ExitStructure_([NotNull] XSharpParser.Structure_Context context)
        {
            var lastmember = context._Members.LastOrDefault();

            if (lastmember != null)
            {
                // collect trivia after last member
                writeTrivia(CurrentClass, lastmember, true);
            }
            ClearMembers();
        }
Beispiel #3
0
        public override void EnterStructure_(XSharpParser.Structure_Context context)
        {
            base.EnterStructure_(context);
            XCodeTypeDeclaration newClass = new XCodeTypeDeclaration(context.Id.GetCleanText());

            newClass.IsStruct = true;

            pushCurrentType(newClass);
            addAttributes(newClass, context.Attributes);
            writeTrivia(newClass, context);
            //
            ContextToTypeAttributes(newClass, context.Modifiers);
            ContextToTypeModifiers(newClass, context.Modifiers);

            // Interfaces
            addInterfaces(newClass, context._Implements);
            //
            // Add the variables from this class to the Members collection and lookup table
            ClearMembers();
            addFields(newClass, context);
            SaveSourceCode(newClass, context);
        }
Beispiel #4
0
        public override void EnterStructure_(XSharpParser.Structure_Context context)
        {
            XCodeTypeDeclaration newClass = new XCodeTypeDeclaration(context.Id.GetCleanText());

            // Set as Current working Class
            CurrentClass = newClass;
            if (context.Attributes != null)
            {
                newClass.CustomAttributes = GenerateAttributes(context.Attributes);
            }
            // and push into the Namespace
            CurrentNamespace.Types.Add(newClass);
            // That's a Class
            newClass.IsStruct = true;
            writeTrivia(newClass, context);
            //
            if (context.Modifiers == null)
            {
                newClass.TypeAttributes = System.Reflection.TypeAttributes.Public;
            }
            else
            {
                // Modifiers
                foreach (var t in context.Modifiers._Tokens)
                {
                    switch (t.Type)
                    {
                    case XSharpParser.PARTIAL:
                        newClass.IsPartial = true;
                        break;

                    case XSharpParser.SEALED:
                        newClass.Attributes |= MemberAttributes.Final;
                        break;

                    case XSharpParser.ABSTRACT:
                        newClass.Attributes |= MemberAttributes.Abstract;
                        break;

                    case XSharpParser.INTERNAL:
                        newClass.Attributes |= MemberAttributes.Assembly;
                        break;

                    case XSharpParser.PUBLIC:
                        newClass.Attributes |= MemberAttributes.Public;
                        break;
                    }
                }
                // What Visibility ?
                newClass.TypeAttributes = ContextToStructureModifiers(context.Modifiers);
            }

            // IMPLEMENTS ?
            if ((context._Implements != null) && (context._Implements.Count > 0))
            {
                foreach (var interfaces in context._Implements)
                {
                    var ifName = interfaces.GetCleanText();
                    newClass.BaseTypes.Add(BuildTypeReference(ifName));
                }
            }
            //
            // Add the variables from this class to the Members collection and lookup table
            ClearMembers();
            if (FieldList.ContainsKey(context))
            {
                var fields = FieldList[context];
                foreach (var f in fields)
                {
                    newClass.Members.Add(f);
                    addClassMember(new XMemberType(f.Name, MemberTypes.Field, false, findType(f.Type.BaseType), f.Type.BaseType));
                }
            }
            var token      = context.Stop as XSharpToken;
            var tokenIndex = token.OriginalTokenIndex;
            var line       = token.Line;

            for (;;)
            {
                if (tokenIndex >= _tokens.Count - 1)
                {
                    break;
                }
                tokenIndex++;
                if (_tokens[tokenIndex].Line > line)
                {
                    break;
                }
            }
        }
Beispiel #5
0
 public override void ExitStructure_([NotNull] XSharpParser.Structure_Context context)
 {
     closeType(context._Members);
     base.ExitStructure_(context);
 }
Beispiel #6
0
 public override void ExitStructure_([NotNull] XSharpParser.Structure_Context context)
 {
     TagRegion(context, context.ChildCount - 2);
 }
 public override void ExitStructure_([NotNull] XSharpParser.Structure_Context context)
 {
     popType();
 }