eclipselink icon indicating copy to clipboard operation
eclipselink copied to clipboard

MetaModel Generator fails on Records

Open dansiviter opened this issue 3 years ago • 1 comments

Although not being used for persistence, the modelgen is erroring on Java 14 Records.

Dependency: org.eclipse.persistence:org.eclipse.persistence.jpa.modelgen.processor:2.7.10

StackTrace:

javax.lang.model.element.UnknownElementException: Unknown element: "id"
    at javax.lang.model.util.AbstractElementVisitor6.visitUnknown (AbstractElementVisitor6.java:129)
    at javax.lang.model.element.ElementVisitor.visitRecordComponent (ElementVisitor.java:225)
    at javax.lang.model.util.AbstractElementVisitor6.visitRecordComponent (AbstractElementVisitor6.java:166)
    at com.sun.tools.javac.code.Symbol$RecordComponent.accept (Symbol.java:1827)
    at org.eclipse.persistence.internal.jpa.modelgen.visitors.ElementVisitor.visitType (ElementVisitor.java:250)
    at org.eclipse.persistence.internal.jpa.modelgen.visitors.ElementVisitor.visitType (ElementVisitor.java:57)
    at com.sun.tools.javac.code.Symbol$ClassSymbol.accept (Symbol.java:1561)
    at org.eclipse.persistence.internal.jpa.modelgen.MetadataMirrorFactory.getMetadataClass (MetadataMirrorFactory.java:140)  
    at org.eclipse.persistence.internal.jpa.modelgen.MetadataMirrorFactory.setEnvironments (MetadataMirrorFactory.java:353)
    at org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor.process (CanonicalModelProcessor.java:206)       
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor (JavacProcessingEnvironment.java:1023)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs (JavacProcessingEnvironment.java:939)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run (JavacProcessingEnvironment.java:1267)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing (JavacProcessingEnvironment.java:1382)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations (JavaCompiler.java:1234)
    at com.sun.tools.javac.main.JavaCompiler.compile (JavaCompiler.java:916)
    at com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0 (JavacTaskImpl.java:104)
    at com.sun.tools.javac.api.JavacTaskImpl.invocationHelper (JavacTaskImpl.java:152)
    at com.sun.tools.javac.api.JavacTaskImpl.doCall (JavacTaskImpl.java:100)
    at com.sun.tools.javac.api.JavacTaskImpl.call (JavacTaskImpl.java:94)

dansiviter avatar Jan 16 '22 20:01 dansiviter

To fix this, org.eclipse.persistence.internal.jpa.modelgen.visitors.ElementVisitor has to override the default implementation of visitRecordComponent​(RecordComponentElement e, P p).

As a first step, I think it should suffice to simply return null;. This should make the code compile again, but would probably still not allow a record to be used as a JPA entity.

maffe avatar Mar 30 '22 12:03 maffe

Any chance of adding that return null; to the current stable version (3.0.3)?

inad9300 avatar Sep 29 '22 16:09 inad9300