You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Silvio Assuncao (JIRA)" <ji...@apache.org> on 2017/07/31 13:50:00 UTC

[jira] [Updated] (GROOVY-8273) JavaAwareCompilationUnit with array

     [ https://issues.apache.org/jira/browse/GROOVY-8273?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Silvio Assuncao updated GROOVY-8273:
------------------------------------
    Description: 
I have the generated java class below with Array, when I try compile using JavaAwareCompilationUnit I receive the error:

*Error*
{code:java}
Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
br/com/me/geodata/message/City.java: 33: unexpected token: id @ line 33, column 5.org.codehaus.groovy.syntax.SyntaxException: unexpected token: id @ line 33, column 5.
	at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:143)
	at org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(AntlrParserPlugin.java:111)
{code}

Generated class City.java
{code:java}

package br.com.me.geodata.message;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;


/**
 * <p>Java class for City complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="City"&gt;
 *   &lt;complexContent&gt;
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
 *       &lt;sequence&gt;
 *         &lt;element name="id" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="name" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="state" type="{http://message.geodata.me.com.br/}State" minOccurs="0"/&gt;
 *         &lt;element name="version" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/&gt;
 *       &lt;/sequence&gt;
 *     &lt;/restriction&gt;
 *   &lt;/complexContent&gt;
 * &lt;/complexType&gt;
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "City", propOrder = {
    "id",
    "name",
    "state",
    "version"
})
public class City {

    protected String id;
    protected String name;
    protected State state;
    protected Integer version;

    /**
     * Gets the value of the id property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getId() {
        return id;
    }

    /**
     * Sets the value of the id property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setId(String value) {
        this.id = value;
    }

    /**
     * Gets the value of the name property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getName() {
        return name;
    }

    /**
     * Sets the value of the name property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setName(String value) {
        this.name = value;
    }

    /**
     * Gets the value of the state property.
     * 
     * @return
     *     possible object is
     *     {@link State }
     *     
     */
    public State getState() {
        return state;
    }

    /**
     * Sets the value of the state property.
     * 
     * @param value
     *     allowed object is
     *     {@link State }
     *     
     */
    public void setState(State value) {
        this.state = value;
    }

    /**
     * Gets the value of the version property.
     * 
     * @return
     *     possible object is
     *     {@link Integer }
     *     
     */
    public Integer getVersion() {
        return version;
    }

    /**
     * Sets the value of the version property.
     * 
     * @param value
     *     allowed object is
     *     {@link Integer }
     *     
     */
    public void setVersion(Integer value) {
        this.version = value;
    }

}
{code}

*My method compilation*
{code:java}
    @Override
    public List<CompiledCode> compile(DynamicClassLoader classLoader, List<SourceCode> sourceCodes) throws CantCompileException {
        File tempDir = createTempDir();
        try {
            CompilerConfiguration configuration = new CompilerConfiguration();
            configuration.setDebug(true);
            configuration.setTargetBytecode(CompilerConfiguration.JDK8);

            Map<String, Object> compilationOptions = new HashMap<>();
            compilationOptions.put("jointCompilation", true);
            compilationOptions.put("stubDir", tempDir);

            configuration.setJointCompilationOptions(compilationOptions);

            JavaAwareCompilationUnit javaCompilerUnit = new JavaAwareCompilationUnit(configuration, classLoader);

            for (SourceCode sourceCode : sourceCodes) {
                javaCompilerUnit.addSource(sourceCode.getCanonicalPath(), new ByteArrayInputStream(sourceCode.getCode()));
            }

            javaCompilerUnit.setCompilerFactory(new JavacCompilerFactory());
            javaCompilerUnit.compile();

            List<GroovyClass> groovyClassList = javaCompilerUnit.getClasses();
            return groovyClassList.stream()
                    .map(d -> new CompiledCode(d.getName(), null, d.getBytes()))
                    .collect(Collectors.toList());
        } finally {
            tempDir.delete();
        }
   }
{code}





  was:
I have the generated java class below with Array, when I try compile using JavaAwareCompilationUnit I receive the error:

{code:java}
Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
br/com/me/geodata/message/City.java: 33: unexpected token: id @ line 33, column 5.org.codehaus.groovy.syntax.SyntaxException: unexpected token: id @ line 33, column 5.
	at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:143)
	at org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(AntlrParserPlugin.java:111)
{code}

City.java
{code:java}

package br.com.me.geodata.message;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;


/**
 * <p>Java class for City complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="City"&gt;
 *   &lt;complexContent&gt;
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
 *       &lt;sequence&gt;
 *         &lt;element name="id" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="name" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
 *         &lt;element name="state" type="{http://message.geodata.me.com.br/}State" minOccurs="0"/&gt;
 *         &lt;element name="version" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/&gt;
 *       &lt;/sequence&gt;
 *     &lt;/restriction&gt;
 *   &lt;/complexContent&gt;
 * &lt;/complexType&gt;
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "City", propOrder = {
    "id",
    "name",
    "state",
    "version"
})
public class City {

    protected String id;
    protected String name;
    protected State state;
    protected Integer version;

    /**
     * Gets the value of the id property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getId() {
        return id;
    }

    /**
     * Sets the value of the id property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setId(String value) {
        this.id = value;
    }

    /**
     * Gets the value of the name property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getName() {
        return name;
    }

    /**
     * Sets the value of the name property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setName(String value) {
        this.name = value;
    }

    /**
     * Gets the value of the state property.
     * 
     * @return
     *     possible object is
     *     {@link State }
     *     
     */
    public State getState() {
        return state;
    }

    /**
     * Sets the value of the state property.
     * 
     * @param value
     *     allowed object is
     *     {@link State }
     *     
     */
    public void setState(State value) {
        this.state = value;
    }

    /**
     * Gets the value of the version property.
     * 
     * @return
     *     possible object is
     *     {@link Integer }
     *     
     */
    public Integer getVersion() {
        return version;
    }

    /**
     * Sets the value of the version property.
     * 
     * @param value
     *     allowed object is
     *     {@link Integer }
     *     
     */
    public void setVersion(Integer value) {
        this.version = value;
    }

}
{code}

{code:java}
    @Override
    public List<CompiledCode> compile(DynamicClassLoader classLoader, List<SourceCode> sourceCodes) throws CantCompileException {
        File tempDir = createTempDir();
        try {
            CompilerConfiguration configuration = new CompilerConfiguration();
            configuration.setDebug(true);
            configuration.setTargetBytecode(CompilerConfiguration.JDK8);

            Map<String, Object> compilationOptions = new HashMap<>();
            compilationOptions.put("jointCompilation", true);
            compilationOptions.put("stubDir", tempDir);

            configuration.setJointCompilationOptions(compilationOptions);

            JavaAwareCompilationUnit javaCompilerUnit = new JavaAwareCompilationUnit(configuration, classLoader);

            for (SourceCode sourceCode : sourceCodes) {
                javaCompilerUnit.addSource(sourceCode.getCanonicalPath(), new ByteArrayInputStream(sourceCode.getCode()));
            }

            javaCompilerUnit.setCompilerFactory(new JavacCompilerFactory());
            javaCompilerUnit.compile();

            List<GroovyClass> groovyClassList = javaCompilerUnit.getClasses();
            return groovyClassList.stream()
                    .map(d -> new CompiledCode(d.getName(), null, d.getBytes()))
                    .collect(Collectors.toList());
        } finally {
            tempDir.delete();
        }
   }
{code}






> JavaAwareCompilationUnit with array
> -----------------------------------
>
>                 Key: GROOVY-8273
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8273
>             Project: Groovy
>          Issue Type: Bug
>          Components: groovy-jdk, groovy-runtime
>    Affects Versions: 2.4.7
>            Reporter: Silvio Assuncao
>
> I have the generated java class below with Array, when I try compile using JavaAwareCompilationUnit I receive the error:
> *Error*
> {code:java}
> Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
> br/com/me/geodata/message/City.java: 33: unexpected token: id @ line 33, column 5.org.codehaus.groovy.syntax.SyntaxException: unexpected token: id @ line 33, column 5.
> 	at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:143)
> 	at org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(AntlrParserPlugin.java:111)
> {code}
> Generated class City.java
> {code:java}
> package br.com.me.geodata.message;
> import javax.xml.bind.annotation.XmlAccessType;
> import javax.xml.bind.annotation.XmlAccessorType;
> import javax.xml.bind.annotation.XmlType;
> /**
>  * <p>Java class for City complex type.
>  * 
>  * <p>The following schema fragment specifies the expected content contained within this class.
>  * 
>  * <pre>
>  * &lt;complexType name="City"&gt;
>  *   &lt;complexContent&gt;
>  *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
>  *       &lt;sequence&gt;
>  *         &lt;element name="id" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
>  *         &lt;element name="name" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
>  *         &lt;element name="state" type="{http://message.geodata.me.com.br/}State" minOccurs="0"/&gt;
>  *         &lt;element name="version" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/&gt;
>  *       &lt;/sequence&gt;
>  *     &lt;/restriction&gt;
>  *   &lt;/complexContent&gt;
>  * &lt;/complexType&gt;
>  * </pre>
>  * 
>  * 
>  */
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "City", propOrder = {
>     "id",
>     "name",
>     "state",
>     "version"
> })
> public class City {
>     protected String id;
>     protected String name;
>     protected State state;
>     protected Integer version;
>     /**
>      * Gets the value of the id property.
>      * 
>      * @return
>      *     possible object is
>      *     {@link String }
>      *     
>      */
>     public String getId() {
>         return id;
>     }
>     /**
>      * Sets the value of the id property.
>      * 
>      * @param value
>      *     allowed object is
>      *     {@link String }
>      *     
>      */
>     public void setId(String value) {
>         this.id = value;
>     }
>     /**
>      * Gets the value of the name property.
>      * 
>      * @return
>      *     possible object is
>      *     {@link String }
>      *     
>      */
>     public String getName() {
>         return name;
>     }
>     /**
>      * Sets the value of the name property.
>      * 
>      * @param value
>      *     allowed object is
>      *     {@link String }
>      *     
>      */
>     public void setName(String value) {
>         this.name = value;
>     }
>     /**
>      * Gets the value of the state property.
>      * 
>      * @return
>      *     possible object is
>      *     {@link State }
>      *     
>      */
>     public State getState() {
>         return state;
>     }
>     /**
>      * Sets the value of the state property.
>      * 
>      * @param value
>      *     allowed object is
>      *     {@link State }
>      *     
>      */
>     public void setState(State value) {
>         this.state = value;
>     }
>     /**
>      * Gets the value of the version property.
>      * 
>      * @return
>      *     possible object is
>      *     {@link Integer }
>      *     
>      */
>     public Integer getVersion() {
>         return version;
>     }
>     /**
>      * Sets the value of the version property.
>      * 
>      * @param value
>      *     allowed object is
>      *     {@link Integer }
>      *     
>      */
>     public void setVersion(Integer value) {
>         this.version = value;
>     }
> }
> {code}
> *My method compilation*
> {code:java}
>     @Override
>     public List<CompiledCode> compile(DynamicClassLoader classLoader, List<SourceCode> sourceCodes) throws CantCompileException {
>         File tempDir = createTempDir();
>         try {
>             CompilerConfiguration configuration = new CompilerConfiguration();
>             configuration.setDebug(true);
>             configuration.setTargetBytecode(CompilerConfiguration.JDK8);
>             Map<String, Object> compilationOptions = new HashMap<>();
>             compilationOptions.put("jointCompilation", true);
>             compilationOptions.put("stubDir", tempDir);
>             configuration.setJointCompilationOptions(compilationOptions);
>             JavaAwareCompilationUnit javaCompilerUnit = new JavaAwareCompilationUnit(configuration, classLoader);
>             for (SourceCode sourceCode : sourceCodes) {
>                 javaCompilerUnit.addSource(sourceCode.getCanonicalPath(), new ByteArrayInputStream(sourceCode.getCode()));
>             }
>             javaCompilerUnit.setCompilerFactory(new JavacCompilerFactory());
>             javaCompilerUnit.compile();
>             List<GroovyClass> groovyClassList = javaCompilerUnit.getClasses();
>             return groovyClassList.stream()
>                     .map(d -> new CompiledCode(d.getName(), null, d.getBytes()))
>                     .collect(Collectors.toList());
>         } finally {
>             tempDir.delete();
>         }
>    }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)