예제 #1
0
        public void Enter_ClassDefinition(Class_definitionContext context)
        {
            var id = context.identifier();

            _currentClassName = _tokenStream.GetText(id.Start, id.Stop);

            var classRuleAttr = ValidationRuleProvider <ClassNameValidationAttribute>(nameof(Enter_ClassDefinition)) as ClassNameValidationAttribute;

            if (classRuleAttr != null)
            {
                var nameRuleError = classRuleAttr.Validate(_currentNamespace, _currentClassName, string.Empty, string.Empty, string.Empty);
                if (nameRuleError != null)
                {
                    _nameRuleErrorsList.Add(nameRuleError);
                }
            }

            //var match = Regex.Match(_currentClassName, RegexConstants.PascalCaseClassMethodRegex);
            //if (match.Length < _currentClassName.Length)
            //{
            //    _nameRuleErrorsList.Add(new NameRuleError(NameRuleViolations.ClassNameRuleViolation, _currentNamespace, _currentClassName, string.Empty, string.Empty));
            //}

            var tpcc = context.type_parameter_constraints_clauses();
            var tpl  = context.type_parameter_list();

            if (tpl != null)
            {
                var gen = _tokenStream.GetText(tpl.Start, tpl.Stop);
            }

            if (context.children.Count >= 4)
            {
                //Class has Implemented Interfaces
                Class_baseContext interfaceImpl = (Class_baseContext)context.children.FirstOrDefault((x) => x.GetType() == typeof(Class_baseContext));
                if (interfaceImpl?.Start?.Text == ":")
                {
                    //This implements one or multiple interfaces
                    _classAlreadyImplementsInterface = true;
                }
            }

            if (_classAlreadyImplementsInterface)
            {
                return;
            }
            //var parent = context.Parent as Common_member_declarationContext;
            //var accessMod = ts.GetText(parent.Start, parent.Start);
            var interfaceName         = string.Format("{0}{1}", "I", _currentClassName);
            var compiledInterfaceName = string.Format("public interface {0}", interfaceName);

            _interfaceDefinitionBuilder.AppendLine();
            _interfaceDefinitionBuilder.Append(compiledInterfaceName);
            _interfaceDefinitionBuilder.AppendLine();
            _interfaceDefinitionBuilder.Append("{");
        }
 public override object VisitClass_base([NotNull] Class_baseContext context)
 {
     return(base.VisitClass_base(context));
 }