|
25 | 25 | import javax.lang.model.type.TypeKind;
|
26 | 26 | import javax.lang.model.type.TypeMirror;
|
27 | 27 | import javax.tools.Diagnostic;
|
| 28 | +import java.util.Arrays; |
28 | 29 | import java.util.Collection;
|
29 | 30 | import java.util.HashSet;
|
30 | 31 | import java.util.List;
|
|
42 | 43 | import static org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor.LAZY_XML_PARSING;
|
43 | 44 | import static org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor.ORM_XML_OPTION;
|
44 | 45 | import static org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor.PERSISTENCE_XML_OPTION;
|
| 46 | +import static org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor.SUPPRESS_JAKARTA_DATA_METAMODEL; |
45 | 47 | import static org.hibernate.jpamodelgen.util.Constants.*;
|
46 | 48 | import static org.hibernate.jpamodelgen.util.TypeUtils.containsAnnotation;
|
47 | 49 | import static org.hibernate.jpamodelgen.util.TypeUtils.getAnnotationMirror;
|
|
77 | 79 | LAZY_XML_PARSING,
|
78 | 80 | ADD_GENERATION_DATE,
|
79 | 81 | ADD_GENERATED_ANNOTATION,
|
80 |
| - ADD_SUPPRESS_WARNINGS_ANNOTATION |
| 82 | + ADD_SUPPRESS_WARNINGS_ANNOTATION, |
| 83 | + SUPPRESS_JAKARTA_DATA_METAMODEL |
81 | 84 | })
|
82 | 85 | public class JPAMetaModelEntityProcessor extends AbstractProcessor {
|
83 | 86 |
|
@@ -123,6 +126,12 @@ public class JPAMetaModelEntityProcessor extends AbstractProcessor {
|
123 | 126 | */
|
124 | 127 | public static final String ADD_SUPPRESS_WARNINGS_ANNOTATION = "addSuppressWarningsAnnotation";
|
125 | 128 |
|
| 129 | + /** |
| 130 | + * Option to suppress generation of the Jakarta Data static metamodel, |
| 131 | + * even when Jakarta Data is available on the build path. |
| 132 | + */ |
| 133 | + public static final String SUPPRESS_JAKARTA_DATA_METAMODEL = "suppressJakartaDataMetamodel"; |
| 134 | + |
126 | 135 | private static final boolean ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS = false;
|
127 | 136 |
|
128 | 137 | private Context context;
|
@@ -167,10 +176,13 @@ private boolean handleSettings(ProcessingEnvironment environment) {
|
167 | 176 | context.setAddGeneratedAnnotation( jakartaAnnotationPackage != null );
|
168 | 177 | context.setAddDependentAnnotation( jakartaContextPackage != null );
|
169 | 178 | context.setAddTransactionScopedAnnotation( jakartaTransactionsPackage != null );
|
170 |
| - context.setGenerateJakartaDataStaticMetamodel( jakartaDataPackage != null ); |
171 | 179 |
|
172 | 180 | final Map<String, String> options = environment.getOptions();
|
173 | 181 |
|
| 182 | + boolean suppressJakartaData = parseBoolean( options.get( SUPPRESS_JAKARTA_DATA_METAMODEL ) ); |
| 183 | + |
| 184 | + context.setGenerateJakartaDataStaticMetamodel( !suppressJakartaData && jakartaDataPackage != null ); |
| 185 | + |
174 | 186 | String setting = options.get( ADD_GENERATED_ANNOTATION );
|
175 | 187 | if ( setting != null ) {
|
176 | 188 | context.setAddGeneratedAnnotation( parseBoolean( setting ) );
|
@@ -214,12 +226,19 @@ else if ( context.isFullyXmlConfigured() ) {
|
214 | 226 | createMetaModelClasses();
|
215 | 227 | }
|
216 | 228 | catch (Exception e) {
|
| 229 | + final StringBuffer b = new StringBuffer(); |
| 230 | + Arrays.stream(e.getStackTrace()) |
| 231 | + .forEach(stackTraceElement -> { |
| 232 | + b.append(stackTraceElement); |
| 233 | + b.append('\n'); |
| 234 | + }); |
217 | 235 | final Throwable cause = e.getCause();
|
218 | 236 | final String message =
|
219 | 237 | cause != null && cause != e
|
220 | 238 | ? e.getMessage() + " caused by " + cause.getMessage()
|
221 | 239 | : e.getMessage();
|
222 | 240 | context.logMessage( Diagnostic.Kind.ERROR, "Error generating JPA metamodel: " + message );
|
| 241 | + context.logMessage( Diagnostic.Kind.ERROR, b.toString() ); |
223 | 242 | }
|
224 | 243 | }
|
225 | 244 | return ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS;
|
|
0 commit comments