Jaedabee
Jaedabee

Reputation: 45

Error when updating XText versions for Gradle 6

I am attempting to update an EMF/XCore project to newer versions to get around a versioning roadblock. Currently the repository that houses this project must target Gradle 4 and Bndtools 4.3 because of problems when targeting newer versions. I readily admit that a problem here is my lack of understanding of XText, XCore, and otherwise. Now I find myself on a machine without access to Java 8 which has forced an attempt to update the project settings if at all possible.

The last safe targets for this project were XText 2.16.0 and org.xtext.builder version 1.0.21. The examples I have been able to locate match the settings of this project for the most part.

So now, attempting to run in a Gradle 6.3 environment with OpenJDK 13 (if the Java version is the issue that can be changed)...

Notes

build.gradle:

plugins {
    id 'org.xtext.builder' version '2.0.8'
    id 'java' // Helpful? Doesn't appear so
}

repositories {
   maven() {
      url "${mavenURL}"
   }
}

ext.xtextVersion = "2.21.0"
ext.emfVersion = "2.20.0"

dependencies {
   compile platform("org.eclipse.xtext:xtext-dev-bom:${xtextVersion}")

   xtextLanguages 'org.eclipse.emf:org.eclipse.emf.codegen.ecore.xtext:1.4.0'
   xtextLanguages('org.eclipse.emf:org.eclipse.emf.ecore.xcore:1.12.0') {
      exclude group: 'org.antlr', module: 'antlr-runtime'
   } 
   xtextLanguages "org.eclipse.xtext:org.eclipse.xtext.ecore:${xtextVersion}"
   xtextLanguages "org.eclipse.xtext:org.eclipse.xtext.xbase.lib:${xtextVersion}"

   xtextLanguages 'org.eclipse.emf:org.eclipse.emf.codegen:2.19.0'
   xtextLanguages 'org.eclipse.emf:org.eclipse.emf.codegen.ecore:${emfVersion}'
   xtextLanguages 'org.eclipse.emf:org.eclipse.emf.mwe2.runtime:2.11.2'

   compile "org.eclipse.xtext:org.eclipse.xtext:${xtextVersion}"
   compile "org.eclipse.xtext:org.eclipse.xtext.xbase:${xtextVersion}"
   compile 'org.eclipse.emf:org.eclipse.emf.ecore.xcore.lib:1.4.0'
}

xtext {
    version = "${xtextVersion}"
    languages {
        ecore {
            setup = 'org.eclipse.xtext.ecore.EcoreSupport'
        }
        codegen {
            setup = 'org.eclipse.emf.codegen.ecore.xtext.GenModelSupport'
        }
        xcore {
            setup = 'org.eclipse.emf.ecore.xcore.XcoreStandaloneSetup'
            generator.outlet.producesJava = true
            // Have also tried generator.javaSourceLevel = '1.8'
        }
    }
    sourceSets {
        main {
            srcDir 'model'
            // Move the generated Xcore output to the src directory
            output {
                dir(xtext.languages.xcore.generator.outlet, 'src-gen')
            }
        }
    }
}

Multiple tries have ended up resulting in the following error:

> ./gradlew jar
...

> Task :com.example.project:generateXtext FAILED
ERROR:A generic type in this context must refer to a classifier or a type parameter (file:...file.xcore)
...
> Xtext validation failed, see build log for details.

for a multitude of lines. The XCore file looks something like this

@GenModel(
      complianceLevel="8.0",
      loadInitialization="false",
      modelDirectory="com.example.project/src-gen",
      bundleManifest="false",
      updateClasspath="false",
      oSGiCompatible="true",
      forceOverwrite="true")
@Ecore(
   nsPrefix="query",
   nsURI="something"
)

// These lines had to be added to resolve the above annotations no longer working
annotation "http://www.eclipse.org/emf/2002/GenModel" as GenModel
annotation "http://www.eclipse.org/emf/2002/Ecore" as Ecore

interface Node wraps an.external.Node {}

abstract class ENode extends Node
{
    op Object getParent() // This line fails due to not referring to object or classifier
    {
        eContainer
    }   
}

I have seen this error pop up in bug reports on XText sites (such as https://github.com/eclipse/xtext-maven/issues/71), and they were resolved. But generally the projects reference Github examples such as https://github.com/itemis/itemis-blog/tree/xcore_gradle or https://github.com/ghillairet/xcore-gradle-example which both point to versions of XText and the corresponding builder which were indeed working prior to this upgrade attempt.

The project is an XText project. Relevant portion of the .project file is here:

    <buildSpec>
        <buildCommand>
            <name>bndtools.core.bndbuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>bndtools.core.bndnature</nature>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
      <nature>org.eclipse.pde.PluginNature</nature>
    </natures>

Any help would be appreciated.

Upvotes: 0

Views: 412

Answers (1)

Jaedabee
Jaedabee

Reputation: 45

I received assistance from the folks working on the XText Gradle plug-in via https://github.com/xtext/xtext-gradle-plugin/issues/171.

The biggest issue is that src-gen cannot exist on the classpath prior to execution of the generateXText task. To assist with this updating the clean task to remove the src-gen folder is recommended. Additionally, the second 3 compile dependencies should be xtextLanguages dependencies.

Upvotes: 0

Related Questions