/** * Manipulate the method access flags. */ public void setNative(boolean on) { if (on) setAccessFlags(getAccessFlags() | Constants.ACCESS_NATIVE); else setAccessFlags(getAccessFlags() & ~Constants.ACCESS_NATIVE); }
/** * Manipulate the method access flags. */ public void setStrict(boolean on) { if (on) setAccessFlags(getAccessFlags() | Constants.ACCESS_STRICT); else setAccessFlags(getAccessFlags() & ~Constants.ACCESS_STRICT); }
/** * Manipulate the method access flags. */ public void setNative(boolean on) { if (on) setAccessFlags(getAccessFlags() | Constants.ACCESS_NATIVE); else setAccessFlags(getAccessFlags() & ~Constants.ACCESS_NATIVE); }
/** * Manipulate the method access flags. */ public void setBridge(boolean on) { if (on) setAccessFlags(getAccessFlags() | Constants.ACCESS_BRIDGE); else setAccessFlags(getAccessFlags() & ~Constants.ACCESS_BRIDGE); }
/** * Manipulate the method access flags. */ public void setSynchronized(boolean on) { if (on) setAccessFlags(getAccessFlags() | Constants.ACCESS_SYNCHRONIZED); else setAccessFlags(getAccessFlags() & ~Constants.ACCESS_SYNCHRONIZED); }
/** * Manipulate the method access flags. */ public void setVarArgs(boolean on) { if (on) setAccessFlags(getAccessFlags() | Constants.ACCESS_VARARGS); else setAccessFlags(getAccessFlags() & ~Constants.ACCESS_VARARGS); }
/** * Manipulate the method access flags. */ public void setVarArgs(boolean on) { if (on) setAccessFlags(getAccessFlags() | Constants.ACCESS_VARARGS); else setAccessFlags(getAccessFlags() & ~Constants.ACCESS_VARARGS); }
/** * Manipulate the method access flags. */ public void setAbstract(boolean on) { if (on) setAccessFlags(getAccessFlags() | Constants.ACCESS_ABSTRACT); else setAccessFlags(getAccessFlags() & ~Constants.ACCESS_ABSTRACT); }
/** * Manipulate the method access flags. */ public void setBridge(boolean on) { if (on) setAccessFlags(getAccessFlags() | Constants.ACCESS_BRIDGE); else setAccessFlags(getAccessFlags() & ~Constants.ACCESS_BRIDGE); }
/** * Manipulate the method access flags. */ public void setStrict(boolean on) { if (on) setAccessFlags(getAccessFlags() | Constants.ACCESS_STRICT); else setAccessFlags(getAccessFlags() & ~Constants.ACCESS_STRICT); }
/** * Manipulate the method access flags. */ public void setSynchronized(boolean on) { if (on) setAccessFlags(getAccessFlags() | Constants.ACCESS_SYNCHRONIZED); else setAccessFlags(getAccessFlags() & ~Constants.ACCESS_SYNCHRONIZED); }
/** * Manipulate the method access flags. */ public void setAbstract(boolean on) { if (on) setAccessFlags(getAccessFlags() | Constants.ACCESS_ABSTRACT); else setAccessFlags(getAccessFlags() & ~Constants.ACCESS_ABSTRACT); }
/** * Create the generated getter {@link BCMethod} for <code>fmd</code>. The * calling environment will then populate this method's code block. */ private BCMethod createGetMethod(FieldMetaData fmd) { BCMethod getter; if (isFieldAccess(fmd)) { // static <fieldtype> pcGet<field> (XXX inst) BCField field = _pc.getDeclaredField(fmd.getName()); getter = _pc.declareMethod(PRE + "Get" + fmd.getName(), fmd. getDeclaredType().getName(), new String[]{ _pc.getName() }); getter.setAccessFlags(field.getAccessFlags() & ~Constants.ACCESS_TRANSIENT & ~Constants.ACCESS_VOLATILE); getter.setStatic(true); getter.setFinal(true); return getter; } // property access: // copy the user's getter method to a new name; we can't just reset // the name, because that will also reset all calls to the method Method meth = (Method) fmd.getBackingMember(); getter = _pc.getDeclaredMethod(meth.getName(), meth.getParameterTypes()); BCMethod newgetter = _pc.declareMethod(PRE + meth.getName(), meth.getReturnType(), meth.getParameterTypes()); newgetter.setAccessFlags(getter.getAccessFlags()); newgetter.makeProtected(); transferCodeAttributes(getter, newgetter); return getter; }
/** * Import the information in the given method as a new method of this class. * * @return the added method */ public BCMethod declareMethod(BCMethod method) { BCMethod newMethod = declareMethod(method.getName(), method.getReturnName(), method.getParamNames()); newMethod.setAccessFlags(method.getAccessFlags()); newMethod.setAttributes(method.getAttributes()); return newMethod; }
/** * Import the information in the given method as a new method of this class. * * @return the added method */ public BCMethod declareMethod(BCMethod method) { BCMethod newMethod = declareMethod(method.getName(), method.getReturnName(), method.getParamNames()); newMethod.setAccessFlags(method.getAccessFlags()); newMethod.setAttributes(method.getAttributes()); return newMethod; }
/** * Create the generated setter {@link BCMethod} for <code>fmd</code>. The * calling environment will then populate this method's code block. */ private BCMethod createSetMethod(FieldMetaData fmd) { BCMethod setter; if (isFieldAccess(fmd)) { // static void pcSet<field> (XXX inst, <fieldtype> value) BCField field = _pc.getDeclaredField(fmd.getName()); setter = _pc.declareMethod(PRE + "Set" + fmd.getName(), void.class, new Class[]{ getType(_meta), fmd.getDeclaredType() }); setter.setAccessFlags(field.getAccessFlags() & ~Constants.ACCESS_TRANSIENT & ~Constants.ACCESS_VOLATILE); setter.setStatic(true); setter.setFinal(true); return setter; } // property access: // copy the user's getter method to a new name; we can't just reset // the name, because that will also reset all calls to the method setter = _pc.getDeclaredMethod(getSetterName(fmd), new Class[]{ fmd.getDeclaredType() }); BCMethod newsetter = _pc.declareMethod(PRE + setter.getName(), setter.getReturnName(), setter.getParamNames()); newsetter.setAccessFlags(setter.getAccessFlags()); newsetter.makeProtected(); transferCodeAttributes(setter, newsetter); return setter; }
/** * Create the generated setter {@link BCMethod} for <code>fmd</code>. The * calling environment will then populate this method's code block. */ private BCMethod createSetMethod(FieldMetaData fmd) { BCMethod setter; if (isFieldAccess(fmd)) { // static void pcSet<field> (XXX inst, <fieldtype> value) BCField field = _pc.getDeclaredField(fmd.getName()); setter = _pc.declareMethod(PRE + "Set" + fmd.getName(), void.class, new Class[]{ getType(_meta), fmd.getDeclaredType() }); setter.setAccessFlags(field.getAccessFlags() & ~Constants.ACCESS_TRANSIENT & ~Constants.ACCESS_VOLATILE); setter.setStatic(true); setter.setFinal(true); return setter; } // property access: // copy the user's getter method to a new name; we can't just reset // the name, because that will also reset all calls to the method setter = _pc.getDeclaredMethod(getSetterName(fmd), new Class[]{ fmd.getDeclaredType() }); BCMethod newsetter = _pc.declareMethod(PRE + setter.getName(), setter.getReturnName(), setter.getParamNames()); newsetter.setAccessFlags(setter.getAccessFlags()); newsetter.makeProtected(); transferCodeAttributes(setter, newsetter); return setter; }
private void addWriteExternalFields() throws NoSuchMethodException { Class<?>[] outargs = new Class[]{ ObjectOutput.class }; BCMethod meth = _pc.declareMethod("writeExternalFields", void.class, outargs); meth.setAccessFlags(Constants.ACCESS_PROTECTED); Exceptions exceps = meth.getExceptions(true); exceps.addException(IOException.class); Code code = meth.getCode(true); Class<?> sup = _meta.getPCSuperclass(); if (sup != null) { // add a call to super.readExternalFields() loadManagedInstance(code, false); code.aload().setParam(0); code.invokespecial().setMethod(sup, "writeExternalFields", void.class, outargs); } FieldMetaData[] fmds = _meta.getDeclaredFields(); for (int i = 0; i < fmds.length; i++) { if (!fmds[i].isTransient()) { writeExternal(code, fmds[i].getName(), fmds[i].getDeclaredType(), fmds[i]); } } // return code.vreturn(); code.calculateMaxStack(); code.calculateMaxLocals(); }
private void addReadExternalFields() throws NoSuchMethodException { Class<?>[] inargs = new Class[]{ ObjectInput.class }; BCMethod meth = _pc.declareMethod("readExternalFields", void.class, inargs); meth.setAccessFlags(Constants.ACCESS_PROTECTED); Exceptions exceps = meth.getExceptions(true); exceps.addException(IOException.class); exceps.addException(ClassNotFoundException.class); Code code = meth.getCode(true); Class<?> sup = _meta.getPCSuperclass(); if (sup != null) { //add a call to super.readExternalFields() loadManagedInstance(code, false); code.aload().setParam(0); code.invokespecial().setMethod(sup, "readExternalFields", void.class, inargs); } // read managed fields FieldMetaData[] fmds = _meta.getDeclaredFields(); for (int i = 0; i < fmds.length; i++) { if (!fmds[i].isTransient()) { readExternal(code, fmds[i].getName(), fmds[i].getDeclaredType(), fmds[i]); } } code.vreturn(); code.calculateMaxStack(); code.calculateMaxLocals(); }
private void addReadExternalFields() throws NoSuchMethodException { Class<?>[] inargs = new Class[]{ ObjectInput.class }; BCMethod meth = _pc.declareMethod("readExternalFields", void.class, inargs); meth.setAccessFlags(Constants.ACCESS_PROTECTED); Exceptions exceps = meth.getExceptions(true); exceps.addException(IOException.class); exceps.addException(ClassNotFoundException.class); Code code = meth.getCode(true); Class<?> sup = _meta.getPCSuperclass(); if (sup != null) { //add a call to super.readExternalFields() loadManagedInstance(code, false); code.aload().setParam(0); code.invokespecial().setMethod(sup, "readExternalFields", void.class, inargs); } // read managed fields FieldMetaData[] fmds = _meta.getDeclaredFields(); for (int i = 0; i < fmds.length; i++) { if (!fmds[i].isTransient()) { readExternal(code, fmds[i].getName(), fmds[i].getDeclaredType(), fmds[i]); } } code.vreturn(); code.calculateMaxStack(); code.calculateMaxLocals(); }