All Downloads are FREE. Search and download functionalities are using the official Maven repository.

protoj.lang.command.AjcCommand Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2009 Ashley Williams
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you
 * may not use this file except in compliance with the License. You may
 * obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
package protoj.lang.command;

import java.util.List;

import joptsimple.OptionSet;
import joptsimple.OptionSpec;
import protoj.lang.Command;
import protoj.lang.CommandStore;
import protoj.lang.StandardProject;

/**
 * Compiles the project code using the ajc compiler. Typically this command is
 * invoked from inside a shell script as an alternative to invoking the ajc
 * compiler in an os-specific way. For example the logic that detects whether or
 * not the source directory exists would be hard to replicate across batch files
 * and bash scripts.
 * 

* In order to configure the underlying ant task, beans introspection is used on * the protoj.util.AspectjCompileTask parent. First an example of an ajc command * that configures the ant source property and includes filter using the protoj * -opt option that accepts name=value pairs: * *

 * "ajc -opt compileTask.source=1.5 -opt dirSet.includes=org/foo/core"
 * 
* * That parent contains two properties called compileTask and dirSet that are * instances of org.aspectj.tools.ant.taskdefs.AjcTask and * org.apache.tools.ant.types.DirSet respectively and so consult the ant and * aspectj reference to determine the available set of properties that are * available for configuration. * * @author Ashley Williams * */ public final class AjcCommand { private final class Body implements Runnable { public void run() { OptionSet options = delegate.getOptions(); if (options.has(optOption)) { List compilerOptions = options.valuesOf(optOption); parent.getCompileFeature().compileAjc(compilerOptions); } } } /** * Provides the basic command functionality. */ private Command delegate; /** * The parent of this command. */ private final StandardProject parent; private OptionSpec optOption; public AjcCommand(StandardProject parent) { this.parent = parent; CommandStore store = parent.getCommandStore(); delegate = store.addCommand("ajc", "16m", new Body()); delegate.initHelpResource("/protoj-common/language/english/ajc.txt"); delegate.initBootstrapCurrentVm(); optOption = delegate.getParser().accepts(getOptOption()) .withRequiredArg(); } public String getOptOption() { return "opt"; } public Command getDelegate() { return delegate; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy