From 20932d0e6898f9822fa9116ba5fd8b9dc4817850 Mon Sep 17 00:00:00 2001 From: Yanhui Zhao Date: Mon, 4 Jun 2018 22:22:25 -0700 Subject: [PATCH] MNEMONIC-486: Implement the functionality of reference breaking mark for general durable object --- .../org/apache/mnemonic/AnnotatedDurableEntityClass.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mnemonic-core/src/main/java/org/apache/mnemonic/AnnotatedDurableEntityClass.java b/mnemonic-core/src/main/java/org/apache/mnemonic/AnnotatedDurableEntityClass.java index 856667e5..5bc877a9 100644 --- a/mnemonic-core/src/main/java/org/apache/mnemonic/AnnotatedDurableEntityClass.java +++ b/mnemonic-core/src/main/java/org/apache/mnemonic/AnnotatedDurableEntityClass.java @@ -80,6 +80,7 @@ protected class FieldInfo { public String gftypesname; public long fieldoff; public long fieldsize; + public boolean refbreak; } protected final String cFACTORYNAMESUFFIX = "Factory"; @@ -306,6 +307,7 @@ public void prepareProcessing() throws AnnotationProcessingException { fieldinfo.efproxiesname = pgetter.EntityFactoryProxies(); fieldinfo.gftypesname = pgetter.GenericFieldTypes(); fieldinfo.id = pgetter.Id(); + fieldinfo.refbreak = elem.getAnnotation(RefBreak.class) != null; m_dynfieldsinfo.put(methodname.substring(3), fieldinfo); } @@ -861,7 +863,11 @@ protected void buildDurableMethodSpecs(TypeSpec.Builder typespecbuilder) throws code.addStatement("return $1N", m_fieldsinfo.get("nfieldinfo").name); break; case "refbreak": - code.addStatement("return"); + for (FieldInfo fldinfo : m_dynfieldsinfo.values()) { + if (fldinfo.refbreak && !isUnboxPrimitive(fldinfo.type)) { + code.addStatement("$1N = null", fldinfo.name); + } + } break; default: throw new AnnotationProcessingException(null, "Method %s is not supported.", name);