package bluej.extensions;

import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.WeakHashMap;

import bluej.compiler.CompileReason;
import bluej.compiler.CompileType;
import bluej.compiler.JobQueue;
import bluej.extensions.editor.Editor;
import bluej.extensions.editor.EditorBridge;
import bluej.parser.symtab.ClassInfo;
import bluej.pkgmgr.Package;
import bluej.pkgmgr.Project;
import bluej.pkgmgr.target.ClassTarget;
import bluej.pkgmgr.target.Target;
import bluej.utility.JavaNames;
import bluej.views.ConstructorView;
import bluej.views.FieldView;
import bluej.views.MethodView;
import bluej.views.View;


| A wrapper for a class. This is used to represent both classes which have a representation | within the BlueJ project, and those that don't. | | <p>From an instance of this class you can create BlueJ objects and call their methods. | Behaviour is similar to the Java reflection API. | | @author Damiano Bolla, University of Kent at Canterbury, 2002,2003,2004 | public class BClass { private static Map<Identifier,BClass> externalClasses = new WeakHashMap<Identifier,BClass>(); private Identifier classId;
| Constructor for the BClass. | It is duty of the caller to guarantee that it is a reasonable classId | BClass(Identifier thisClassId) { classId = thisClassId; }
| Get a BClass for some class identifier. To be used for classes which don't have a | representation (ClassTarget) in BlueJ. | p.public synchronized static BClass getBClass(Identifier classId) { BClass r = externalClasses.get(classId); if (r == null) { r = new BClass(classId); externalClasses.put(classId, r); } return r; }
| Notification that the name of the class has changed. | @param newName The new class name, fully qualified. | p.public void nameChanged(String newName) { try { Project proj = classId.getBluejProject(); Package pkg = classId.getBluejPackage(); classId = new Identifier(proj, pkg, newName); } catch (ProjectNotOpenException pnoe) { } catch (PackageNotFoundException pnfe) { } }
| Returns the name of this BClass. | | @return the fully qualified name of the wrapped BlueJ class. | public final String getName() { return classId.getClassName(); }
| Removes this class from BlueJ, including the underlying files. | | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws PackageNotFoundException if the package to which this class belongs has been deleted by the user. | @throws ClassNotFoundException if the class has been deleted by the user, or if the class does | not otherwise have a representation within the project. | public void remove() throws ProjectNotOpenException, PackageNotFoundException, ClassNotFoundException { ClassTarget bluejClass = classId.getClassTarget(); if (bluejClass == null) { throw new ClassNotFoundException("Can't find class: " + classId.getClassName()); } bluejClass.remove(); }
| Converts a Stride class to Java, by removing the Stride file and retaining the generated Java. | | @throws ProjectNotOpenException | @throws PackageNotFoundException | @throws ClassNotFoundException | public void convertStrideToJava() throws ProjectNotOpenException, PackageNotFoundException, ClassNotFoundException { ClassTarget bluejClass = classId.getClassTarget(); if (bluejClass == null) { throw new ClassNotFoundException("Can't find class: " + classId.getClassName()); } bluejClass.convertStrideToJava(); } public void convertJavaToStride() throws ProjectNotOpenException, PackageNotFoundException, ClassNotFoundException { ClassTarget bluejClass = classId.getClassTarget(); if (bluejClass == null) { throw new ClassNotFoundException("Can't find class: " + classId.getClassName()); } bluejClass.promptAndConvertJavaToStride(null); }
| Returns the Java class being wrapped by this BClass. | Use this method when you need more information about the class than | is provided by the BClass interface. E.g.: | | <ul> | <li>What is the real class being hidden? | <li>Is it an array? | <li>What is the type of the array element? | </ul> | | <p>Note that this is for information only. If you want to interact with BlueJ you must | use the methods provided in BClass. | | @return The javaClass value | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws ClassNotFoundException if the class has been deleted by the user. | public Class getJavaClass() throws ProjectNotOpenException, ClassNotFoundException { return classId.getJavaClass(); }
| Returns the package this class belongs to. | Similar to reflection API. | | @return The package value | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws PackageNotFoundException if the package to which this class belongs has been deleted by the user. | public BPackage getPackage() throws ProjectNotOpenException, PackageNotFoundException { Package bluejPkg = classId.getBluejPackage(); return bluejPkg.getBPackage(); }
| Returns a proxy object that provide an interface to the editor for this BClass. | If an editor already exists, a proxy for it is returned. Otherwise, an editor is created but not made visible. | | @return The proxy editor object or null if it cannot be created | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws PackageNotFoundException if the package to which this class belongs has been deleted by the user. | public Editor getEditor() throws ProjectNotOpenException, PackageNotFoundException { ClassTarget aTarget = classId.getClassTarget(); if (aTarget == null) { return null; } return EditorBridge.newEditor(aTarget); }
| Finds out whether this class has source code available, and whether it's Java or Stride | public SourceType getSourceType() throws ProjectNotOpenException, PackageNotFoundException { ClassTarget aTarget = classId.getClassTarget(); if (aTarget != null) return aTarget.getSourceType(); else{ return null; } }
| Checks to see if this class has been compiled. | | @return true if it is compiled false othervise. | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws PackageNotFoundException if the package to which this class belongs has been deleted by the user. | public boolean isCompiled() throws ProjectNotOpenException, PackageNotFoundException { ClassTarget aTarget = classId.getClassTarget(); return aTarget == null || aTarget.isCompiled(); }
| Compile this class, and any dependents. | | <p>After the compilation has finished the method isCompiled() can be used to determined the class | status. | | <p>A single CompileEvent will be generated with all dependent files listed. | | <p>A call to this method is equivalent to: <code>compile(waitCompileEnd, false)</code>. | | @param waitCompileEnd <code>true</code> waits for the compilation to be finished. | @throws ProjectNotOpenException if the project to which this class belongs has been closed. | @throws PackageNotFoundException if the package to which this class belongs has been deleted. | @throws CompilationNotStartedException if BlueJ is currently executing Java code. | public void compile(boolean waitCompileEnd) throws ProjectNotOpenException, PackageNotFoundException, CompilationNotStartedException { compile(waitCompileEnd, false); }
| Compile this class, and any dependents, optionally without showing compilation errors to the user. | | <p>After the compilation has finished the method isCompiled() can be used to determined the class | status. | | <p>A single CompileEvent with all dependent files listed will be generated. | | @param waitCompileEnd <code>true</code> waits for the compilation to be finished. | @param forceQuiet if true, compilation errors will not be shown/highlighted to the user. | @throws ProjectNotOpenException if the project to which this class belongs has been closed. | @throws PackageNotFoundException if the package to which this class belongs has been deleted. | @throws CompilationNotStartedException if BlueJ is currently executing Java code. | public void compile(boolean waitCompileEnd, boolean forceQuiet) throws ProjectNotOpenException, PackageNotFoundException, CompilationNotStartedException { Package bluejPkg = classId.getBluejPackage(); ClassTarget aTarget = classId.getClassTarget(); if (aTarget == null) { throw new CompilationNotStartedException("Class target does not (any longer) exist"); } if (!bluejPkg.isDebuggerIdle()) { throw new CompilationNotStartedException("BlueJ is currently executing Java code"); } bluejPkg.compile(aTarget, forceQuiet, null, CompileReason.EXTENSION, CompileType.EXTENSION); if (waitCompileEnd) { JobQueue.getJobQueue().waitForEmptyQueue(); } }
| Utility. Finds the package name given a fully qualified name | If no package exist then an empty string is returned. | | @param fullyQualifiedName Description of the Parameter | @return Description of the Return Value | private String findPkgName(String fullyQualifiedName) { if (fullyQualifiedName == null) { return ""; } int dotIndex = fullyQualifiedName.lastIndexOf("."); if (dotIndex < 0) { return ""; } return fullyQualifiedName.substring(0, dotIndex); }
| Returns the superclass of this class. | | <p>Similar to reflection API. | | <p>If this class represents either the Object class, an interface, | a primitive type, or void, then null is returned. | | @return The superclass value | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws PackageNotFoundException if the package to which this class belongs has been deleted by the user. | @throws ClassNotFoundException if the class has been deleted by the user. | public BClass getSuperclass() throws ProjectNotOpenException, PackageNotFoundException, ClassNotFoundException { Project bluejPrj = classId.getBluejProject(); ClassTarget ct = classId.getClassTarget(); if (ct != null && ! ct.isCompiled()) { ClassInfo info = ct.getSourceInfo().getInfo(getJavaFile(), ct.getPackage()); if (info != null) { String superClass = info.getSuperclass(); superClass = (superClass == null) ? "" : superClass; String pkgString = JavaNames.getPrefix(superClass); Package bjPkg = bluejPrj.getPackage(pkgString); if (bjPkg != null) { Target sct = bjPkg.getTarget(JavaNames.getBase(superClass)); if (sct instanceof ClassTarget) { return ((ClassTarget) sct).getBClass(); } } Identifier sid = new Identifier(bluejPrj, null, superClass); return BClass.getBClass(sid); } return null; } View bluejView = classId.getBluejView(); View superView = bluejView.getSuper(); if (superView == null) { return null; } Class<?> aTest = bluejPrj.loadClass(superView.getQualifiedName()); if (aTest == null) { return null; } String classPkgName = findPkgName(superView.getQualifiedName()); Package bluejPkg = bluejPrj.getPackage(classPkgName); if (bluejPkg != null) { Target aTarget = bluejPkg.getTarget (superView.getBaseName()); if (aTarget instanceof ClassTarget) { ClassTarget classTarget = (ClassTarget) aTarget; return classTarget.getBClass(); } } Identifier id = new Identifier(bluejPrj, null, superView.getQualifiedName()); return BClass.getBClass(id); }
| Returns all the constructors of this class. | Similar to reflection API. | | @return The constructors value | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws ClassNotFoundException if the class has been deleted by the user. | public BConstructor[] getConstructors() throws ProjectNotOpenException, ClassNotFoundException { View bluejView = classId.getBluejView(); ConstructorView[] constructorViews = bluejView.getConstructors(); BConstructor[] result = new BConstructor[constructorViews.length]; for (int index = 0; index < constructorViews.length; index++) { result[index] = new BConstructor(classId, constructorViews[index]); } return result; }
| Returns the constructor for this class which has the given signature. | Similar to reflection API. | | @param signature the signature of the required constructor. | @return the requested constructor of this class, or null if | the class has not been compiled or the constructor cannot be found. | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws ClassNotFoundException if the class has been deleted by the user. | public BConstructor getConstructor(Class<?>[] signature) throws ProjectNotOpenException, ClassNotFoundException { View bluejView = classId.getBluejView(); ConstructorView[] constructorViews = bluejView.getConstructors(); for (int index = 0; index < constructorViews.length; index++) { BConstructor aConstr = new BConstructor(classId, constructorViews[index]); if (aConstr.matches(signature)) { return aConstr; } } return null; }
| Returns the declared methods of this class. | Similar to reflection API. | | @return The declaredMethods value | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws ClassNotFoundException if the class has been deleted by the user. | public BMethod[] getDeclaredMethods() throws ProjectNotOpenException, ClassNotFoundException { View bluejView = classId.getBluejView(); MethodView[] methodView = bluejView.getDeclaredMethods(); BMethod[] methods = new BMethod[methodView.length]; for (int index = 0; index < methods.length; index++) { methods[index] = new BMethod(classId, methodView[index]); } return methods; }
| Returns the declared method of this class which has the given signature. | Similar to reflection API. | | @param methodName The name of the method. | @param params The parameters of the method. Pass a zero length array if the method takes no arguments. | @return The declaredMethod value or <code>null</code> if the method is not found. | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws ClassNotFoundException if the class has been deleted by the user. | public BMethod getDeclaredMethod(String methodName, Class<?>[] params) throws ProjectNotOpenException, ClassNotFoundException { View bluejView = classId.getBluejView(); MethodView[] methodView = bluejView.getDeclaredMethods(); for (int index = 0; index < methodView.length; index++) { BMethod aResul = new BMethod(classId, methodView[index]); if (aResul.matches(methodName, params)) { return aResul; } } return null; }
| Returns all methods of this class, those declared and those inherited from all ancestors. | Similar to reflection API, except that all methods, declared and inherited, are returned, and not only the public ones. | That is, it returns all public, private, protected, and package-access methods, inherited or declared. | The elements in the array returned are not sorted and are not in any particular order. | | @return The Methods value | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws ClassNotFoundException if the class has been deleted by the user. | public BMethod[] getMethods() throws ProjectNotOpenException, ClassNotFoundException { View bluejView = classId.getBluejView(); MethodView[] methodView = bluejView.getAllMethods(); BMethod[] methods = new BMethod[methodView.length]; for (int index = 0; index < methods.length; index++) { methods[index] = new BMethod(classId, methodView[index]); } return methods; }
| Returns the method of this class with the given signature. | Similar to reflection API, except that all methods, declared and inherited, are searched, and not only the public ones. | That is, it searches all public, private, protected, and package-access methods, declared or inherited from all ancestors. | If the searched method has been redefined, the returned method is chosen arbitrarily from the list of inherited and declared methods. | | @param methodName The name of the method | @param params The parameters of the method. Pass a zero length array if the method takes no arguments. | @return The Method value or <code>null</code> if the method is not found. | @throws ProjectNotOpenException If the project to which this class belongs has been closed by the user | @throws ClassNotFoundException If the class has been deleted by the user | public BMethod getMethod(String methodName, Class<?>[] params) throws ProjectNotOpenException, ClassNotFoundException { View bluejView = classId.getBluejView(); MethodView[] methodView = bluejView.getAllMethods(); for (int index = 0; index < methodView.length; index++) { BMethod aResul = new BMethod(classId, methodView[index]); if (aResul.matches(methodName, params)) { return aResul; } } return null; }
| Returns all the fields of this class. | Similar to reflection API. | | @return The fields value | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws ClassNotFoundException if the class has been deleted by the user. | public BField[] getFields() throws ProjectNotOpenException, ClassNotFoundException { View bluejView = classId.getBluejView(); FieldView[] fieldView = bluejView.getAllFields(); BField[] bFields = new BField[fieldView.length]; for (int index = 0; index < fieldView.length; index++) { bFields[index] = new BField(classId, fieldView[index]); } return bFields; }
| Returns the field of this class which has the given name. | Similar to Reflection API. | | @param fieldName Description of the Parameter | @return The field value | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws ClassNotFoundException if the class has been deleted by the user. | public BField getField(String fieldName) throws ProjectNotOpenException, ClassNotFoundException { if (fieldName == null) { return null; } View bluejView = classId.getBluejView(); FieldView[] fieldView = bluejView.getAllFields(); for (int index = 0; index < fieldView.length; index++) { BField result = new BField(classId, fieldView[index]); if (result.getName().equals(fieldName)) { return result; } } return null; }
| Returns the class target of this class. May return <code>null</code> if | the class target is no longer valid. | | @return The class target of this class or <code>null</code> if there is | no such class target. | @throws ProjectNotOpenException | if the project to which this class belongs has been closed by | the user. | @throws PackageNotFoundException | if the package to which this class belongs has been deleted | by the user. | public BClassTarget getClassTarget() throws ProjectNotOpenException, PackageNotFoundException { ClassTarget classTarget = classId.getClassTarget(); return (classTarget != null) ? classTarget.getBClassTarget() : null; }
| Returns this class's .class file (or null, if the class no longer exists in the project). | | @return the class .class file. | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws PackageNotFoundException if the package to which this class belongs has been deleted by the user. | public File getClassFile() throws ProjectNotOpenException, PackageNotFoundException { ClassTarget aTarget = classId.getClassTarget(); if (aTarget == null) { return null; } return aTarget.getClassFile(); }
| Returns this class's .java file. | If the file is currently being edited, calling this method will cause it to be saved. | | @return the class .java file. | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws PackageNotFoundException if the package to which this class belongs has been deleted by the user. | public File getJavaFile() throws ProjectNotOpenException, PackageNotFoundException { ClassTarget aTarget = classId.getClassTarget(); if (aTarget == null) { return null; } if (aTarget.editorOpen()) { bluej.editor.Editor anEditor = aTarget.getEditor(); if (anEditor != null) { try { anEditor.save(); } catch (IOException ioe) { } } } return aTarget.getJavaSourceFile(); }
| Signal to BlueJ that an extension is about to begin changing the source file of this class. | The file containing the source for this class can be found using getJavaFile(); | If the file is currently being edited it will be saved and the editor will be set read-only. | | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws PackageNotFoundException if the package to which this class belongs has been deleted by the user. | @deprecated As of BlueJ 2.0, replaced by {}link Editor#setReadOnly(boolean readOnly)} | @Deprecated public void beginChangeSource() throws ProjectNotOpenException, PackageNotFoundException { ClassTarget aTarget = classId.getClassTarget(); if (aTarget == null) { return; } bluej.editor.Editor anEditor = aTarget.getEditor(); if (anEditor == null) { return; } try { anEditor.save(); } catch (IOException ioe) { } anEditor.setReadOnly(true); }
| Signal to BlueJ that an extension has finished changing the source file of this class. | If the file is currently being edited, this will cause it to be re-loaded and the editor to be set read/write. | | @throws ProjectNotOpenException if the project to which this class belongs has been closed by the user. | @throws PackageNotFoundException if the package to which this class belongs has been deleted by the user. | @deprecated As of BlueJ 2.0, replaced by {}link Editor#setReadOnly(boolean readOnly)} | @Deprecated public void endChangeSource() throws ProjectNotOpenException, PackageNotFoundException { ClassTarget aTarget = classId.getClassTarget(); if (aTarget == null) { return; } bluej.editor.Editor anEditor = aTarget.getEditor(); if (anEditor == null) { return; } anEditor.reloadFile(); anEditor.setReadOnly(false); }
| Returns a string representation of the Object | | @return Description of the Return Value | public String toString() { try { Class<?> javaClass = classId.getJavaClass(); return "BClass: " + javaClass.getName(); } catch (ExtensionException exc) { return "BClass: INVALID"; } } }
top, use, map, class BClass

.   getBClass
.   nameChanged
.   getName
.   remove
.   convertStrideToJava
.   convertJavaToStride
.   getJavaClass
.   getPackage
.   getEditor
.   getSourceType
.   isCompiled
.   compile
.   compile
.   findPkgName
.   getSuperclass
.   getConstructors
.   getConstructor
.   getDeclaredMethods
.   getDeclaredMethod
.   getMethods
.   getMethod
.   getFields
.   getField
.   getClassTarget
.   getClassFile
.   getJavaFile
.   beginChangeSource
.   endChangeSource
.   toString




609 neLoCode + 163 LoComm