diff --git a/emf/codegen.maven.example/ecore.enum.consumer/model/enumconsumer.ecore b/emf/codegen.maven.example/ecore.enum.consumer/model/enumconsumer.ecore new file mode 100644 index 0000000..6e2380a --- /dev/null +++ b/emf/codegen.maven.example/ecore.enum.consumer/model/enumconsumer.ecore @@ -0,0 +1,37 @@ + + + + +
+
+ + + + + + + + diff --git a/emf/codegen.maven.example/ecore.enum.consumer/pom.xml b/emf/codegen.maven.example/ecore.enum.consumer/pom.xml new file mode 100644 index 0000000..3d06c20 --- /dev/null +++ b/emf/codegen.maven.example/ecore.enum.consumer/pom.xml @@ -0,0 +1,110 @@ + + + + 4.0.0 + + + org.eclipse.daanse + org.eclipse.daanse.tooling.emf.codegen.maven.example + 0.0.1-SNAPSHOT + + + + org.eclipse.daanse.tooling.emf.codegen.maven.example.ecore.enum.consumer + jar + + Daanse EMF Codegen Example - EEnum Consumer (cross-package default + value) + Regression test: an EAttribute typed by an EEnum from a + dependency ecore, with a defaultValueLiteral. Reproduces the + "cannot find symbol PUBLIC_LITERAL" compile failure seen in xmla.csdl + when the external GenModel inherited a stale JDK14 complianceLevel. + + + + org.eclipse.emf + org.eclipse.emf.common + + + org.eclipse.emf + org.eclipse.emf.ecore + + + org.eclipse.daanse + + org.eclipse.daanse.tooling.emf.codegen.maven.example.ecore.enum.provider + ${project.version} + + + org.eclipse.fennec.emf + org.eclipse.fennec.emf.osgi.api + 0.1.1 + + + org.eclipse.fennec.emf + org.eclipse.fennec.emf.osgi.component + runtime + + + + + + + org.eclipse.daanse + org.eclipse.daanse.tooling.emf.codegen.maven + ${project.version} + + + + generate + + + model/enumconsumer.ecore + org.eclipse.daanse.example.enumconsumer + target/generated-sources/emf + + + + + + biz.aQute.bnd + biz.aQute.bndlib + 7.1.0 + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.0 + + + generate-sources + + add-source + + + + target/generated-sources/emf + + + + + + + + + diff --git a/emf/codegen.maven.example/ecore.enum.provider/model/enumprovider.ecore b/emf/codegen.maven.example/ecore.enum.provider/model/enumprovider.ecore new file mode 100644 index 0000000..e41210c --- /dev/null +++ b/emf/codegen.maven.example/ecore.enum.provider/model/enumprovider.ecore @@ -0,0 +1,26 @@ + + + + +
+
+ + + + + + + diff --git a/emf/codegen.maven.example/ecore.enum.provider/pom.xml b/emf/codegen.maven.example/ecore.enum.provider/pom.xml new file mode 100644 index 0000000..15c7b54 --- /dev/null +++ b/emf/codegen.maven.example/ecore.enum.provider/pom.xml @@ -0,0 +1,103 @@ + + + + 4.0.0 + + + org.eclipse.daanse + org.eclipse.daanse.tooling.emf.codegen.maven.example + 0.0.1-SNAPSHOT + + + + org.eclipse.daanse.tooling.emf.codegen.maven.example.ecore.enum.provider + jar + + Daanse EMF Codegen Example - EEnum Provider + Provides an EEnum (AccessKind) consumed by ecore.enum.consumer + as an attribute default value. Regression coverage for the cross-package + EEnumLiteral reference path (legacy "_LITERAL" suffix vs modern Java enum + constant). + + + + org.eclipse.emf + org.eclipse.emf.common + + + org.eclipse.emf + org.eclipse.emf.ecore + + + org.eclipse.fennec.emf + org.eclipse.fennec.emf.osgi.api + 0.1.1 + + + org.eclipse.fennec.emf + org.eclipse.fennec.emf.osgi.component + runtime + + + + + + + org.eclipse.daanse + org.eclipse.daanse.tooling.emf.codegen.maven + ${project.version} + + + + generate + + + model/enumprovider.ecore + org.eclipse.daanse.example.enumprovider + target/generated-sources/emf + + + + + + biz.aQute.bnd + biz.aQute.bndlib + 7.1.0 + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.0 + + + generate-sources + + add-source + + + + target/generated-sources/emf + + + + + + + + + diff --git a/emf/codegen.maven.example/pom.xml b/emf/codegen.maven.example/pom.xml index 99b7787..a64474e 100644 --- a/emf/codegen.maven.example/pom.xml +++ b/emf/codegen.maven.example/pom.xml @@ -36,11 +36,13 @@ ecore.annotated ecore.loadpackage ecore.noosgi + ecore.enum.provider genmodel.simple ecore.dependencies ecore.dependencies.subpackages ecore.dependencies.subpackages.consumer.subpackages + ecore.enum.consumer genmodel.dependencies diff --git a/emf/codegen.maven/src/main/java/org/eclipse/daanse/tooling/emf/codegen/EmfGenerateMojo.java b/emf/codegen.maven/src/main/java/org/eclipse/daanse/tooling/emf/codegen/EmfGenerateMojo.java index 694f6f5..a47da56 100644 --- a/emf/codegen.maven/src/main/java/org/eclipse/daanse/tooling/emf/codegen/EmfGenerateMojo.java +++ b/emf/codegen.maven/src/main/java/org/eclipse/daanse/tooling/emf/codegen/EmfGenerateMojo.java @@ -852,6 +852,14 @@ private GenModel createGenModel(EPackage ePackage, String projectName, ResourceS // URI during subsequent code-generation. GenModel externalModel = GenModelFactory.eINSTANCE.createGenModel(); externalModel.setModelName("External"); + // Inherit the main genmodel's complianceLevel. Without this, the new + // external GenModel defaults to JDK14, and EMF emits cross-package + // EEnumLiteral references in the legacy "_LITERAL" form (see + // GenEnumLiteralImpl.getEnumLiteralInstanceConstantName, which appends + // _LITERAL when complianceLevel < JDK50). The producing module's + // generated enum class only has the modern "" constant, so + // consumer code fails to compile with "cannot find symbol PUBLIC_LITERAL". + externalModel.setComplianceLevel(genModel.getComplianceLevel()); String ecoreName = ecoreFile.getName(); String baseName = ecoreName.endsWith(".ecore") ? ecoreName.substring(0, ecoreName.length() - 6) @@ -1573,6 +1581,11 @@ private GenPackage createGenPackageFromEcore(ResourceSet resourceSet, EPackage e GenModel genModel = GenModelFactory.eINSTANCE.createGenModel(); genModel.initialize(Collections.singletonList(ePackage)); genModel.setModelName(capitalize(ePackage.getName())); + // Match the main genmodel's complianceLevel (set in createGenModel). + // The default JDK14 would trigger legacy "_LITERAL" emission for + // any cross-package EEnum default values when this synthesized + // GenPackage is consumed by another module's generator. + genModel.setComplianceLevel(org.eclipse.emf.codegen.ecore.genmodel.GenJDKLevel.JDK170_LITERAL); // Create a synthetic resource for the GenModel URI genModelUri = URI.createURI("synthetic:/" + ePackage.getName() + ".genmodel");