From 75c07438a8cc7ab2e228fefad2a3fa8bb9247a7e Mon Sep 17 00:00:00 2001 From: "igor%mir2.org" Date: Tue, 1 Apr 2003 11:39:08 +0000 Subject: [PATCH] Work for http://bugzilla.mozilla.org/show_bug.cgi?id=198208 : 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 --- .../mozilla/javascript/ClassNameHelper.java | 115 +----------------- .../org/mozilla/javascript/ClassOutput.java | 52 -------- .../src/org/mozilla/javascript/Context.java | 25 ---- .../optimizer/OptClassNameHelper.java | 88 ++++++++++++++ 4 files changed, 90 insertions(+), 190 deletions(-) delete mode 100644 mozilla/js/rhino/src/org/mozilla/javascript/ClassOutput.java diff --git a/mozilla/js/rhino/src/org/mozilla/javascript/ClassNameHelper.java b/mozilla/js/rhino/src/org/mozilla/javascript/ClassNameHelper.java index 9046a4fba7d..735f6f472cf 100644 --- a/mozilla/js/rhino/src/org/mozilla/javascript/ClassNameHelper.java +++ b/mozilla/js/rhino/src/org/mozilla/javascript/ClassNameHelper.java @@ -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; } diff --git a/mozilla/js/rhino/src/org/mozilla/javascript/ClassOutput.java b/mozilla/js/rhino/src/org/mozilla/javascript/ClassOutput.java deleted file mode 100644 index 41a443d9e6a..00000000000 --- a/mozilla/js/rhino/src/org/mozilla/javascript/ClassOutput.java +++ /dev/null @@ -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; -} diff --git a/mozilla/js/rhino/src/org/mozilla/javascript/Context.java b/mozilla/js/rhino/src/org/mozilla/javascript/Context.java index d3cd3e76888..447689be86f 100644 --- a/mozilla/js/rhino/src/org/mozilla/javascript/Context.java +++ b/mozilla/js/rhino/src/org/mozilla/javascript/Context.java @@ -1443,31 +1443,6 @@ public class Context { nameHelper.setClassRepository(classRepository); } - /** - * @deprecated Use - * ClassNameHelper.get(cx).getClassOutput() instead. - * @see ClassNameHelper#getClassOutput - */ - public ClassOutput getClassOutput() { - ClassNameHelper nameHelper = ClassNameHelper.get(this); - if (nameHelper != null) { - return nameHelper.getClassOutput(); - } - return null; - } - - /** - * @deprecated Use - * ClassNameHelper.get(cx).setClassOutput(classOutput) 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. *

SecurityController may only be set if it is currently null. diff --git a/mozilla/js/rhino/src/org/mozilla/javascript/optimizer/OptClassNameHelper.java b/mozilla/js/rhino/src/org/mozilla/javascript/optimizer/OptClassNameHelper.java index 61b2e7f1710..cffd1f3e2c2 100644 --- a/mozilla/js/rhino/src/org/mozilla/javascript/optimizer/OptClassNameHelper.java +++ b/mozilla/js/rhino/src/org/mozilla/javascript/optimizer/OptClassNameHelper.java @@ -75,6 +75,40 @@ public class OptClassNameHelper extends ClassNameHelper { return s.toString(); } + /** + * Get the current target class file name. + *

+ * 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. + *

+ * 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; +} +