/*
 * Copyright 2003-2013 the original author or authors.
 *
 * 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 groovy.lang;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Used to exclude an indirectly referenced artifact (a transitive dependency) from the classpath.
 * <p>
 * Examples:<br>
 * {@code @GrabExclude(group='mysql', module='mysql-connector-java')}<br>
 * {@code @GrabExclude('mysql:mysql-connector-java')}<br>
 * <p>
 * Further information about customising grape behavior can be found on the Grape documentation page:
 * <a href="http://groovy.codehaus.org/Grape">http://groovy.codehaus.org/Grape</a>.
 */
@Retention(RetentionPolicy.SOURCE)
@Target({
        ElementType.CONSTRUCTOR,
        ElementType.FIELD,
        ElementType.LOCAL_VARIABLE,
        ElementType.METHOD,
        ElementType.PARAMETER,
        ElementType.TYPE})
public @interface GrabExclude {
    
    /**
     * The organisation or group, e.g.: "org.apache.ant"; required unless the default value compact form is used.
     */
    String group();

    /**
     * The module or artifact, e.g.: "ant-junit"; required unless the default value compact form is used.
     */
    String module();
    
    /**
     * Allows to specify the group (organisation) and the module (artifact) in a two compact convenience formats,
     * e.g.: <code>@GrabExclude('org.apache.ant:ant-junit')</code> or <code>@GrabExclude('org.apache.ant#ant-junit')</code>
     */
    String value() default "";
}
@@ -1010,32 +1010,53 @@
 connector-java')
+ // group/module form
 %7D%3Cbr%3E%0D%0A * %7B@code
@@ -1098,16 +1098,32 @@
 r-java')
+ // compact form
 %7D%3Cbr%3E%0D%0A 
@@ -1590,20 +1590,16 @@
 lude %7B%0D%0A
-    
 %0D%0A    /*
@@ -1675,38 +1675,24 @@
  unless the 
-default value 
 compact form
@@ -1729,16 +1729,27 @@
  group()
+ default %22%22
 ;%0D%0A%0D%0A   
@@ -1828,22 +1828,8 @@
 the 
-default value 
 comp
@@ -1879,15 +1879,22 @@
 le()
-;%0D%0A    
+ default %22%22;%0D%0A
 %0D%0A  

revert GROOVY-6424 and make group and module optional instead