public boolean validate() { if (cmd.getPersistenceModifier() != ClassPersistenceModifier.PERSISTENCE_CAPABLE && cmd.getPersistenceModifier() != ClassPersistenceModifier.PERSISTENCE_AWARE) { return false; } initialise(); return checkClassIsEnhanced(true); }
public ClassPersistenceModifier getPersistenceModifier() { org.datanucleus.metadata.ClassPersistenceModifier mod = getInternal().getPersistenceModifier(); if (mod == org.datanucleus.metadata.ClassPersistenceModifier.PERSISTENCE_CAPABLE) { return ClassPersistenceModifier.PERSISTENCE_CAPABLE; } else if (mod == org.datanucleus.metadata.ClassPersistenceModifier.PERSISTENCE_AWARE) { return ClassPersistenceModifier.PERSISTENCE_AWARE; } else { return ClassPersistenceModifier.NON_PERSISTENT; } }
/** * Method to intercept any general instructions. * We use it to intercept any RETURN on a static initialisation block so we can append to it. * @param opcode Operation */ public void visitInsn(int opcode) { if (enhancer.getClassMetaData().getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE && methodName.equals("<clinit>") && methodDescriptor.equals("()V") && opcode == Opcodes.RETURN) { // Add the initialise instructions to the existing block InitClass initMethod = InitClass.getInstance(enhancer); initMethod.addInitialiseInstructions(mv); // Add the RETURN mv.visitInsn(Opcodes.RETURN); return; } super.visitInsn(opcode); } }
/** * Constructor. * @param enhancer The class enhancer * @param logErrors Whether to log any errors at error level */ public JdoClassChecker(ASMClassEnhancer enhancer, boolean logErrors) { super(ASMClassEnhancer.ASM_API_VERSION); this.enhancer = enhancer; this.logErrors = logErrors; if (enhancer.getClassMetaData().getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE) { fieldsRequired.addAll(enhancer.getFieldsList()); methodsRequired.addAll(enhancer.getMethodsList()); } }
/** * Visit the end of the class */ public void visitEnd() { if (enhancer.getClassMetaData().getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE) { // Check for required PersistenceCapable fields/methods Iterator fieldsIter = fieldsRequired.iterator(); while (fieldsIter.hasNext()) { ClassField field = (ClassField)fieldsIter.next(); reportError(LOCALISER.msg("Enhancer.Check.FieldMissing", enhancer.className, field.getName())); } Iterator methodsIter = methodsRequired.iterator(); while (methodsIter.hasNext()) { ClassMethod method = (ClassMethod)methodsIter.next(); reportError(LOCALISER.msg("Enhancer.Check.MethodMissing", enhancer.className, method.getName())); } } else if (enhancer.getClassMetaData().getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_AWARE) { // TODO Fix this so we do a real check on whether the existing methods are enhanced ok enhanced = false; } }
/** * Check if the class is PersistenceCapable or is going to be enhanced based on the metadata * @param className the class name * @return true if PersistenceCapable */ public boolean isPersistenceCapable(String className) { if (className.equals(this.className) && (cmd.getPersistenceModifier() != ClassPersistenceModifier.PERSISTENCE_AWARE)) { // This is our class so yes it will be PersistenceCapable return true; } NucleusContext nucleusCtx = metaDataMgr.getNucleusContext(); Class cls = clr.classForName(className, new EnhancerClassLoader(clr)); // Allow for Enhancer classLoader if (nucleusCtx.getApiAdapter().isPersistable(cls)) { // The specified class is already PersistenceCapable return true; } AbstractClassMetaData cmd = metaDataMgr.getMetaDataForClass(cls, clr); if (cmd != null && cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE) { // The specified class has MetaData and will be enhanced shortly return true; } return false; }
if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE && !cmd.isAbstract())
if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE && !cmd.isEmbeddedOnly())
if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE && !cmd.isEmbeddedOnly())
if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE && !cmd.isEmbeddedOnly() && !cmd.isAbstract())
if (enhancer.getClassMetaData().getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE)
if (cmd.getPersistenceModifier() != ClassPersistenceModifier.PERSISTENCE_CAPABLE && cmd.getPersistenceModifier() != ClassPersistenceModifier.PERSISTENCE_AWARE)
if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE) else if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_AWARE) if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE) else if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_AWARE) if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE || cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_AWARE)
if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE && !cmd.isEmbeddedOnly())
if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE && !cmd.isAbstract() && !cmd.isEmbeddedOnly())
if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE) else if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_AWARE) if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE) else if (cmd.getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_AWARE)
if (enhancer.getClassMetaData().getPersistenceModifier() == ClassPersistenceModifier.PERSISTENCE_CAPABLE)
if (cmd.getPersistenceModifier() != ClassPersistenceModifier.PERSISTENCE_CAPABLE)