private int CountClassName(SourceCode aSourceCode)
        {
            int result = 0;

            ClassDefinitionComp classDef = new ClassDefinitionComp();

            int pos = 1;
            foreach(String line in aSourceCode.GetLines())
            {
                if (classDef.Identify(aSourceCode, line, pos))
                    result++;
                pos++;
            }
            return result;
        }
        private void RunCompile()
        {
            if (displayProgress)
                Console.WriteLine("Start compiling... File: {0}", this.sourceCode.GetFileName());

            int pos = 1;

            foreach (String currentSourceCodeLine in this.sourceCode.GetLines())
            {
                TargetCodeResult targetCode = new TargetCodeResult(currentSourceCodeLine);

                // TODO: For now we list the commands here, much get a better idea to handle (??) load it from a list (??)

                ICommand usingDirective = new UsingDirectiveComp();
                ICommand namespaceComp = new NamespaceComp();
                ICommand classDef = new ClassDefinitionComp();
                ICommand openStatementBlock = new OpenStatementBlockComp();
                ICommand mainMethod = new MainMethodComp();
                ICommand methodDef = new MethodDefinitionComp();
                ICommand closeStatementBlock = new CloseStatementBlockComp();
                ICommand keywords = new KeywordsComp();
                ICommand autoProperty = new AutoPropertiesComp();

                if (usingDirective.Identify(this.sourceCode, currentSourceCodeLine, pos))
                    targetCode = usingDirective.Compile(this.sourceCode, currentSourceCodeLine, pos);

                if (namespaceComp.Identify(this.sourceCode, targetCode.GetCurrentCode(), pos))
                    targetCode = namespaceComp.Compile(this.sourceCode, targetCode.GetCurrentCode(), pos);

                if (classDef.Identify(this.sourceCode, targetCode.GetCurrentCode(), pos))
                    targetCode = classDef.Compile(this.sourceCode, targetCode.GetCurrentCode(), pos);

                if (openStatementBlock.Identify(this.sourceCode, targetCode.GetCurrentCode(), pos))
                    targetCode = openStatementBlock.Compile(this.sourceCode, targetCode.GetCurrentCode(), pos);

                if (mainMethod.Identify(this.sourceCode, targetCode.GetCurrentCode(), pos))
                    targetCode = mainMethod.Compile(this.sourceCode, targetCode.GetCurrentCode(), pos);

                if (methodDef.Identify(this.sourceCode, targetCode.GetCurrentCode(), pos))
                    targetCode = methodDef.Compile(this.sourceCode, targetCode.GetCurrentCode(), pos);

                if (closeStatementBlock.Identify(this.sourceCode, targetCode.GetCurrentCode(), pos))
                    targetCode = closeStatementBlock.Compile(this.sourceCode, targetCode.GetCurrentCode(), pos);

                if (keywords.Identify(this.sourceCode, targetCode.GetCurrentCode(), pos))
                    targetCode = keywords.Compile(this.sourceCode, targetCode.GetCurrentCode(), pos);

                if (autoProperty.Identify(this.sourceCode, targetCode.GetCurrentCode(), pos))
                    targetCode = autoProperty.Compile(this.sourceCode, targetCode.GetCurrentCode(), pos);

                // TODO: Add additional commands here

                if (!targetCode.Success)
                    this.errors.Add(targetCode.ErrorMessage);

                if (UnitTestMode)
                    this.allCode.Add(targetCode.GetCurrentCode());

                if (writeJavaCode && targetCode.IsValidCode())
                    WriteJavaLine(targetCode);

                pos++;
            }
        }