001: /* Copyright (C) 2004 - 2007 db4objects Inc. http://www.db4o.com
002:
003: This file is part of the db4o open source object database.
004:
005: db4o is free software; you can redistribute it and/or modify it under
006: the terms of version 2 of the GNU General Public License as published
007: by the Free Software Foundation and as clarified by db4objects' GPL
008: interpretation policy, available at
009: http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
010: Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
011: Suite 350, San Mateo, CA 94403, USA.
012:
013: db4o is distributed in the hope that it will be useful, but WITHOUT ANY
014: WARRANTY; without even the implied warranty of MERCHANTABILITY or
015: FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
016: for more details.
017:
018: You should have received a copy of the GNU General Public License along
019: with this program; if not, write to the Free Software Foundation, Inc.,
020: 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
021: package EDU.purdue.cs.bloat.editor;
022:
023: import EDU.purdue.cs.bloat.reflect.*;
024:
025: /**
026: * An <tt>EditorContext</tt> supplies a means of loading and editing classes.
027: * Note that a number of these methods are identical to methods in
028: * <tt>Editor</tt>. It is expected that an <tt>EditorContext</tt> will have
029: * a different caching (of <tt>ClassEditor</tt>s, etc.) policy than
030: * <tt>Editor</tt> does. Hence, the methods in <tt>EditorContext</tt> should
031: * be used to edit classes, etc.
032: */
033: public interface EditorContext {
034:
035: /**
036: * Loads a class into BLOAT
037: */
038: public ClassInfo loadClass(String className)
039: throws ClassNotFoundException;
040:
041: /**
042: * Creates a new <code>ClassInfo</code>
043: *
044: * @param modifiers
045: * The modifiers describing the newly-created class
046: * @param classIndex
047: * The index of the name of the newly-created class in its
048: * constant pool
049: * @param superClassIndex
050: * The index of the name of the newly-created class's superclass
051: * in its constant pool
052: * @param interfaceIndexes
053: * The indexes of the names of the interfaces that the
054: * newly-created class implements
055: * @param constants
056: * The constant pool for the newly created class (a list of
057: * {@link Constant}s).
058: */
059: public ClassInfo newClassInfo(int modifiers, int classIndex,
060: int super ClassIndex, int[] interfaceIndexes,
061: java.util.List constants);
062:
063: /**
064: * Returns the <tt>ClassHierarchy</tt> of all classes and interfaces known
065: * to BLOAT.
066: */
067: public ClassHierarchy getHierarchy();
068:
069: /**
070: * Returns a <code>ClassEditor</code> for editing a new class with the
071: * given name. It will override any class with the given name that is
072: * already being edited.
073: */
074: public ClassEditor newClass(int modifiers, String className,
075: Type super Type, Type[] interfaces);
076:
077: /**
078: * Returns a <tt>ClassEditor</tt> used to edit a class of a given name.
079: */
080: public ClassEditor editClass(String className)
081: throws ClassNotFoundException, ClassFormatException;
082:
083: /**
084: * Returns a <tt>ClassEditor</tt> used to edit a class described by a
085: * given <tt>Type</tt>.
086: */
087: public ClassEditor editClass(Type classType)
088: throws ClassNotFoundException, ClassFormatException;
089:
090: /**
091: * Returns a <tt>ClassEditor</tt> used to edit a class described by a
092: * given <tt>ClassInfo</tt>.
093: */
094: public ClassEditor editClass(ClassInfo info);
095:
096: /**
097: * Returns a <tt>FieldEditor</tt> for editing a <tt>FieldInfo</tt>.
098: */
099: public FieldEditor editField(FieldInfo info);
100:
101: /**
102: * Returns a <tt>FieldEditor</tt> for editing a field.
103: */
104: public FieldEditor editField(MemberRef field)
105: throws NoSuchFieldException;
106:
107: /**
108: * Returns a <tt>MethodEditor</tt> for editing a method.
109: */
110: public MethodEditor editMethod(MethodInfo info);
111:
112: /**
113: * Returns a <tt>MethodEditor</tt> for editing a method.
114: */
115: public MethodEditor editMethod(MemberRef method)
116: throws NoSuchMethodException;
117:
118: /**
119: * Signals that we are done editing a method. The object used to model it
120: * may be reclaimed.
121: */
122: public void release(MethodInfo info);
123:
124: /**
125: * Signals that we are done editing a field. The object used to model it may
126: * be reclaimed.
127: */
128: public void release(FieldInfo info);
129:
130: /**
131: * Signals that we are done editing a class. The object used to model it may
132: * be reclaimed.
133: */
134: public void release(ClassInfo info);
135:
136: /**
137: * Commits the changes made to a class.
138: */
139: public void commit(ClassInfo info);
140:
141: /**
142: * Commits the changes made to a method.
143: */
144: public void commit(MethodInfo info);
145:
146: /**
147: * Commits the changes made to a field.
148: */
149: public void commit(FieldInfo info);
150:
151: /**
152: * Commits all changes made to classes, methods, and fields.
153: */
154: public void commit();
155: }
|