亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? antbuilder.java

?? Groovy動態語言 運行在JVM中的動態語言 可以方便的處理業務邏輯變化大的業務
?? JAVA
字號:
/*
 $Id: AntBuilder.java 4077 2006-09-26 19:51:42Z glaforge $

 Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.

 Redistribution and use of this software and associated documentation
 ("Software"), with or without modification, are permitted provided
 that the following conditions are met:

 1. Redistributions of source code must retain copyright
    statements and notices.  Redistributions must also contain a
    copy of this document.

 2. Redistributions in binary form must reproduce the
    above copyright notice, this list of conditions and the
    following disclaimer in the documentation and/or other
    materials provided with the distribution.

 3. The name "groovy" must not be used to endorse or promote
    products derived from this Software without prior written
    permission of The Codehaus.  For written permission,
    please contact info@codehaus.org.

 4. Products derived from this Software may not be called "groovy"
    nor may "groovy" appear in their names without prior written
    permission of The Codehaus. "groovy" is a registered
    trademark of The Codehaus.

 5. Due credit should be given to The Codehaus -
    http://groovy.codehaus.org/

 THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
 ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
 NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
 THE CODEHAUS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 OF THE POSSIBILITY OF SUCH DAMAGE.

 */
package groovy.util;


import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.tools.ant.BuildLogger;
import org.apache.tools.ant.NoBannerLogger;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.RuntimeConfigurable;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.UnknownElement;
import org.apache.tools.ant.helper.AntXMLContext;
import org.apache.tools.ant.helper.ProjectHelper2;
import org.codehaus.groovy.ant.FileScanner;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.AttributesImpl;
import groovy.xml.QName;

/**
 * Allows Ant tasks to be used with GroovyMarkup 
 * 
 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>, changes by Dierk Koenig (dk)
 * @version $Revision: 4077 $
 */
public class AntBuilder extends BuilderSupport {

    private static final Class[] addTaskParamTypes = { String.class };

    private Logger log = Logger.getLogger(getClass().getName());
    private Project project;
    private final AntXMLContext antXmlContext;
    private final ProjectHelper2.ElementHandler antElementHandler = new ProjectHelper2.ElementHandler();
    private final Target collectorTarget;
    private Object lastCompletedNode;



    public AntBuilder() {
        this(createProject());
    }

    public AntBuilder(final Project project) {
        this(project, new Target());
    }

    public AntBuilder(final Project project, final Target owningTarget) {
        this.project = project;

        collectorTarget = owningTarget;
        
        antXmlContext = new AntXMLContext(project);
        collectorTarget.setProject(project);
        antXmlContext.setCurrentTarget(collectorTarget);
        antXmlContext.setLocator(new AntBuilderLocator());
        
        // FileScanner is a Groovy hack (utility?)
        project.addDataTypeDefinition("fileScanner", FileScanner.class);
    }

    // dk: introduced for convenience in subclasses
    protected Project getProject() {
        return project;
    }

    /**
     * @return Factory method to create new Project instances
     */
    protected static Project createProject() {
        Project project = new Project();
        BuildLogger logger = new NoBannerLogger();

        logger.setMessageOutputLevel(org.apache.tools.ant.Project.MSG_INFO);
        logger.setOutputPrintStream(System.out);
        logger.setErrorPrintStream(System.err);

        project.addBuildListener(logger);

        project.init();
        project.getBaseDir();
        return project;
    }

    protected void setParent(Object parent, Object child) {
    }

    
    /**
     * We don't want to return the node as created in {@link #createNode(Object, Map, Object)}
     * but the one made ready by {@link #nodeCompleted(Object, Object)}
     * @see groovy.util.BuilderSupport#doInvokeMethod(java.lang.String, java.lang.Object, java.lang.Object)
     */
    protected Object doInvokeMethod(String methodName, Object name, Object args) {
    	super.doInvokeMethod(methodName, name, args);
    	

    	// return the completed node
    	return lastCompletedNode;
    }

    /**
     * Determines, when the ANT Task that is represented by the "node" should perform.
     * Node must be an ANT Task or no "perform" is called.
     * If node is an ANT Task, it performs right after complete contstruction.
     * If node is nested in a TaskContainer, calling "perform" is delegated to that
     * TaskContainer.
     * @param parent note: null when node is root
     * @param node the node that now has all its children applied
     */
    protected void nodeCompleted(final Object parent, final Object node) {

    	antElementHandler.onEndElement(null, null, antXmlContext);

    	lastCompletedNode = node;
        if (parent != null) {
            log.finest("parent is not null: no perform on nodeCompleted");
            return; // parent will care about when children perform
        }
        
        // as in Target.execute()
        if (node instanceof Task) {
            Object task = node;
            // "Unwrap" the UnknownElement to return the real task to the calling code
            if (node instanceof UnknownElement) {
            	final UnknownElement unknownElement = (UnknownElement) node;
            	unknownElement.maybeConfigure();
                task = unknownElement.getRealThing();
            }
            
            lastCompletedNode = task;
            // UnknownElement may wrap everything: task, path, ...
            if (task instanceof Task) {
            	((Task) task).perform();
            }
        }
        else {
            final RuntimeConfigurable r = (RuntimeConfigurable) node;
            r.maybeConfigure(project);
        }
    }

    protected Object createNode(Object tagName) {
        return createNode(tagName, Collections.EMPTY_MAP);
    }

    protected Object createNode(Object name, Object value) {
        Object task = createNode(name);
        setText(task, value.toString());
        return task;
    }

    protected Object createNode(Object name, Map attributes, Object value) {
        Object task = createNode(name, attributes);
        setText(task, value.toString());
        return task;
    }
    
    /**
     * Builds an {@link Attributes} from a {@link Map}
     * @param attributes the attributes to wrap
     */
    protected static Attributes buildAttributes(final Map attributes) {
    	final AttributesImpl attr = new AttributesImpl();
    	for (final Iterator iter=attributes.entrySet().iterator(); iter.hasNext(); ) {
    		final Map.Entry entry = (Map.Entry) iter.next();
    		final String attributeName = (String) entry.getKey();
    		final String attributeValue = String.valueOf(entry.getValue());
    		attr.addAttribute(null, attributeName, attributeName, "CDATA", attributeValue);
    	}
    	return attr;
    }

    protected Object createNode(final Object name, final Map attributes) {

        String tagName = name.toString();
        String ns = "";

        if(name instanceof QName) {
            QName q = (QName)name;
            tagName = q.getLocalPart();
            ns = q.getNamespaceURI();
        }

        try
		{
			antElementHandler.onStartElement(ns, tagName, tagName, buildAttributes(attributes), antXmlContext);
		}
		catch (final SAXParseException e)
		{
            log.log(Level.SEVERE, "Caught: " + e, e);
		}
    	
		final RuntimeConfigurable wrapper = (RuntimeConfigurable) antXmlContext.getWrapperStack().lastElement();
    	return wrapper.getProxy();
    }

    protected void setText(Object task, String text) {
    	final char[] characters = text.toCharArray();
        try {
          	antElementHandler.characters(characters, 0, characters.length, antXmlContext);
        }
        catch (final SAXParseException e) {
            log.log(Level.WARNING, "SetText failed: " + task + ". Reason: " + e, e);
        }
    }

    public Project getAntProject() {
        return project;
    }
}

/**
 * Would be nice to retrieve location information (from AST?).
 * In a first time, without info
 */
class AntBuilderLocator implements Locator {
	public int getColumnNumber()
	{
		return 0;
	}
	public int getLineNumber()
	{
		return 0;
	}
	public String getPublicId()
	{
		return "";
	}
	public String getSystemId()
	{
		return "";
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国午夜理伦三级不卡影院| 91浏览器打开| 91国偷自产一区二区使用方法| 欧美日本在线看| 国产精品第四页| 久热成人在线视频| 欧美三级在线看| 欧美国产成人在线| 久久av老司机精品网站导航| 色94色欧美sute亚洲线路一久 | 一本一道波多野结衣一区二区| 91精品国产综合久久久久| 亚洲四区在线观看| 国产**成人网毛片九色| 欧美一区二区视频免费观看| 亚洲裸体在线观看| 国产91富婆露脸刺激对白| 欧美岛国在线观看| 三级久久三级久久久| 色呦呦一区二区三区| 国产精品视频你懂的| 国产精品亚洲一区二区三区在线 | 99re这里只有精品视频首页| 欧美精品一区二区三| 日本色综合中文字幕| 欧美日韩精品一区视频| 亚洲一区二区三区影院| 91成人免费网站| 亚洲欧洲综合另类| 色综合欧美在线| 亚洲欧美日韩久久| 色综合咪咪久久| 亚洲人成在线观看一区二区| 99麻豆久久久国产精品免费| 亚洲视频一区在线| 国产不卡在线一区| 国产精品乱码人人做人人爱 | 97精品视频在线观看自产线路二| 国产日本欧美一区二区| 国产精品456露脸| 欧美极品另类videosde| kk眼镜猥琐国模调教系列一区二区| 国产亚洲欧美日韩日本| 成人做爰69片免费看网站| 国产精品视频看| 99v久久综合狠狠综合久久| 亚洲欧美激情视频在线观看一区二区三区| 成人18精品视频| 亚洲精品老司机| 欧美日韩一区中文字幕| 免费久久精品视频| 精品国产露脸精彩对白| 成人美女视频在线看| 亚洲人成伊人成综合网小说| 欧美色图第一页| 美女一区二区久久| 国产精品午夜久久| 91精品福利视频| 美腿丝袜亚洲综合| 欧美激情一二三区| 欧美性大战久久久久久久蜜臀| 免费成人在线影院| 国产精品视频在线看| 欧美日韩免费电影| 国产一区二区美女诱惑| 亚洲精品免费在线| 精品国精品自拍自在线| 99久久伊人久久99| 日韩一区精品字幕| 中文字幕欧美激情一区| 欧美色倩网站大全免费| 国产精品伊人色| 亚洲国产日日夜夜| 国产亚洲精久久久久久| 欧美亚洲国产一区在线观看网站| 久久er99热精品一区二区| 中文字幕一区二区三区精华液 | 国产福利一区二区| 久久99最新地址| 1024成人网| 日韩女优av电影| 一本色道久久综合亚洲91| 久久成人18免费观看| 亚洲综合在线第一页| 久久久久久99久久久精品网站| 91成人免费电影| 国产成人日日夜夜| 蜜臀91精品一区二区三区| 亚洲欧美欧美一区二区三区| 久久久亚洲国产美女国产盗摄 | 在线这里只有精品| 国产美女久久久久| 日韩av成人高清| 亚洲综合色噜噜狠狠| 国产精品美女久久久久久久网站| 欧美一区午夜精品| 欧美三日本三级三级在线播放| 国产成a人无v码亚洲福利| 久久se精品一区精品二区| 亚洲成av人片| 一区二区成人在线视频| 国产精品乱码一区二三区小蝌蚪| 26uuuu精品一区二区| 69堂成人精品免费视频| 欧美性一级生活| 91福利在线观看| 91麻豆国产在线观看| www.激情成人| 国产91精品精华液一区二区三区| 国产真实乱对白精彩久久| 免费视频一区二区| 青青草原综合久久大伊人精品优势| 亚洲国产欧美一区二区三区丁香婷| 成人欧美一区二区三区小说| 国产欧美视频在线观看| 国产色一区二区| 国产亚洲精品7777| 中文av一区特黄| 亚洲视频精选在线| 亚洲你懂的在线视频| 亚洲v日本v欧美v久久精品| 国产精品久久久久久久久久久免费看 | 成人国产亚洲欧美成人综合网| 国产精品中文字幕一区二区三区| 六月丁香婷婷久久| 美腿丝袜在线亚洲一区| 国产一区免费电影| 成人精品免费看| 91麻豆swag| 欧美婷婷六月丁香综合色| 欧美精品日日鲁夜夜添| 日韩亚洲欧美一区二区三区| 欧美成人vps| 国产人久久人人人人爽| 国产精品久久777777| 亚洲精品久久久久久国产精华液| 午夜久久久久久| 加勒比av一区二区| 99久久久久久| 9191成人精品久久| 久久蜜臀精品av| 中文字幕一区二区日韩精品绯色| 亚洲品质自拍视频网站| 五月天精品一区二区三区| 久久99最新地址| 99精品视频在线观看| 欧美日韩精品免费观看视频| 欧美大尺度电影在线| 国产片一区二区| 亚洲成人在线观看视频| 狠狠色丁香婷婷综合久久片| www.66久久| 日韩午夜三级在线| 中文字幕制服丝袜一区二区三区 | 在线影视一区二区三区| 欧美一区日本一区韩国一区| 国产区在线观看成人精品| 一区二区三区日本| 韩国三级电影一区二区| 在线中文字幕一区二区| 精品国产一区二区精华| 亚洲综合激情小说| 国产成人午夜精品影院观看视频| 欧美日韩免费不卡视频一区二区三区| 亚洲精品一区二区三区蜜桃下载| 亚洲免费观看在线观看| 久久国产剧场电影| 欧美三电影在线| 国产精品拍天天在线| 美国十次综合导航| 色爱区综合激月婷婷| 国产午夜精品一区二区三区嫩草| 亚洲国产精品久久人人爱蜜臀| 国产99久久久国产精品潘金网站| 91精品国产aⅴ一区二区| 日韩一区中文字幕| 国产成人在线免费观看| 欧美一区二区三区白人| 亚洲综合一区二区| 色诱亚洲精品久久久久久| 国产欧美综合在线观看第十页 | 一区二区三区四区五区视频在线观看 | 日韩一区二区在线观看视频 | 日本精品免费观看高清观看| 国产亚洲精品精华液| 精油按摩中文字幕久久| 91精品麻豆日日躁夜夜躁| 亚洲日本电影在线| www.爱久久.com| 国产精品乱码一区二区三区软件| 韩国av一区二区三区四区| 日韩免费观看2025年上映的电影| 亚洲成人一区在线| 欧美日韩你懂得| 亚洲一区二区三区美女| 国产盗摄女厕一区二区三区| 久久国内精品自在自线400部| 欧美日韩在线亚洲一区蜜芽| 亚洲永久精品国产| 欧洲一区在线电影|