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>
> * <complexType name="City">
> * <complexContent>
> * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
> * <sequence>
> * <element name="id" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
> * <element name="name" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
> * <element name="state" type="{http://message.geodata.me.com.br/}State" minOccurs="0"/>
> * <element name="version" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
> * </sequence>
> * </restriction>
> * </complexContent>
> * </complexType>
> * </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)