You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by st...@apache.org on 2021/04/19 19:14:39 UTC

[openjpa] branch master updated: OPENJPA-2800 mark additional fields and methods as synthetic

This is an automated email from the ASF dual-hosted git repository.

struberg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openjpa.git


The following commit(s) were added to refs/heads/master by this push:
     new 5b67ce5  OPENJPA-2800 mark additional fields and methods as synthetic
5b67ce5 is described below

commit 5b67ce51801cb646d772dadd03a623312603a0df
Author: Mark Struberg <st...@apache.org>
AuthorDate: Mon Apr 19 21:13:07 2021 +0200

    OPENJPA-2800 mark additional fields and methods as synthetic
    
    When enhancing an Entity we add a few fields and additional methods.
    Those elements should properly get marked as synthetic.
---
 .../org/apache/openjpa/enhance/PCEnhancer.java     | 112 +++++++++++++++------
 1 file changed, 82 insertions(+), 30 deletions(-)

diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
index bb868dd..fdfb7e0 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
@@ -768,6 +768,7 @@ public class PCEnhancer {
         BCMethod method = _pc.declareMethod(PRE + "AttributeIndexToFieldName",
             String.class, new Class[] { int.class });
         method.makePublic();
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         // switch (val)
@@ -1211,6 +1212,7 @@ public class PCEnhancer {
         BCMethod method = _pc.declareMethod(PRE + "ClearFields", void.class,
             null);
         method.makeProtected();
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         // super.pcClearFields ()
@@ -1271,6 +1273,7 @@ public class PCEnhancer {
             (oid) ? new Class[]{ SMTYPE, Object.class, boolean.class }
                 : new Class[]{ SMTYPE, boolean.class };
         BCMethod method = _pc.declareMethod(PRE + "NewInstance", PCTYPE, args);
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         // if the type is abstract, throw a UserException
@@ -1326,6 +1329,7 @@ public class PCEnhancer {
         // protected static int pcGetManagedFieldCount ()
         BCMethod method = _pc.declareMethod(PRE + "GetManagedFieldCount",
             int.class, null);
+        method.setSynthetic(true);
         method.setStatic(true);
         method.makeProtected();
         Code code = method.getCode(true);
@@ -1359,6 +1363,7 @@ public class PCEnhancer {
         // public void pcProvideField (int fieldNumber)
         BCMethod method = _pc.declareMethod(PRE + "ProvideField", void.class,
             new Class[]{ int.class });
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         // adds everything through the switch ()
@@ -1410,6 +1415,7 @@ public class PCEnhancer {
         // public void pcReplaceField (int fieldNumber)
         BCMethod method = _pc.declareMethod(PRE + "ReplaceField", void.class,
             new Class[]{ int.class });
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         // adds everything through the switch ()
@@ -1476,6 +1482,7 @@ public class PCEnhancer {
             void.class.getName(),
             new String[]{ _managedType.getName(), int.class.getName() });
         method.makeProtected();
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         // adds everything through the switch ()
@@ -1581,8 +1588,8 @@ public class PCEnhancer {
         // public void <method>s (int[] fields)
         Class[] args = (copy) ? new Class[]{ Object.class, int[].class }
             : new Class[]{ int[].class };
-        BCMethod method = _pc.declareMethod(single.getName() + "s",
-            void.class, args);
+        BCMethod method = _pc.declareMethod(single.getName() + "s", void.class, args);
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         int fieldNumbers = 0;
@@ -1732,8 +1739,8 @@ public class PCEnhancer {
                         SMTYPE, "dirty", new Class[]{ String.class })), false);
 
             // pcGetStateManager
-            BCMethod meth = _pc.declareMethod(PRE + "GetStateManager",
-                StateManager.class, null);
+            BCMethod meth = _pc.declareMethod(PRE + "GetStateManager", StateManager.class, null);
+            meth.setSynthetic(true);
             Code code = meth.getCode(true);
             loadManagedInstance(code, false);
             code.getfield().setField(SM, StateManager.class);
@@ -1760,6 +1767,7 @@ public class PCEnhancer {
 
         // add the method to the pc
         BCMethod method = _pc.declareMethod(name, returnType, params);
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         // if (pcStateManager == null) return <default>;
@@ -1804,6 +1812,7 @@ public class PCEnhancer {
         throws NoSuchMethodException {
         BCMethod method = _pc.declareMethod(PRE + "GetVersion", Object.class,
             null);
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         // if (pcStateManager == null)
@@ -1872,8 +1881,8 @@ public class PCEnhancer {
      */
     private void addReplaceStateManagerMethod() {
         // public void pcReplaceStateManager (StateManager sm)
-        BCMethod method = _pc.declareMethod(PRE + "ReplaceStateManager",
-            void.class, new Class[]{ SMTYPE });
+        BCMethod method = _pc.declareMethod(PRE + "ReplaceStateManager", void.class, new Class[]{ SMTYPE });
+        method.setSynthetic(true);
         method.getExceptions(true).addException(SecurityException.class);
         Code code = method.getCode(true);
 
@@ -1916,6 +1925,7 @@ public class PCEnhancer {
         // 	Object oid)
         BCMethod method = _pc.declareMethod(PRE + "CopyKeyFieldsToObjectId",
             void.class, new Class[]{ OIDFSTYPE, Object.class });
+        method.setSynthetic(true);
         Code code = method.getCode(true);
         code.vreturn();
         code.calculateMaxLocals();
@@ -1923,6 +1933,7 @@ public class PCEnhancer {
         // public void pcCopyKeyFieldsToObjectId (Object oid)
         method = _pc.declareMethod(PRE + "CopyKeyFieldsToObjectId",
             void.class, new Class[]{ Object.class });
+        method.setSynthetic(true);
         code = method.getCode(true);
         code.vreturn();
         code.calculateMaxLocals();
@@ -1931,6 +1942,7 @@ public class PCEnhancer {
         //	Object oid)
         method = _pc.declareMethod(PRE + "CopyKeyFieldsFromObjectId",
             void.class, new Class[]{ OIDFCTYPE, Object.class });
+        method.setSynthetic(true);
         code = method.getCode(true);
         code.vreturn();
         code.calculateMaxLocals();
@@ -1938,6 +1950,7 @@ public class PCEnhancer {
         // public void pcCopyKeyFieldsFromObjectId (Object oid)
         method = _pc.declareMethod(PRE + "CopyKeyFieldsFromObjectId",
             void.class, new Class[]{ Object.class });
+        method.setSynthetic(true);
         code = method.getCode(true);
         code.vreturn();
         code.calculateMaxLocals();
@@ -1945,6 +1958,7 @@ public class PCEnhancer {
         // public Object pcNewObjectIdInstance ()
         method = _pc.declareMethod(PRE + "NewObjectIdInstance",
             Object.class, null);
+        method.setSynthetic(true);
         code = method.getCode(true);
         code.constant().setNull();
         code.areturn();
@@ -1954,6 +1968,7 @@ public class PCEnhancer {
         // public Object pcNewObjectIdInstance (Object obj)
         method = _pc.declareMethod(PRE + "NewObjectIdInstance",
             Object.class, new Class[]{ Object.class });
+        method.setSynthetic(true);
         code = method.getCode(true);
         code.constant().setNull();
         code.areturn();
@@ -1974,6 +1989,7 @@ public class PCEnhancer {
             : new String[]{ Object.class.getName() };
         BCMethod method = _pc.declareMethod(PRE + "CopyKeyFieldsToObjectId",
             void.class.getName(), args);
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         // single field identity always throws exception
@@ -2469,6 +2485,7 @@ public class PCEnhancer {
             : new String[]{ Object.class.getName() };
         BCMethod method = _pc.declareMethod(PRE + "CopyKeyFieldsFromObjectId",
             void.class.getName(), args);
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         // call superclass method
@@ -2724,6 +2741,7 @@ public class PCEnhancer {
         Class[] args = (obj) ? new Class[]{ Object.class } : null;
         BCMethod method = _pc.declareMethod(PRE + "NewObjectIdInstance",
             Object.class, args);
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         Boolean usesClsString = usesClassStringIdConstructor();
@@ -2945,19 +2963,38 @@ public class PCEnhancer {
      * </ul>
      */
     private void addFields() {
-        _pc.declareField(INHERIT, int.class).setStatic(true);
-        _pc.declareField(PRE + "FieldNames", String[].class).setStatic(true);
-        _pc.declareField(PRE + "FieldTypes", Class[].class).setStatic(true);
-        _pc.declareField(PRE + "FieldFlags", byte[].class).setStatic(true);
-        _pc.declareField(SUPER, Class.class).setStatic(true);
+        BCField field;
+        field = _pc.declareField(INHERIT, int.class);
+        field.setStatic(true);
+        field.setSynthetic(true);
+
+        field = _pc.declareField(PRE + "FieldNames", String[].class);
+        field.setStatic(true);
+        field.setSynthetic(true);
+
+        field = _pc.declareField(PRE + "FieldTypes", Class[].class);
+        field.setStatic(true);
+        field.setSynthetic(true);
+
+        field = _pc.declareField(PRE + "FieldFlags", byte[].class);
+        field.setStatic(true);
+        field.setSynthetic(true);
+
+
+        field = _pc.declareField(SUPER, Class.class);
+        field.setSynthetic(true);
+        field.setStatic(true);
+
         if (_addVersionInitFlag && _meta.getVersionField() != null) {
             // protected transient boolean pcVersionInit;
-            BCField field = _pc.declareField(VERSION_INIT_STR, boolean.class);
+            field = _pc.declareField(VERSION_INIT_STR, boolean.class);
+            field.setSynthetic(true);
             field.makeProtected();
             field.setTransient(true);
         }
         if (_meta.getPCSuperclass() == null || getCreateSubclass()) {
-            BCField field = _pc.declareField(SM, SMTYPE);
+            field = _pc.declareField(SM, SMTYPE);
+            field.setSynthetic(true);
             field.makeProtected();
             field.setTransient(true);
         }
@@ -3144,6 +3181,7 @@ public class PCEnhancer {
             // private void writeObject (ObjectOutputStream out)
             write = _pc.declareMethod("writeObject", void.class,
                 new Class[]{ ObjectOutputStream.class });
+            write.setSynthetic(true);
             write.getExceptions(true).addException(IOException.class);
             write.makePrivate();
         }
@@ -3157,6 +3195,7 @@ public class PCEnhancer {
             // private void readObject (ObjectInputStream in)
             read = _pc.declareMethod("readObject", void.class,
                 new Class[]{ ObjectInputStream.class });
+            read.setSynthetic(true);
             read.getExceptions(true).addException(IOException.class);
             read.getExceptions(true).addException
                 (ClassNotFoundException.class);
@@ -3172,6 +3211,7 @@ public class PCEnhancer {
 
         // private Object writeReplace() throws ObjectStreamException
         BCMethod method = _pc.declareMethod("writeReplace", Object.class, null);
+        method.setSynthetic(true);
         method.getExceptions(true).addException(ObjectStreamException.class);
         Code code = method.getCode(true);
 
@@ -3260,7 +3300,7 @@ public class PCEnhancer {
 
     /**
      * Adds a custom readObject method that delegates to the
-     * {@link ObjectInputStream#readObject} method.
+     * {@link ObjectInputStream#readObject()} method.
      */
     private void modifyReadObjectMethod(BCMethod method, boolean full) {
         Code code = method.getCode(true);
@@ -3297,6 +3337,7 @@ public class PCEnhancer {
         // public boolean pcIsDetached()
         BCMethod method = _pc.declareMethod(PRE + "IsDetached",
             Boolean.class, null);
+        method.setSynthetic(true);
         method.makePublic();
         Code code = method.getCode(true);
         boolean needsDefinitiveMethod = writeIsDetachedMethod(code);
@@ -3309,8 +3350,8 @@ public class PCEnhancer {
         //   return false;
         // auxilliary enhancers may change the return value of this method
         // if their specs consider detached state definitive
-        method = _pc.declareMethod(ISDETACHEDSTATEDEFINITIVE, boolean.class,
-            null);
+        method = _pc.declareMethod(ISDETACHEDSTATEDEFINITIVE, boolean.class, null);
+        method.setSynthetic(true);
         method.makePrivate();
         code = method.getCode(true);
         code.constant().setValue(false);
@@ -3623,6 +3664,7 @@ public class PCEnhancer {
             // add clone method
             // protected Object clone () throws CloneNotSupportedException
             clone = _pc.declareMethod("clone", Object.class, null);
+            clone.setSynthetic(true);
             if (!setVisibilityToSuperMethod(clone))
                 clone.makeProtected();
             clone.getExceptions(true).addException
@@ -3725,8 +3767,8 @@ public class PCEnhancer {
         throws NoSuchMethodException {
         Class propType = fmd.getDeclaredType();
         String setterName = getSetterName(fmd);
-        BCMethod setter = _pc.declareMethod(setterName, void.class,
-            new Class[] { propType });
+        BCMethod setter = _pc.declareMethod(setterName, void.class, new Class[] { propType });
+        setter.setSynthetic(true);
         setVisibilityToSuperMethod(setter);
         Code code = setter.getCode(true);
 
@@ -3784,8 +3826,8 @@ public class PCEnhancer {
         String methName = "get" + StringUtil.capitalize(fmd.getName());
         if (_managedType.getMethods(methName, new Class[0]).length == 0)
             methName = "is" + StringUtil.capitalize(fmd.getName());
-        BCMethod getter = _pc.declareMethod(methName, fmd.getDeclaredType(),
-            null);
+        BCMethod getter = _pc.declareMethod(methName, fmd.getDeclaredType(), null);
+        getter.setSynthetic(true);
         setVisibilityToSuperMethod(getter);
         getter.makePublic();
         Code code = getter.getCode(true);
@@ -3962,6 +4004,7 @@ public class PCEnhancer {
             name = PRE + "DetachedState";
             declarer = _pc.getName();
             BCField field = _pc.declareField(name, Object.class);
+            field.setSynthetic(true);
             field.makePrivate();
             field.setTransient(true);
         } else if (impl) {
@@ -3970,8 +4013,8 @@ public class PCEnhancer {
         }
 
         // public Object pcGetDetachedState ()
-        BCMethod method = _pc.declareMethod(PRE + "GetDetachedState",
-            Object.class, null);
+        BCMethod method = _pc.declareMethod(PRE + "GetDetachedState", Object.class, null);
+        method.setSynthetic(true);
         method.setStatic(false);
         method.makePublic();
         int access = method.getAccessFlags();
@@ -3991,6 +4034,7 @@ public class PCEnhancer {
         // public void pcSetDetachedState (Object state)
         method = _pc.declareMethod(PRE + "SetDetachedState",
             void.class, new Class []{ Object.class });
+        method.setSynthetic(true);
         method.setAccessFlags(access);
         code = method.getCode(true);
         if (impl) {
@@ -4183,6 +4227,7 @@ public class PCEnhancer {
         throws NoSuchMethodException {
         Class[] inargs = new Class[]{ ObjectInput.class };
         BCMethod meth = _pc.declareMethod("readExternal", void.class, inargs);
+        meth.setSynthetic(true);
         Exceptions exceps = meth.getExceptions(true);
         exceps.addException(IOException.class);
         exceps.addException(ClassNotFoundException.class);
@@ -4241,6 +4286,7 @@ public class PCEnhancer {
     private void addReadExternalFields() throws NoSuchMethodException {
         Class<?>[] inargs = new Class[]{ ObjectInput.class };
         BCMethod meth = _pc.declareMethod("readExternalFields", void.class, inargs);
+        meth.setSynthetic(true);
         meth.setAccessFlags(Constants.ACCESS_PROTECTED);
         Exceptions exceps = meth.getExceptions(true);
         exceps.addException(IOException.class);
@@ -4275,8 +4321,8 @@ public class PCEnhancer {
     private void addReadUnmanaged(Collection unmgd, boolean parentDetachable)
         throws NoSuchMethodException {
         Class[] inargs = new Class[]{ ObjectInput.class };
-        BCMethod meth = _pc.declareMethod(PRE + "ReadUnmanaged", void.class,
-            inargs);
+        BCMethod meth = _pc.declareMethod(PRE + "ReadUnmanaged", void.class, inargs);
+        meth.setSynthetic(true);
         meth.makeProtected();
         Exceptions exceps = meth.getExceptions(true);
         exceps.addException(IOException.class);
@@ -4361,6 +4407,7 @@ public class PCEnhancer {
         throws NoSuchMethodException {
         Class[] outargs = new Class[]{ ObjectOutput.class };
         BCMethod meth = _pc.declareMethod("writeExternal", void.class, outargs);
+        meth.setSynthetic(true);
         Exceptions exceps = meth.getExceptions(true);
         exceps.addException(IOException.class);
         Code code = meth.getCode(true);
@@ -4432,6 +4479,7 @@ public class PCEnhancer {
         throws NoSuchMethodException {
         Class<?>[] outargs = new Class[]{ ObjectOutput.class };
         BCMethod meth = _pc.declareMethod("writeExternalFields", void.class, outargs);
+        meth.setSynthetic(true);
         meth.setAccessFlags(Constants.ACCESS_PROTECTED);
         Exceptions exceps = meth.getExceptions(true);
         exceps.addException(IOException.class);
@@ -4465,8 +4513,8 @@ public class PCEnhancer {
     private void addWriteUnmanaged(Collection unmgd, boolean parentDetachable)
         throws NoSuchMethodException {
         Class[] outargs = new Class[]{ ObjectOutput.class };
-        BCMethod meth = _pc.declareMethod(PRE + "WriteUnmanaged", void.class,
-            outargs);
+        BCMethod meth = _pc.declareMethod(PRE + "WriteUnmanaged", void.class, outargs);
+        meth.setSynthetic(true);
         meth.makeProtected();
         Exceptions exceps = meth.getExceptions(true);
         exceps.addException(IOException.class);
@@ -4662,6 +4710,7 @@ public class PCEnhancer {
             BCField field = _pc.getDeclaredField(fmd.getName());
             getter = _pc.declareMethod(PRE + "Get" + fmd.getName(), fmd.
                 getDeclaredType().getName(), new String[]{ _pc.getName() });
+            getter.setSynthetic(true);
             getter.setAccessFlags(field.getAccessFlags()
                 & ~Constants.ACCESS_TRANSIENT & ~Constants.ACCESS_VOLATILE);
             getter.setStatic(true);
@@ -4677,6 +4726,7 @@ public class PCEnhancer {
             meth.getParameterTypes());
         BCMethod newgetter = _pc.declareMethod(PRE + meth.getName(),
             meth.getReturnType(), meth.getParameterTypes());
+        newgetter.setSynthetic(true);
         newgetter.setAccessFlags(getter.getAccessFlags());
         newgetter.makeProtected();
         transferCodeAttributes(getter, newgetter);
@@ -4694,6 +4744,7 @@ public class PCEnhancer {
             BCField field = _pc.getDeclaredField(fmd.getName());
             setter = _pc.declareMethod(PRE + "Set" + fmd.getName(), void.class,
                 new Class[]{ getType(_meta), fmd.getDeclaredType() });
+            setter.setSynthetic(true);
             setter.setAccessFlags(field.getAccessFlags()
                 & ~Constants.ACCESS_TRANSIENT & ~Constants.ACCESS_VOLATILE);
             setter.setStatic(true);
@@ -4708,6 +4759,7 @@ public class PCEnhancer {
             new Class[]{ fmd.getDeclaredType() });
         BCMethod newsetter = _pc.declareMethod(PRE + setter.getName(),
             setter.getReturnName(), setter.getParamNames());
+        newsetter.setSynthetic(true);
         newsetter.setAccessFlags(setter.getAccessFlags());
         newsetter.makeProtected();
         transferCodeAttributes(setter, newsetter);
@@ -4716,8 +4768,8 @@ public class PCEnhancer {
 
     private void addGetEnhancementContractVersionMethod() {
         // public int getEnhancementContractVersion()
-        BCMethod method = _pc.declareMethod(PRE +
-                "GetEnhancementContractVersion", int.class, null);
+        BCMethod method = _pc.declareMethod(PRE + "GetEnhancementContractVersion", int.class, null);
+        method.setSynthetic(true);
         method.makePublic();
         Code code = method.getCode(true);
         code.constant().setValue(ENHANCER_VERSION);
@@ -4946,8 +4998,8 @@ public class PCEnhancer {
     }
 
     private void addGetIDOwningClass() throws NoSuchMethodException {
-        BCMethod method = _pc.declareMethod(PRE + "GetIDOwningClass",
-            Class.class, null);
+        BCMethod method = _pc.declareMethod(PRE + "GetIDOwningClass", Class.class, null);
+        method.setSynthetic(true);
         Code code = method.getCode(true);
 
         code.classconstant().setClass(getType(_meta));