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. git-svn-id: svn://10.0.0.236/trunk@140481 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is Rhino code, released
|
||||
* May 6, 1999.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1997-2000 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Andi Vajda
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the
|
||||
* terms of the GNU Public License (the "GPL"), in which case the
|
||||
* provisions of the GPL are applicable instead of those above.
|
||||
* If you wish to allow use of your version of this file only
|
||||
* under the terms of the GPL and not to allow others to use your
|
||||
* version of this file under the NPL, indicate your decision by
|
||||
* deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this
|
||||
* file under either the NPL or the GPL.
|
||||
*/
|
||||
package org.mozilla.javascript;
|
||||
|
||||
// API class
|
||||
|
||||
import java.io.*;
|
||||
|
||||
/**
|
||||
* @deprecated To store generated bytecode implement {@link ClassRepository}
|
||||
* instead.
|
||||
*/
|
||||
public interface ClassOutput {
|
||||
/**
|
||||
* @deprecated
|
||||
* @see ClassRepository#storeClass
|
||||
*/
|
||||
public OutputStream getOutputStream(String className, boolean isTopLevel)
|
||||
throws IOException;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user