I removed deprecated since 1.5R3 omj.ClassOutput and moved some of code from omj/ClassNameHelper.java to omj/optimizer/OptClassNameHelper so if one does not need the optimizer package, the jar will be smaller.
This commit is contained in:
igor%mir2.org 2003-04-01 11:39:08 +00:00
Родитель 8faaa86dec
Коммит 64af9c759b
4 изменённых файлов: 90 добавлений и 138 удалений

Просмотреть файл

@ -69,14 +69,7 @@ public abstract class ClassNameHelper {
*
* @since 1.5 Release 4
*/
public String getTargetClassFileName() {
ClassRepository repository = getClassRepository();
if (repository instanceof FileClassRepository) {
return ((FileClassRepository)repository).
getTargetClassFileName(getClassName());
}
return null;
}
public abstract String getTargetClassFileName();
/**
* Set the current target class file name.
@ -87,41 +80,7 @@ public abstract class ClassNameHelper {
*
* @since 1.5 Release 4
*/
public void setTargetClassFileName(String classFileName) {
if (classFileName != null) {
setClassRepository(new FileClassRepository(classFileName));
} else {
setClassName(null);
}
}
/**
* @deprecated Application should use {@link ClassRepository} instead of
* {@link ClassOutput}.
*
* @see #getClassRepository
*/
public final ClassOutput getClassOutput() {
ClassRepository repository = getClassRepository();
if (repository instanceof ClassOutputWrapper) {
return ((ClassOutputWrapper)repository).classOutput;
}
return null;
}
/**
* @deprecated Application should use {@link ClassRepository} instead of
* {@link ClassOutput}.
*
* @see #setClassRepository
*/
public void setClassOutput(ClassOutput classOutput) {
if (classOutput != null) {
setClassRepository(new ClassOutputWrapper(classOutput));
} else {
setClassRepository(null);
}
}
public abstract void setTargetClassFileName(String classFileName);
/**
* Get the current package to generate classes into.
@ -178,76 +137,6 @@ public abstract class ClassNameHelper {
*/
public abstract void setClassName(String initialName);
// Implement class file saving here instead of inside codegen.
private class FileClassRepository implements ClassRepository {
FileClassRepository(String classFileName) {
int lastSeparator = classFileName.lastIndexOf(File.separatorChar);
String initialName;
if (lastSeparator == -1) {
generatingDirectory = null;
initialName = classFileName;
} else {
generatingDirectory = classFileName.substring(0, lastSeparator);
initialName = classFileName.substring(lastSeparator+1);
}
if (initialName.endsWith(".class"))
initialName = initialName.substring(0, initialName.length()-6);
setClassName(initialName);
}
public boolean storeClass(String className, byte[] bytes, boolean tl)
throws IOException
{
// no "elegant" way of getting file name from fully
// qualified class name.
String targetPackage = getTargetPackage();
if ((targetPackage != null) && (targetPackage.length()>0) &&
className.startsWith(targetPackage+"."))
{
className = className.substring(targetPackage.length()+1);
}
FileOutputStream out = new FileOutputStream(getTargetClassFileName(className));
out.write(bytes);
out.close();
return false;
}
String getTargetClassFileName(String className) {
StringBuffer sb = new StringBuffer();
if (generatingDirectory != null) {
sb.append(generatingDirectory);
sb.append(File.separator);
}
sb.append(className);
sb.append(".class");
return sb.toString();
}
String generatingDirectory;
};
private static class ClassOutputWrapper implements ClassRepository {
ClassOutputWrapper(ClassOutput classOutput) {
this.classOutput = classOutput;
}
public boolean storeClass(String name, byte[] bytes, boolean tl)
throws IOException
{
OutputStream out = classOutput.getOutputStream(name, tl);
out.write(bytes);
out.close();
return true;
}
ClassOutput classOutput;
}
private static ClassNameHelper savedNameHelper;
private static boolean helperNotAvailable;
}

Просмотреть файл

Просмотреть файл

@ -1443,31 +1443,6 @@ public class Context {
nameHelper.setClassRepository(classRepository);
}
/**
* @deprecated Use
* <tt>ClassNameHelper.get(cx).getClassOutput()</tt> instead.
* @see ClassNameHelper#getClassOutput
*/
public ClassOutput getClassOutput() {
ClassNameHelper nameHelper = ClassNameHelper.get(this);
if (nameHelper != null) {
return nameHelper.getClassOutput();
}
return null;
}
/**
* @deprecated Use
* <tt>ClassNameHelper.get(cx).setClassOutput(classOutput)</tt> instead.
* @see ClassNameHelper#setClassOutput
*/
public void setClassOutput(ClassOutput classOutput) {
ClassNameHelper nameHelper = ClassNameHelper.get(this);
if (nameHelper != null) {
nameHelper.setClassOutput(classOutput);
}
}
/**
* Set the security controller for this context.
* <p> SecurityController may only be set if it is currently null.

Просмотреть файл

@ -75,6 +75,40 @@ public class OptClassNameHelper extends ClassNameHelper {
return s.toString();
}
/**
* Get the current target class file name.
* <p>
* If nonnull, requests to compile source will result in one or
* more class files being generated.
*
* @since 1.5 Release 4
*/
public String getTargetClassFileName() {
ClassRepository repository = getClassRepository();
if (repository instanceof FileClassRepository) {
return ((FileClassRepository)repository).
getTargetClassFileName(getClassName());
}
return null;
}
/**
* Set the current target class file name.
* <p>
* If nonnull, requests to compile source will result in one or
* more class files being generated. If null, classes will only
* be generated in memory.
*
* @since 1.5 Release 4
*/
public void setTargetClassFileName(String classFileName) {
if (classFileName != null) {
setClassRepository(new FileClassRepository(this, classFileName));
} else {
setClassName(null);
}
}
public String getTargetPackage() {
return packageName;
}
@ -133,3 +167,57 @@ public class OptClassNameHelper extends ClassNameHelper {
private Class[] targetImplements;
private ClassRepository classRepository;
}
// Implement class file saving here instead of inside codegen.
class FileClassRepository implements ClassRepository
{
FileClassRepository(OptClassNameHelper nameHelper, String classFileName) {
this.nameHelper = nameHelper;
int lastSeparator = classFileName.lastIndexOf(File.separatorChar);
String initialName;
if (lastSeparator == -1) {
generatingDirectory = null;
initialName = classFileName;
} else {
generatingDirectory = classFileName.substring(0, lastSeparator);
initialName = classFileName.substring(lastSeparator+1);
}
if (initialName.endsWith(".class"))
initialName = initialName.substring(0, initialName.length()-6);
nameHelper.setClassName(initialName);
}
public boolean storeClass(String className, byte[] bytes, boolean tl)
throws IOException
{
// no "elegant" way of getting file name from fully
// qualified class name.
String targetPackage = nameHelper.getTargetPackage();
if ((targetPackage != null) && (targetPackage.length()>0) &&
className.startsWith(targetPackage+"."))
{
className = className.substring(targetPackage.length()+1);
}
FileOutputStream out = new FileOutputStream(getTargetClassFileName(className));
out.write(bytes);
out.close();
return false;
}
String getTargetClassFileName(String className) {
StringBuffer sb = new StringBuffer();
if (generatingDirectory != null) {
sb.append(generatingDirectory);
sb.append(File.separator);
}
sb.append(className);
sb.append(".class");
return sb.toString();
}
OptClassNameHelper nameHelper;
String generatingDirectory;
}