Ejemplo n.º 1
0
        private bool handleArguments(String[] arguments)
        {
            parameters = new CompilerParameters();
            int i = 0;

            while (i < sizeof(arguments) && (arguments[i].startsWith("-")))
            {
                int idx       = arguments[i].indexOf(':');
                var argument  = arguments[i].substring(1);
                var parameter = "";
                if (idx > 0)
                {
                    argument  = arguments[i].substring(1, idx);
                    parameter = arguments[i].substring(idx + 1);
                }
                var option = Options[argument];
                if (option == null)
                {
                    System.out.println("Error: Unknown option: " + argument);
                    return(false);
                }
                switch (option)
                {
                case Annotatedlibs: {
                    while (parameter.length() > 0)
                    {
                        idx = parameter.indexOf(';');
                        String file;
                        if (idx >= 0)
                        {
                            file      = parameter.substring(0, idx);
                            parameter = parameter.substring(idx + 1);
                        }
                        else
                        {
                            file      = parameter;
                            parameter = "";
                        }
                        if (!new File(file).exists())
                        {
                            System.out.println(MISSING_FILE + file);
                            return(false);
                        }
                        parameters.AnnotatedLibraryPaths.add(file);
                    }
                    break;
                }

                case Classpath: {
                    while (parameter.length() > 0)
                    {
                        idx = parameter.indexOf(';');
                        String file;
                        if (idx >= 0)
                        {
                            file      = parameter.substring(0, idx);
                            parameter = parameter.substring(idx + 1);
                        }
                        else
                        {
                            file      = parameter;
                            parameter = "";
                        }
                        if (!new File(file).exists())
                        {
                            System.out.println(MISSING_FILE + file);
                            return(false);
                        }
                        parameters.ClassPath.add(file);
                    }
                    break;
                }

                case Define: {
                    while (parameter.length() > 0)
                    {
                        idx = parameter.indexOf(';');
                        if (idx >= 0)
                        {
                            parameters.getSymbols().add(parameter.substring(0, idx));
                            parameter = parameter.substring(idx + 1);
                        }
                        else
                        {
                            parameters.getSymbols().add(parameter);
                            parameter = "";
                        }
                    }
                    break;
                }

                case Doc: {
                    parameters.DocumentationPath = parameter;
                    break;
                }

                case Manifest: {
                    manifestPath = parameter;
                    if (!new File(manifestPath).exists())
                    {
                        System.out.println(MISSING_FILE + manifestPath);
                        return(false);
                    }
                    break;
                }

                case Out: {
                    outputPath = parameter;
                    break;
                }

                case Resources: {
                    resourcesPath = parameter;
                    break;
                }

                case Help: {
                    System.out.println("    Cnatural Compiler Options");
                    System.out.println();
                    foreach (var opt in OptionInfos)
                    {
                        System.out.print("-");
                        System.out.print(opt.Name);
                        if (opt.Arguments != null)
                        {
                            System.out.print(":");
                            System.out.print(opt.Arguments);
                        }
                        System.out.println();
                        System.out.print("\t");
                        System.out.print(opt.Description);
                        if (opt.ShortForm != null)
                        {
                            System.out.print(" (Short form: -");
                            System.out.print(opt.ShortForm);
                            System.out.print(")");
                        }
                        System.out.println();
                        System.out.println();
                    }
                    break;
                }
                }
                i++;
            }
            while (i < sizeof(arguments))
            {
                File file = new File(arguments[i]);
                if (!file.exists())
                {
                    System.out.println(MISSING_FILE + arguments[i]);
                    return(false);
                }
                if (file.isDirectory())
                {
                    System.out.println("Error: Argument is a directory: " + arguments[i]);
                    return(false);
                }
                sourceFiles.add(file);
                i++;
            }
            if (sourceFiles.size() == 0)
            {
                System.out.println("Error: No input file");
                return(false);
            }
            if (outputPath == null)
            {
                var absolutePath = sourceFiles[0].getAbsolutePath();
                var dir          = PathHelper.getDirectoryName(absolutePath);
                var filename     = PathHelper.getFileNameWithoutExtension((absolutePath.endsWith(".cs"))? PathHelper.getFileNameWithoutExtension(absolutePath) : absolutePath);
                outputPath = PathHelper.combine(dir, filename + ".jar");
            }
            System.out.println("Output: " + outputPath);
            return(true);
        }