You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Jochen Theodorou (JIRA)" <ji...@apache.org> on 2017/08/07 01:01:40 UTC

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

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

Jochen Theodorou resolved GROOVY-8273.
--------------------------------------
    Resolution: Not A Problem
      Assignee: Jochen Theodorou

Please use [] instead for the annotation. This is a known limitation of the 2.4 parser and should be no issue in the new parser anymore

> 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
>            Assignee: Jochen Theodorou
>
> 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)