📄 jclass.java
字号:
}
return filename;
} //-- getFilename
/**
* Returns the Java Doc comment for this JClass
* @return the JDocComment for this JClass
**/
public JDocComment getJDocComment() {
return jdc;
} //-- getJDocComment
/**
* Returns the member with the given name, or null if no member
* was found with the given name
* @param name the name of the member to return
* @return the member with the given name, or null if no member
* was found with the given name
**/
public JMember getMember(String name) {
return (JMember)members.get(name);
} //-- getMember
public JMember[] getMembers() {
int size = members.size();
JMember[] marray = new JMember[size];
for (int i = 0; i < size; i++) {
marray[i] = (JMember)members.get(i);
}
return marray;
} //-- getMembers
public JMethod[] getMethods() {
int size = methods.size();
JMethod[] marray = new JMethod[size];
for (int i = 0; i < methods.size(); i++) {
marray[i] = (JMethod)methods.elementAt(i);
}
return marray;
} //-- getMethods
public JMethod getMethod(String name, int startIndex) {
for (int i = startIndex; i < methods.size(); i++) {
JMethod jMethod = (JMethod)methods.elementAt(i);
if (jMethod.getName().equals(name)) return jMethod;
}
return null;
}
public JMethod getMethod(int index) {
return (JMethod)methods.elementAt(index);
}
/**
* Returns the JModifiers which allows the qualifiers to be changed
* @return the JModifiers for this JClass
**/
public JModifiers getModifiers() {
return modifiers;
} //-- getModifiers
/**
* Returns the name of the package that this JClass is a member of
* @return the name of the package that this JClass is a member of,
* or null if there is no current package name defined
**/
public String getPackageName() {
return this.packageName;
} //-- getPackageName
public static boolean isValidClassName(String name) {
//** add class name validation */
return true;
} //-- isValidClassName
public void print() {
print(null,null);
} //-- printSrouce
/**
* Prints the source code for this JClass
* @param lineSeparator the line separator to use at the end of each line.
* If null, then the default line separator for the runtime platform will
* be used.
**/
public void print(String destDir, String lineSeparator) {
print(destDir, lineSeparator, JSourceWriter.DEFAULT_SIZE);
}
public void print(String destDir, String lineSeparator, int size) {
String name = getLocalName();
//-- open output file
String filename = getFilename(destDir);
File file = new File(filename);
JSourceWriter jsw = null;
try {
jsw = new JSourceWriter(new FileWriter(file), (short)size, false);
}
catch(java.io.IOException ioe) {
System.out.println("unable to create class file: " + filename);
return;
}
if (lineSeparator == null) {
lineSeparator = System.getProperty("line.separator");
}
jsw.setLineSeparator(lineSeparator);
StringBuffer buffer = new StringBuffer();
//-- write class header
if (header != null) header.print(jsw);
else {
jsw.writeln("/*");
jsw.writeln(" * " + DEFAULT_HEADER);
jsw.writeln("*/");
}
jsw.writeln();
jsw.flush();
//-- print package name
if ((packageName != null) && (packageName.length() > 0)) {
buffer.setLength(0);
buffer.append("package ");
buffer.append(packageName);
buffer.append(';');
jsw.writeln(buffer.toString());
jsw.writeln();
}
//-- print imports
jsw.writeln();
for (int i = 0; i < imports.size(); i++) {
jsw.write("import ");
jsw.write(imports.elementAt(i));
jsw.writeln(';');
}
jsw.writeln();
//------------/
//- Java Doc -/
//------------/
jdc.print(jsw);
//-- print class information
//-- we need to add some JavaDoc API adding comments
buffer.setLength(0);
if (modifiers.isPrivate()) {
buffer.append("private ");
}
else if (modifiers.isPublic()) {
buffer.append("public ");
}
if (modifiers.isAbstract()) {
buffer.append("abstract ");
}
buffer.append("class ");
buffer.append(getLocalName());
buffer.append(' ');
if (superClass != null) {
buffer.append("extends ");
buffer.append(superClass);
buffer.append(' ');
}
if (interfaces.size() > 0) {
int iSize = interfaces.size();
boolean endl = false;
if ((iSize > 1) || (superClass != null)) {
jsw.writeln(buffer.toString());
buffer.setLength(0);
endl = true;
}
buffer.append("implements ");
for (int i = 0; i < iSize; i++) {
if (i > 0) buffer.append(", ");
buffer.append(interfaces.elementAt(i));
}
if (endl) {
jsw.writeln(buffer.toString());
buffer.setLength(0);
}
else buffer.append(' ');
}
buffer.append('{');
jsw.writeln(buffer.toString());
buffer.setLength(0);
jsw.writeln();
jsw.indent();
//-- declare members
for (int i = 0; i < members.size(); i++) {
JMember jMember = (JMember)members.get(i);
//-- print Java comment
JDocComment comment = jMember.getComment();
if (comment != null) comment.print(jsw);
// -- print member
jsw.write(jMember.getModifiers().toString());
jsw.write(' ');
JType type = jMember.getType();
String typeName = type.toString();
//-- for esthetics use short name in some cases
if (typeName.equals(toString())) {
typeName = type.getLocalName();
}
jsw.write(typeName);
jsw.write(' ');
jsw.write(jMember.getName());
String init = jMember.getInitString();
if (init != null) {
jsw.write(" = ");
jsw.write(init);
}
jsw.writeln(';');
//jsw.writeln();
}
jsw.writeln();
//-- print constructors
for (int i = 0; i < constructors.size(); i++) {
JConstructor jConstructor = (JConstructor)constructors.elementAt(i);
jConstructor.print(jsw);
jsw.writeln();
}
for (int i = 0; i < methods.size(); i++) {
JMethod jMethod = (JMethod)methods.elementAt(i);
jMethod.print(jsw);
jsw.writeln();
}
jsw.unindent();
jsw.writeln('}');
jsw.flush();
jsw.close();
} //-- printSource
/**
* Sets the header comment for this JClass
* @param comment the comment to display at the top of the source file
* when printed
**/
public void setHeader(JComment comment) {
this.header = comment;
} //-- setHeader
/**
* Allows changing the package name of this JClass
* @param packageName the package name to use
**/
public void setPackageName(String packageName) {
this.packageName = packageName;
changePackage(packageName);
} //-- setPackageName
/**
* Sets the super Class that this class extends
* @param superClass the super Class that this Class extends
**/
public void setSuperClass(String superClass) {
this.superClass = superClass;
} //-- setSuperClass
//-------------------/
//- Private Methods -/
//-------------------/
/**
*
**/
private void printlnWithPrefix(String prefix, String source, JSourceWriter jsw) {
jsw.write(prefix);
if (source == null) return;
char[] chars = source.toCharArray();
int lastIdx = 0;
for (int i = 0; i < chars.length; i++) {
char ch = chars[i];
if (ch == '\n') {
//-- free buffer
jsw.write(chars,lastIdx,(i-lastIdx)+1);
lastIdx = i+1;
if (i < chars.length) {
jsw.write(prefix);
}
}
}
//-- free buffer
if (lastIdx < chars.length) {
jsw.write(chars, lastIdx, chars.length-lastIdx);
}
jsw.writeln();
} //-- printWithPrefix
private static String getPackageFromClassName(String className) {
int idx = -1;
if ((idx = className.lastIndexOf('.')) > 0) {
return className.substring(0, idx);
}
return null;
} //-- getPackageFromClassName
/**
* Test drive method...to be removed or commented out
**
public static void main(String[] args) {
JClass testClass = new JClass("Test");
testClass.addImport("java.util.Vector");
testClass.addMember(new JMember(JType.Int, "x"));
JClass jcString = new JClass("String");
JMember jMember = new JMember(jcString, "myString");
jMember.getModifiers().makePrivate();
testClass.addMember(jMember);
//-- create constructor
JConstructor cons = testClass.createConstructor();
testClass.addConstructor(cons);
cons.getSourceCode().add("this.x = 6;");
JMethod jMethod = new JMethod(JType.Int, "getX");
jMethod.setSourceCode("return this.x;");
testClass.addMethod(jMethod);
testClass.print();
} //-- main
/* */
} //-- JClass
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -