public override object VisitClassDeclaration(UHeaderParser.ClassDeclarationContext context) { if (_ignoreOfPragma) { return(null); } var namespaceBaseClass = _currentClass; _currentClass = Get(context.type(), n => new Class(n)); var isStructReal = context.classOrStruct().GetText() == "struct"; _currentClass.SourceFile = _currentFile; _currentClass.SourceLine = context.Start.Line; _currentClass.IsImplemented = true; _currentClass.IsTemplate = context.FoundChild <UHeaderParser.TemplateDefineContext>(); _currentClass.IsFinal = context.FoundChild <UHeaderParser.IsFinalContext>(); _currentClass.UMeta = _currentUMeta ?? _currentClass.UMeta; _currentClass.Description = _currentComment; switch (_currentClass.Name.First()) { case 'U': _currentClass.IsStructure = false; break; case 'F': _currentClass.IsStructure = true; break; default: _currentClass.IsStructure = isStructReal; break; } _accessModifier = isStructReal ? AccessModifier.Public : AccessModifier.Private; _ignoreOfAccessModifier = _accessModifier == AccessModifier.Private; var parentClassName = context.Child <UHeaderParser.ClassParentListContext>()?.type(); if (parentClassName != null) { _currentClass.BaseClass = Get(parentClassName, n => new Class(n)); } _currentUMeta = null; _currentComment = ""; VisitClassBody(context.Child <UHeaderParser.ClassBodyContext>()); _currentClass.NamespaceBaseType = namespaceBaseClass; _currentClass = namespaceBaseClass; return(null); }
/// <summary> /// Visit a parse tree produced by <see cref="UHeaderParser.classDeclaration"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitClassDeclaration([NotNull] UHeaderParser.ClassDeclarationContext context) { return(VisitChildren(context)); }