Fix more warnings.
git-svn-id: svn://10.0.0.236/trunk@248538 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
49ffa552f7
commit
f8fc717e42
@ -104,8 +104,7 @@ public final class LazilyLoadedCtor implements java.io.Serializable {
|
||||
|
||||
private Object buildValue()
|
||||
{
|
||||
Class<? extends Scriptable> cl =
|
||||
(Class<? extends Scriptable>)Kit.classOrNull(className);
|
||||
Class<? extends Scriptable> cl = cast(Kit.classOrNull(className));
|
||||
if (cl != null) {
|
||||
try {
|
||||
Object value = ScriptableObject.buildClassCtor(scope, cl,
|
||||
@ -133,5 +132,10 @@ public final class LazilyLoadedCtor implements java.io.Serializable {
|
||||
}
|
||||
return Scriptable.NOT_FOUND;
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked"})
|
||||
private Class<? extends Scriptable> cast(Class<?> cl) {
|
||||
return (Class<? extends Scriptable>)cl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -48,7 +48,8 @@ package org.mozilla.javascript;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.io.IOException;
|
||||
import java.util.Hashtable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* This class implements the JavaScript parser.
|
||||
@ -93,7 +94,7 @@ public class Parser
|
||||
ScriptOrFnNode currentScriptOrFn;
|
||||
Node.Scope currentScope;
|
||||
private int nestingOfWith;
|
||||
private Hashtable labelSet; // map of label names into nodes
|
||||
private Map<String,Node> labelSet; // map of label names into nodes
|
||||
private ObjArray loopSet;
|
||||
private ObjArray loopAndSwitchSet;
|
||||
private boolean hasReturnValue;
|
||||
@ -542,7 +543,7 @@ public class Parser
|
||||
currentScope = fnNode;
|
||||
int savedNestingOfWith = nestingOfWith;
|
||||
nestingOfWith = 0;
|
||||
Hashtable savedLabelSet = labelSet;
|
||||
Map<String,Node> savedLabelSet = labelSet;
|
||||
labelSet = null;
|
||||
ObjArray savedLoopSet = loopSet;
|
||||
loopSet = null;
|
||||
@ -691,7 +692,7 @@ public class Parser
|
||||
String name = ts.getString();
|
||||
decompiler.addName(name);
|
||||
if (labelSet != null) {
|
||||
label = (Node)labelSet.get(name);
|
||||
label = labelSet.get(name);
|
||||
}
|
||||
if (label == null) {
|
||||
reportError("msg.undef.label");
|
||||
@ -1212,7 +1213,7 @@ public class Parser
|
||||
decompiler.addEOL(Token.COLON);
|
||||
|
||||
if (labelSet == null) {
|
||||
labelSet = new Hashtable();
|
||||
labelSet = new HashMap<String,Node>();
|
||||
} else if (labelSet.containsKey(name)) {
|
||||
reportError("msg.dup.label");
|
||||
}
|
||||
|
||||
@ -46,7 +46,7 @@ public class ScriptOrFnNode extends Node.Scope {
|
||||
|
||||
public ScriptOrFnNode(int nodeType) {
|
||||
super(nodeType);
|
||||
symbols = new ArrayList(4);
|
||||
symbols = new ArrayList<Symbol>(4);
|
||||
setParent(null);
|
||||
}
|
||||
|
||||
@ -170,7 +170,7 @@ public class ScriptOrFnNode extends Node.Scope {
|
||||
*/
|
||||
void flattenSymbolTable(boolean flattenAllTables) {
|
||||
if (!flattenAllTables) {
|
||||
ArrayList newSymbols = new ArrayList();
|
||||
ArrayList<Symbol> newSymbols = new ArrayList<Symbol>();
|
||||
if (this.symbolTable != null) {
|
||||
// Just replace "symbols" with the symbols in this object's
|
||||
// symbol table. Can't just work from symbolTable map since
|
||||
@ -220,7 +220,7 @@ public class ScriptOrFnNode extends Node.Scope {
|
||||
private ObjArray functions;
|
||||
private ObjArray regexps;
|
||||
|
||||
private ArrayList symbols;
|
||||
private ArrayList<Symbol> symbols;
|
||||
private int paramCount = 0;
|
||||
private String[] variableNames;
|
||||
private boolean[] isConsts;
|
||||
|
||||
@ -75,7 +75,7 @@ public class ScriptableInputStream extends ObjectInputStream {
|
||||
}
|
||||
}
|
||||
|
||||
protected Class resolveClass(ObjectStreamClass desc)
|
||||
protected Class<?> resolveClass(ObjectStreamClass desc)
|
||||
throws IOException, ClassNotFoundException
|
||||
{
|
||||
String name = desc.getName();
|
||||
|
||||
@ -39,7 +39,8 @@
|
||||
|
||||
package org.mozilla.javascript.serialize;
|
||||
|
||||
import java.util.Hashtable;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.StringTokenizer;
|
||||
import java.io.*;
|
||||
|
||||
@ -78,7 +79,7 @@ public class ScriptableOutputStream extends ObjectOutputStream {
|
||||
{
|
||||
super(out);
|
||||
this.scope = scope;
|
||||
table = new Hashtable(31);
|
||||
table = new HashMap<Object,String>();
|
||||
table.put(scope, "");
|
||||
enableReplaceObject(true);
|
||||
excludeStandardObjectNames();
|
||||
@ -203,5 +204,5 @@ public class ScriptableOutputStream extends ObjectOutputStream {
|
||||
}
|
||||
|
||||
private Scriptable scope;
|
||||
private Hashtable table;
|
||||
private Map<Object,String> table;
|
||||
}
|
||||
|
||||
@ -83,6 +83,7 @@ class Namespace extends IdScriptableObject
|
||||
return ns.getPrefix();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return uri();
|
||||
}
|
||||
@ -95,22 +96,26 @@ class Namespace extends IdScriptableObject
|
||||
return uri().equals(n.uri());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof Namespace)) return false;
|
||||
return equals((Namespace)obj);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object equivalentValues(Object value) {
|
||||
if (!(value instanceof Namespace)) return Scriptable.NOT_FOUND;
|
||||
boolean result = equals((Namespace)value);
|
||||
return result ? Boolean.TRUE : Boolean.FALSE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getClassName() {
|
||||
return "Namespace";
|
||||
}
|
||||
|
||||
public Object getDefaultValue(Class hint) {
|
||||
@Override
|
||||
public Object getDefaultValue(Class<?> hint) {
|
||||
return uri();
|
||||
}
|
||||
|
||||
@ -120,11 +125,13 @@ class Namespace extends IdScriptableObject
|
||||
Id_uri = 2,
|
||||
MAX_INSTANCE_ID = 2;
|
||||
|
||||
@Override
|
||||
protected int getMaxInstanceId()
|
||||
{
|
||||
return super.getMaxInstanceId() + MAX_INSTANCE_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int findInstanceIdInfo(String s)
|
||||
{
|
||||
int id;
|
||||
@ -152,6 +159,7 @@ class Namespace extends IdScriptableObject
|
||||
}
|
||||
// #/string_id_map#
|
||||
|
||||
@Override
|
||||
protected String getInstanceIdName(int id)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
@ -161,6 +169,7 @@ class Namespace extends IdScriptableObject
|
||||
return super.getInstanceIdName(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object getInstanceIdValue(int id)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
@ -181,6 +190,7 @@ class Namespace extends IdScriptableObject
|
||||
Id_toSource = 3,
|
||||
MAX_PROTOTYPE_ID = 3;
|
||||
|
||||
@Override
|
||||
protected int findPrototypeId(String s)
|
||||
{
|
||||
int id;
|
||||
@ -201,6 +211,7 @@ class Namespace extends IdScriptableObject
|
||||
}
|
||||
// #/string_id_map#
|
||||
|
||||
@Override
|
||||
protected void initPrototypeId(int id)
|
||||
{
|
||||
String s;
|
||||
@ -214,6 +225,7 @@ class Namespace extends IdScriptableObject
|
||||
initPrototypeMethod(NAMESPACE_TAG, id, s, arity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execIdCall(IdFunctionObject f,
|
||||
Context cx,
|
||||
Scriptable scope,
|
||||
|
||||
@ -80,6 +80,7 @@ final class QName extends IdScriptableObject
|
||||
exportAsJSClass(MAX_PROTOTYPE_ID, getParentScope(), sealed);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
// ECMA357 13.3.4.2
|
||||
if (delegate.getNamespace() == null) {
|
||||
@ -97,12 +98,10 @@ final class QName extends IdScriptableObject
|
||||
return delegate.getLocalName();
|
||||
}
|
||||
|
||||
/**
|
||||
@deprecated
|
||||
|
||||
This property is supposed to be invisible and I think we can make it private at some point, though Namespace
|
||||
might need it
|
||||
*/
|
||||
/*
|
||||
* TODO This property is supposed to be invisible and I think we can
|
||||
* make it private at some point, though Namespace might need it
|
||||
*/
|
||||
String prefix() {
|
||||
if (delegate.getNamespace() == null) return null;
|
||||
return delegate.getNamespace().getPrefix();
|
||||
@ -122,11 +121,13 @@ final class QName extends IdScriptableObject
|
||||
return delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if(!(obj instanceof QName)) return false;
|
||||
return equals((QName)obj);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object equivalentValues(Object value)
|
||||
{
|
||||
if(!(value instanceof QName)) return Scriptable.NOT_FOUND;
|
||||
@ -138,11 +139,13 @@ final class QName extends IdScriptableObject
|
||||
return this.delegate.isEqualTo(q.delegate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getClassName() {
|
||||
return "QName";
|
||||
}
|
||||
|
||||
public Object getDefaultValue(Class hint) {
|
||||
@Override
|
||||
public Object getDefaultValue(Class<?> hint) {
|
||||
return toString();
|
||||
}
|
||||
|
||||
@ -152,11 +155,13 @@ final class QName extends IdScriptableObject
|
||||
Id_uri = 2,
|
||||
MAX_INSTANCE_ID = 2;
|
||||
|
||||
@Override
|
||||
protected int getMaxInstanceId()
|
||||
{
|
||||
return super.getMaxInstanceId() + MAX_INSTANCE_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int findInstanceIdInfo(String s)
|
||||
{
|
||||
int id;
|
||||
@ -184,6 +189,7 @@ final class QName extends IdScriptableObject
|
||||
}
|
||||
// #/string_id_map#
|
||||
|
||||
@Override
|
||||
protected String getInstanceIdName(int id)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
@ -193,6 +199,7 @@ final class QName extends IdScriptableObject
|
||||
return super.getInstanceIdName(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object getInstanceIdValue(int id)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
@ -209,6 +216,7 @@ final class QName extends IdScriptableObject
|
||||
Id_toSource = 3,
|
||||
MAX_PROTOTYPE_ID = 3;
|
||||
|
||||
@Override
|
||||
protected int findPrototypeId(String s)
|
||||
{
|
||||
int id;
|
||||
@ -229,6 +237,7 @@ final class QName extends IdScriptableObject
|
||||
}
|
||||
// #/string_id_map#
|
||||
|
||||
@Override
|
||||
protected void initPrototypeId(int id)
|
||||
{
|
||||
String s;
|
||||
@ -242,6 +251,7 @@ final class QName extends IdScriptableObject
|
||||
initPrototypeMethod(QNAME_TAG, id, s, arity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execIdCall(IdFunctionObject f,
|
||||
Context cx,
|
||||
Scriptable scope,
|
||||
|
||||
@ -59,6 +59,7 @@ class XML extends XMLObjectImpl {
|
||||
this.node.setXml(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
final XML getXML() {
|
||||
return this;
|
||||
}
|
||||
@ -74,7 +75,7 @@ class XML extends XMLObjectImpl {
|
||||
}
|
||||
}
|
||||
|
||||
/** @deprecated I would love to encapsulate this somehow. */
|
||||
/* TODO: needs encapsulation. */
|
||||
XML makeXmlFromString(XMLName name, String value) {
|
||||
try {
|
||||
return newTextElementXML(this.node, name.toQname(), value.toString());
|
||||
@ -83,7 +84,7 @@ class XML extends XMLObjectImpl {
|
||||
}
|
||||
}
|
||||
|
||||
/** @deprecated Rename this, at the very least. But it's not clear it's even necessary */
|
||||
/* TODO: Rename this, at the very least. But it's not clear it's even necessary */
|
||||
XmlNode getAnnotation() {
|
||||
return node;
|
||||
}
|
||||
@ -94,6 +95,7 @@ class XML extends XMLObjectImpl {
|
||||
|
||||
// TODO Either cross-reference this next comment with the specification or delete it and change the behavior
|
||||
// The comment: XML[0] should return this, all other indexes are Undefined
|
||||
@Override
|
||||
public Object get(int index, Scriptable start) {
|
||||
if (index == 0) {
|
||||
return this;
|
||||
@ -102,16 +104,19 @@ class XML extends XMLObjectImpl {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean has(int index, Scriptable start) {
|
||||
return (index == 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put(int index, Scriptable start, Object value) {
|
||||
// TODO Clarify the following comment and add a reference to the spec
|
||||
// The comment: Spec says assignment to indexed XML object should return type error
|
||||
throw ScriptRuntime.typeError("Assignment to indexed XML is not allowed");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getIds() {
|
||||
if (isPrototype()) {
|
||||
return new Object[0];
|
||||
@ -121,6 +126,7 @@ class XML extends XMLObjectImpl {
|
||||
}
|
||||
|
||||
// TODO This is how I found it but I am not sure it makes sense
|
||||
@Override
|
||||
public void delete(int index) {
|
||||
if (index == 0) {
|
||||
this.remove();
|
||||
@ -131,6 +137,7 @@ class XML extends XMLObjectImpl {
|
||||
// Methods from XMLObjectImpl
|
||||
//
|
||||
|
||||
@Override
|
||||
boolean hasXMLProperty(XMLName xmlName) {
|
||||
if (isPrototype()) {
|
||||
return getMethod(xmlName.localName()) != NOT_FOUND;
|
||||
@ -139,6 +146,7 @@ class XML extends XMLObjectImpl {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
Object getXMLProperty(XMLName xmlName) {
|
||||
if (isPrototype()) {
|
||||
return getMethod(xmlName.localName());
|
||||
@ -181,6 +189,7 @@ class XML extends XMLObjectImpl {
|
||||
return name.getMyValueOn(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
void deleteXMLProperty(XMLName name) {
|
||||
XMLList list = getPropertyList(name);
|
||||
for (int i=0; i<list.length(); i++) {
|
||||
@ -188,6 +197,7 @@ class XML extends XMLObjectImpl {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void putXMLProperty(XMLName xmlName, Object value) {
|
||||
if (isPrototype()) {
|
||||
// TODO Is this really a no-op? Check the spec to be sure
|
||||
@ -196,6 +206,7 @@ class XML extends XMLObjectImpl {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean hasOwnProperty(XMLName xmlName) {
|
||||
boolean hasProperty = false;
|
||||
|
||||
@ -209,6 +220,7 @@ class XML extends XMLObjectImpl {
|
||||
return hasProperty;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object jsConstructor(Context cx, boolean inNewExpr, Object[] args) {
|
||||
if (args.length == 0 || args[0] == null || args[0] == Undefined.instance) {
|
||||
args = new Object[] { "" };
|
||||
@ -223,6 +235,7 @@ class XML extends XMLObjectImpl {
|
||||
}
|
||||
|
||||
// See ECMA 357, 11_2_2_1, Semantics, 3_f.
|
||||
@Override
|
||||
public Scriptable getExtraMethodSource(Context cx) {
|
||||
if (hasSimpleContent()) {
|
||||
String src = toString();
|
||||
@ -239,6 +252,7 @@ class XML extends XMLObjectImpl {
|
||||
this.node.removeChild(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
void normalize() {
|
||||
this.node.normalize();
|
||||
}
|
||||
@ -263,10 +277,12 @@ class XML extends XMLObjectImpl {
|
||||
this.node.deleteMe();
|
||||
}
|
||||
|
||||
@Override
|
||||
void addMatches(XMLList rv, XMLName name) {
|
||||
name.addMatches(rv, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLList elements(XMLName name) {
|
||||
XMLList rv = newXMLList();
|
||||
rv.setTargets(this, name.toQname());
|
||||
@ -280,6 +296,7 @@ class XML extends XMLObjectImpl {
|
||||
return rv;
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLList child(XMLName xmlName) {
|
||||
// TODO Right now I think this method would allow child( "@xxx" ) to return the xxx attribute, which is wrong
|
||||
|
||||
@ -303,6 +320,7 @@ class XML extends XMLObjectImpl {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLList children() {
|
||||
XMLList rv = newXMLList();
|
||||
XMLName all = XMLName.formStar();
|
||||
@ -314,6 +332,7 @@ class XML extends XMLObjectImpl {
|
||||
return rv;
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLList child(int index) {
|
||||
// ECMA357 13.4.4.6 (numeric case)
|
||||
XMLList result = newXMLList();
|
||||
@ -336,6 +355,7 @@ class XML extends XMLObjectImpl {
|
||||
return this.node.getChildIndex();
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean contains(Object xml) {
|
||||
if (xml instanceof XML) {
|
||||
return equivalentXml(xml);
|
||||
@ -345,6 +365,7 @@ class XML extends XMLObjectImpl {
|
||||
}
|
||||
|
||||
// Method overriding XMLObjectImpl
|
||||
@Override
|
||||
boolean equivalentXml(Object target) {
|
||||
boolean result = false;
|
||||
|
||||
@ -367,22 +388,26 @@ class XML extends XMLObjectImpl {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLObjectImpl copy() {
|
||||
return newXML( this.node.copy() );
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean hasSimpleContent() {
|
||||
if (isComment() || isProcessingInstruction()) return false;
|
||||
if (isText() || this.node.isAttributeType()) return true;
|
||||
return !this.node.hasChildElement();
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean hasComplexContent() {
|
||||
return !hasSimpleContent();
|
||||
}
|
||||
|
||||
// TODO Cross-reference comment below with spec
|
||||
// Comment is: Length of an XML object is always 1, it's a list of XML objects of size 1.
|
||||
@Override
|
||||
int length() {
|
||||
return 1;
|
||||
}
|
||||
@ -396,12 +421,14 @@ class XML extends XMLObjectImpl {
|
||||
return ecmaClass();
|
||||
}
|
||||
|
||||
@Override
|
||||
Object parent() {
|
||||
XmlNode parent = this.node.parent();
|
||||
if (parent == null) return null;
|
||||
return newXML(this.node.parent());
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean propertyIsEnumerable(Object name)
|
||||
{
|
||||
boolean result;
|
||||
@ -417,6 +444,7 @@ class XML extends XMLObjectImpl {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
Object valueOf() {
|
||||
return this;
|
||||
}
|
||||
@ -425,18 +453,21 @@ class XML extends XMLObjectImpl {
|
||||
// Selection of children
|
||||
//
|
||||
|
||||
@Override
|
||||
XMLList comments() {
|
||||
XMLList rv = newXMLList();
|
||||
this.node.addMatchingChildren(rv, XmlNode.Filter.COMMENT);
|
||||
return rv;
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLList text() {
|
||||
XMLList rv = newXMLList();
|
||||
this.node.addMatchingChildren(rv, XmlNode.Filter.TEXT);
|
||||
return rv;
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLList processingInstructions(XMLName xmlName) {
|
||||
XMLList rv = newXMLList();
|
||||
this.node.addMatchingChildren(rv, XmlNode.Filter.PROCESSING_INSTRUCTION(xmlName));
|
||||
@ -664,6 +695,7 @@ class XML extends XMLObjectImpl {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getClassName() {
|
||||
// TODO: This appears to confuse the interpreter if we use the "real" class property from ECMA. Otherwise this code
|
||||
// would be:
|
||||
@ -699,10 +731,12 @@ class XML extends XMLObjectImpl {
|
||||
return toXMLString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return ecmaToString();
|
||||
}
|
||||
|
||||
@Override
|
||||
String toXMLString() {
|
||||
return this.node.ecmaToXMLString(getProcessor());
|
||||
}
|
||||
|
||||
@ -109,11 +109,13 @@ class XMLCtor extends IdFunctionObject
|
||||
|
||||
MAX_INSTANCE_ID = 5;
|
||||
|
||||
@Override
|
||||
protected int getMaxInstanceId()
|
||||
{
|
||||
return super.getMaxInstanceId() + MAX_INSTANCE_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int findInstanceIdInfo(String s) {
|
||||
int id;
|
||||
// #generated# Last update: 2007-08-20 09:01:10 EDT
|
||||
@ -150,6 +152,7 @@ class XMLCtor extends IdFunctionObject
|
||||
|
||||
// #/string_id_map#
|
||||
|
||||
@Override
|
||||
protected String getInstanceIdName(int id)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
@ -162,6 +165,7 @@ class XMLCtor extends IdFunctionObject
|
||||
return super.getInstanceIdName(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object getInstanceIdValue(int id)
|
||||
{
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
@ -179,6 +183,7 @@ class XMLCtor extends IdFunctionObject
|
||||
return super.getInstanceIdValue(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setInstanceIdValue(int id, Object value) {
|
||||
switch (id - super.getMaxInstanceId()) {
|
||||
case Id_ignoreComments:
|
||||
@ -207,6 +212,7 @@ class XMLCtor extends IdFunctionObject
|
||||
Id_setSettings = 3,
|
||||
MAX_FUNCTION_ID = 3;
|
||||
|
||||
@Override
|
||||
protected int findPrototypeId(String s)
|
||||
{
|
||||
int id;
|
||||
@ -224,6 +230,7 @@ class XMLCtor extends IdFunctionObject
|
||||
}
|
||||
// #/string_id_map#
|
||||
|
||||
@Override
|
||||
protected void initPrototypeId(int id)
|
||||
{
|
||||
String s;
|
||||
@ -237,6 +244,7 @@ class XMLCtor extends IdFunctionObject
|
||||
initPrototypeMethod(XMLCTOR_TAG, id, s, arity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execIdCall(IdFunctionObject f, Context cx, Scriptable scope,
|
||||
Scriptable thisObj, Object[] args)
|
||||
{
|
||||
@ -274,6 +282,7 @@ class XMLCtor extends IdFunctionObject
|
||||
/**
|
||||
hasInstance for XML objects works differently than other objects; see ECMA357 13.4.3.10.
|
||||
*/
|
||||
@Override
|
||||
public boolean hasInstance(Scriptable instance) {
|
||||
return (instance instanceof XML || instance instanceof XMLList);
|
||||
}
|
||||
|
||||
@ -45,8 +45,6 @@ import org.mozilla.javascript.*;
|
||||
import org.mozilla.javascript.xml.*;
|
||||
|
||||
public final class XMLLibImpl extends XMLLib implements Serializable {
|
||||
// TODO Document that this only works with JDK 1.5 or backport its
|
||||
// features to earlier versions
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
//
|
||||
@ -62,7 +60,8 @@ public final class XMLLibImpl extends XMLLib implements Serializable {
|
||||
if (xmlObject instanceof XML) {
|
||||
return ((XML)xmlObject).toDomNode();
|
||||
} else {
|
||||
throw new IllegalArgumentException("xmlObject is not an XML object in JavaScript.");
|
||||
throw new IllegalArgumentException(
|
||||
"xmlObject is not an XML object in JavaScript.");
|
||||
}
|
||||
}
|
||||
|
||||
@ -154,10 +153,10 @@ public final class XMLLibImpl extends XMLLib implements Serializable {
|
||||
}
|
||||
|
||||
XMLName toXMLNameFromString(Context cx, String name) {
|
||||
return XMLName.create( getDefaultNamespaceURI(cx), name );
|
||||
return XMLName.create(getDefaultNamespaceURI(cx), name);
|
||||
}
|
||||
|
||||
/** @deprecated */
|
||||
/* TODO: Marked deprecated by original author */
|
||||
XMLName toXMLName(Context cx, Object nameValue) {
|
||||
XMLName result;
|
||||
|
||||
@ -374,8 +373,7 @@ public final class XMLLibImpl extends XMLLib implements Serializable {
|
||||
return new XML(this, this.globalScope, this.xmlPrototype, node);
|
||||
}
|
||||
|
||||
/**
|
||||
@deprecated I believe this can be replaced by ecmaToXml below.
|
||||
/* TODO: Can this can be replaced by ecmaToXml below?
|
||||
*/
|
||||
final XML newXMLFromJs(Object inputObject) {
|
||||
String frag;
|
||||
@ -534,8 +532,8 @@ public final class XMLLibImpl extends XMLLib implements Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@deprecated Too general; this should be split into overloaded methods.
|
||||
/*
|
||||
TODO: Too general; this should be split into overloaded methods.
|
||||
Is that possible?
|
||||
*/
|
||||
XmlNode.QName toNodeQName(Context cx, Object nameValue, boolean attribute) {
|
||||
@ -566,31 +564,37 @@ public final class XMLLibImpl extends XMLLib implements Serializable {
|
||||
// Override methods from XMLLib
|
||||
//
|
||||
|
||||
@Override
|
||||
public boolean isXMLName(Context _cx, Object nameObj) {
|
||||
return XMLName.accept(nameObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object toDefaultXmlNamespace(Context cx, Object uriValue) {
|
||||
return this.namespacePrototype.constructNamespace(uriValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String escapeTextValue(Object o) {
|
||||
return options.escapeTextValue(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String escapeAttributeValue(Object o) {
|
||||
return options.escapeAttributeValue(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ref nameRef(Context cx, Object name, Scriptable scope, int memberTypeFlags) {
|
||||
if ((memberTypeFlags & Node.ATTRIBUTE_FLAG) == 0) {
|
||||
// should only be called foir cases like @name or @[expr]
|
||||
// should only be called for cases like @name or @[expr]
|
||||
throw Kit.codeBug();
|
||||
}
|
||||
XMLName xmlName = toAttributeName(cx, name);
|
||||
return xmlPrimaryReference(cx, xmlName, scope);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ref nameRef(Context cx, Object namespace, Object name, Scriptable scope, int memberTypeFlags) {
|
||||
XMLName xmlName = XMLName.create(toNodeQName(cx, namespace, name), false, false);
|
||||
|
||||
|
||||
@ -43,21 +43,22 @@ package org.mozilla.javascript.xmlimpl;
|
||||
|
||||
import org.mozilla.javascript.*;
|
||||
import org.mozilla.javascript.xml.*;
|
||||
import java.util.ArrayList;
|
||||
|
||||
class XMLList extends XMLObjectImpl implements Function {
|
||||
static final long serialVersionUID = -4543618751670781135L;
|
||||
|
||||
private XmlNode.List _annos;
|
||||
private XmlNode.InternalList _annos;
|
||||
private XMLObjectImpl targetObject = null;
|
||||
private XmlNode.QName targetProperty = null;
|
||||
|
||||
XMLList(XMLLibImpl lib, Scriptable scope, XMLObject prototype) {
|
||||
super(lib, scope, prototype);
|
||||
_annos = new XmlNode.List();
|
||||
_annos = new XmlNode.InternalList();
|
||||
}
|
||||
|
||||
/** @deprecated Will probably end up unnecessary as we move things around */
|
||||
XmlNode.List getNodeList() {
|
||||
/* TODO Will probably end up unnecessary as we move things around */
|
||||
XmlNode.InternalList getNodeList() {
|
||||
return _annos;
|
||||
}
|
||||
|
||||
@ -67,11 +68,12 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
targetProperty = property;
|
||||
}
|
||||
|
||||
/** @deprecated */
|
||||
/* TODO: original author marked this as deprecated */
|
||||
private XML getXmlFromAnnotation(int index) {
|
||||
return getXML(_annos, index);
|
||||
}
|
||||
|
||||
@Override
|
||||
XML getXML() {
|
||||
if (length() == 1) return getXmlFromAnnotation(0);
|
||||
return null;
|
||||
@ -83,7 +85,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
|
||||
void replace(int index, XML xml) {
|
||||
if (index < length()) {
|
||||
XmlNode.List newAnnoList = new XmlNode.List();
|
||||
XmlNode.InternalList newAnnoList = new XmlNode.InternalList();
|
||||
newAnnoList.add(_annos, 0, index);
|
||||
newAnnoList.add(xml);
|
||||
newAnnoList.add(_annos, index+1, length());
|
||||
@ -93,7 +95,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
|
||||
private void insert(int index, XML xml) {
|
||||
if (index < length()) {
|
||||
XmlNode.List newAnnoList = new XmlNode.List();
|
||||
XmlNode.InternalList newAnnoList = new XmlNode.InternalList();
|
||||
newAnnoList.add(_annos, 0, index);
|
||||
newAnnoList.add(xml);
|
||||
newAnnoList.add(_annos, index, length());
|
||||
@ -107,6 +109,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
//
|
||||
//
|
||||
|
||||
@Override
|
||||
public String getClassName() {
|
||||
return "XMLList";
|
||||
}
|
||||
@ -117,6 +120,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
//
|
||||
//
|
||||
|
||||
@Override
|
||||
public Object get(int index, Scriptable start) {
|
||||
//Log("get index: " + index);
|
||||
|
||||
@ -127,6 +131,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean hasXMLProperty(XMLName xmlName) {
|
||||
boolean result = false;
|
||||
|
||||
@ -141,10 +146,12 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean has(int index, Scriptable start) {
|
||||
return 0 <= index && index < length();
|
||||
}
|
||||
|
||||
@Override
|
||||
void putXMLProperty(XMLName xmlName, Object value) {
|
||||
//Log("put property: " + name);
|
||||
|
||||
@ -156,12 +163,16 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
}
|
||||
|
||||
if (length() > 1) {
|
||||
throw ScriptRuntime.typeError("Assignment to lists with more than one item is not supported");
|
||||
throw ScriptRuntime.typeError(
|
||||
"Assignment to lists with more than one item is not supported");
|
||||
} else if (length() == 0) {
|
||||
// Secret sauce for super-expandos.
|
||||
// We set an element here, and then add ourselves to our target.
|
||||
if (targetObject != null && targetProperty != null && targetProperty.getLocalName() != null) {
|
||||
// Add an empty element with our targetProperty name and then set it.
|
||||
if (targetObject != null && targetProperty != null &&
|
||||
targetProperty.getLocalName() != null)
|
||||
{
|
||||
// Add an empty element with our targetProperty name and
|
||||
// then set it.
|
||||
XML xmlValue = newTextElementXML(null, targetProperty, null);
|
||||
addToList(xmlValue);
|
||||
|
||||
@ -176,10 +187,13 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
}
|
||||
|
||||
// Now add us to our parent
|
||||
XMLName name2 = XMLName.formProperty(targetProperty.getUri(), targetProperty.getLocalName());
|
||||
XMLName name2 = XMLName.formProperty(
|
||||
targetProperty.getNamespace().getUri(),
|
||||
targetProperty.getLocalName());
|
||||
targetObject.putXMLProperty(name2, this);
|
||||
} else {
|
||||
throw ScriptRuntime.typeError("Assignment to empty XMLList without targets not supported");
|
||||
throw ScriptRuntime.typeError(
|
||||
"Assignment to empty XMLList without targets not supported");
|
||||
}
|
||||
} else if(xmlName.isAttributeName()) {
|
||||
setAttribute(xmlName, value);
|
||||
@ -192,6 +206,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
Object getXMLProperty(XMLName name) {
|
||||
return getPropertyList(name);
|
||||
}
|
||||
@ -200,6 +215,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
xml.replaceWith(with);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put(int index, Scriptable start, Object value) {
|
||||
Object parent = Undefined.instance;
|
||||
// Convert text into XML if needed.
|
||||
@ -294,7 +310,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
}
|
||||
}
|
||||
|
||||
private XML getXML(XmlNode.List _annos, int index) {
|
||||
private XML getXML(XmlNode.InternalList _annos, int index) {
|
||||
if (index >= 0 && index < length()) {
|
||||
return xmlFromNode(_annos.item(index));
|
||||
} else {
|
||||
@ -302,6 +318,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void deleteXMLProperty(XMLName name) {
|
||||
for (int i = 0; i < length(); i++) {
|
||||
XML xml = getXmlFromAnnotation(i);
|
||||
@ -312,6 +329,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(int index) {
|
||||
if (index >= 0 && index < length()) {
|
||||
XML xml = getXmlFromAnnotation(index);
|
||||
@ -322,6 +340,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getIds() {
|
||||
Object enumObjs[];
|
||||
|
||||
@ -377,6 +396,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
//
|
||||
//
|
||||
|
||||
@Override
|
||||
XMLList child(int index) {
|
||||
XMLList result = newXMLList();
|
||||
|
||||
@ -387,6 +407,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLList child(XMLName xmlName) {
|
||||
XMLList result = newXMLList();
|
||||
|
||||
@ -397,14 +418,16 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
void addMatches(XMLList rv, XMLName name) {
|
||||
for (int i=0; i<length(); i++) {
|
||||
getXmlFromAnnotation(i).addMatches(rv, name);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLList children() {
|
||||
java.util.Vector v = new java.util.Vector();
|
||||
ArrayList<XML> list = new ArrayList<XML>();
|
||||
|
||||
for (int i = 0; i < length(); i++) {
|
||||
XML xml = getXmlFromAnnotation(i);
|
||||
@ -416,22 +439,23 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
|
||||
int cChildren = childList.length();
|
||||
for (int j = 0; j < cChildren; j++) {
|
||||
v.addElement(childList.item(j));
|
||||
list.add(childList.item(j));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
XMLList allChildren = newXMLList();
|
||||
int sz = v.size();
|
||||
int sz = list.size();
|
||||
|
||||
for (int i = 0; i < sz; i++) {
|
||||
allChildren.addToList(v.get(i));
|
||||
allChildren.addToList(list.get(i));
|
||||
}
|
||||
|
||||
return allChildren;
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLList comments() {
|
||||
XMLList result = newXMLList();
|
||||
|
||||
@ -443,6 +467,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLList elements(XMLName name) {
|
||||
XMLList rv = newXMLList();
|
||||
for (int i=0; i<length(); i++) {
|
||||
@ -452,6 +477,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return rv;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean contains(Object xml) {
|
||||
boolean result = false;
|
||||
|
||||
@ -467,6 +493,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLObjectImpl copy() {
|
||||
XMLList result = newXMLList();
|
||||
|
||||
@ -478,6 +505,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean hasOwnProperty(XMLName xmlName) {
|
||||
if (isPrototype()) {
|
||||
String property = xmlName.localName();
|
||||
@ -487,6 +515,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean hasComplexContent() {
|
||||
boolean complexContent;
|
||||
int length = length();
|
||||
@ -510,6 +539,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return complexContent;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean hasSimpleContent() {
|
||||
if (length() == 0) {
|
||||
return true;
|
||||
@ -526,6 +556,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
int length() {
|
||||
int result = 0;
|
||||
|
||||
@ -536,6 +567,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
void normalize() {
|
||||
for (int i = 0; i < length(); i++) {
|
||||
getXmlFromAnnotation(i).normalize();
|
||||
@ -546,6 +578,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
* If list is empty, return undefined, if elements have different parents return undefined,
|
||||
* If they all have the same parent, return that parent
|
||||
*/
|
||||
@Override
|
||||
Object parent() {
|
||||
if (length() == 0) return Undefined.instance;
|
||||
|
||||
@ -569,6 +602,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return candidateParent;
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLList processingInstructions(XMLName xmlName) {
|
||||
XMLList result = newXMLList();
|
||||
|
||||
@ -581,6 +615,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean propertyIsEnumerable(Object name) {
|
||||
long index;
|
||||
if (name instanceof Integer) {
|
||||
@ -602,6 +637,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return (0 <= index && index < length());
|
||||
}
|
||||
|
||||
@Override
|
||||
XMLList text() {
|
||||
XMLList result = newXMLList();
|
||||
|
||||
@ -612,6 +648,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
// ECMA357 10.1.2
|
||||
if (hasSimpleContent()) {
|
||||
@ -632,6 +669,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
String toXMLString() {
|
||||
// See ECMA 10.2.1
|
||||
StringBuffer sb = new StringBuffer();
|
||||
@ -645,6 +683,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
Object valueOf() {
|
||||
return this;
|
||||
}
|
||||
@ -653,6 +692,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
// Other public Functions from XMLObject
|
||||
//
|
||||
|
||||
@Override
|
||||
boolean equivalentXml(Object target) {
|
||||
boolean result = false;
|
||||
|
||||
@ -711,8 +751,10 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
return ScriptRuntime.applyOrCall(isApply, cx, scope, thisObj, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object jsConstructor(Context cx, boolean inNewExpr,
|
||||
Object[] args) {
|
||||
Object[] args)
|
||||
{
|
||||
if (args.length == 0) {
|
||||
return newXMLList();
|
||||
} else {
|
||||
@ -728,6 +770,7 @@ class XMLList extends XMLObjectImpl implements Function {
|
||||
/**
|
||||
* See ECMA 357, 11_2_2_1, Semantics, 3_e.
|
||||
*/
|
||||
@Override
|
||||
public Scriptable getExtraMethodSource(Context cx) {
|
||||
if (length() == 1) {
|
||||
return getXmlFromAnnotation(0);
|
||||
|
||||
@ -145,12 +145,12 @@ class XMLName extends Ref {
|
||||
return rv;
|
||||
}
|
||||
|
||||
/** @deprecated */
|
||||
/** TODO: marked deprecated by original author */
|
||||
static XMLName formProperty(String uri, String localName) {
|
||||
return formProperty(XmlNode.Namespace.create(uri), localName);
|
||||
}
|
||||
|
||||
/** @deprecated */
|
||||
/** TODO: marked deprecated by original implementor */
|
||||
static XMLName create(String defaultNamespaceUri, String name) {
|
||||
if (name == null)
|
||||
throw new IllegalArgumentException();
|
||||
@ -309,7 +309,8 @@ class XMLName extends Ref {
|
||||
// Check for attribute type and convert to textNode
|
||||
if (xmlValue instanceof XML) {
|
||||
if (((XML)xmlValue).isAttribute()) {
|
||||
xmlValue = target.makeXmlFromString(xmlName, xmlValue.toString());
|
||||
xmlValue = target.makeXmlFromString(xmlName,
|
||||
xmlValue.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@ -343,6 +344,7 @@ class XMLName extends Ref {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean has(Context cx) {
|
||||
if (xmlObject == null) {
|
||||
return false;
|
||||
@ -350,6 +352,7 @@ class XMLName extends Ref {
|
||||
return xmlObject.hasXMLProperty(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object get(Context cx) {
|
||||
if (xmlObject == null) {
|
||||
throw ScriptRuntime.undefReadError(Undefined.instance,
|
||||
@ -358,6 +361,7 @@ class XMLName extends Ref {
|
||||
return xmlObject.getXMLProperty(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object set(Context cx, Object value) {
|
||||
if (xmlObject == null) {
|
||||
throw ScriptRuntime.undefWriteError(Undefined.instance,
|
||||
@ -371,6 +375,7 @@ class XMLName extends Ref {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean delete(Context cx) {
|
||||
if (xmlObject == null) {
|
||||
return true;
|
||||
@ -379,6 +384,7 @@ class XMLName extends Ref {
|
||||
return !xmlObject.hasXMLProperty(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
//return qname.localName();
|
||||
StringBuffer buff = new StringBuffer();
|
||||
@ -443,19 +449,19 @@ class XMLName extends Ref {
|
||||
}
|
||||
}
|
||||
|
||||
/** @deprecated */
|
||||
/* TODO: marked deprecated by original author */
|
||||
boolean isAttributeName() {
|
||||
return isAttributeName;
|
||||
}
|
||||
|
||||
// TODO Fix whether this is an attribute XMLName at construction?
|
||||
/** @deprecated */
|
||||
// TODO Fix whether this is an attribute XMLName at construction?
|
||||
// Marked deprecated by original author
|
||||
void setAttributeName() {
|
||||
// if (isAttributeName) throw new IllegalStateException();
|
||||
isAttributeName = true;
|
||||
}
|
||||
|
||||
/** @deprecated */
|
||||
/* TODO: was marked deprecated by original author */
|
||||
boolean isDescendants() {
|
||||
return isDescendants;
|
||||
}
|
||||
|
||||
@ -123,43 +123,53 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
// Scriptable
|
||||
//
|
||||
|
||||
@Override
|
||||
public final Object get(String name, Scriptable start) {
|
||||
return super.get(name, start);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean has(String name, Scriptable start) {
|
||||
return super.has(name, start);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void put(String name, Scriptable start, Object value) {
|
||||
super.put(name, start, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void delete(String name) {
|
||||
// TODO I am not sure about this, but this is how I found it. DPC
|
||||
throw new IllegalArgumentException("String: [" + name + "]");
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Scriptable getPrototype() {
|
||||
return super.getPrototype();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setPrototype(Scriptable prototype) {
|
||||
super.setPrototype(prototype);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Scriptable getParentScope() {
|
||||
return super.getParentScope();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setParentScope(Scriptable parent) {
|
||||
super.setParentScope(parent);
|
||||
}
|
||||
|
||||
public final Object getDefaultValue(Class hint) {
|
||||
@Override
|
||||
public final Object getDefaultValue(Class<?> hint) {
|
||||
return this.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean hasInstance(Scriptable scriptable) {
|
||||
return super.hasInstance(scriptable);
|
||||
}
|
||||
@ -220,6 +230,7 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
abstract XMLList processingInstructions(XMLName xmlName);
|
||||
abstract boolean propertyIsEnumerable(Object member);
|
||||
abstract XMLList text();
|
||||
@Override
|
||||
public abstract String toString();
|
||||
abstract String toXMLString();
|
||||
abstract Object valueOf();
|
||||
@ -241,6 +252,7 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
* never returns {@link Scriptable#NOT_FOUND} for them but rather
|
||||
* calls equivalentXml(value) and wrap the result as Boolean.
|
||||
*/
|
||||
@Override
|
||||
protected final Object equivalentValues(Object value) {
|
||||
boolean result = equivalentXml(value);
|
||||
return result ? Boolean.TRUE : Boolean.FALSE;
|
||||
@ -255,6 +267,7 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
/**
|
||||
* Implementation of ECMAScript [[Has]]
|
||||
*/
|
||||
@Override
|
||||
public final boolean ecmaHas(Context cx, Object id) {
|
||||
if (cx == null) cx = Context.getCurrentContext();
|
||||
XMLName xmlName = lib.toXMLNameOrIndex(cx, id);
|
||||
@ -269,6 +282,7 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
/**
|
||||
* Implementation of ECMAScript [[Get]]
|
||||
*/
|
||||
@Override
|
||||
public final Object ecmaGet(Context cx, Object id) {
|
||||
if (cx == null) cx = Context.getCurrentContext();
|
||||
XMLName xmlName = lib.toXMLNameOrIndex(cx, id);
|
||||
@ -287,6 +301,7 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
/**
|
||||
* Implementation of ECMAScript [[Put]]
|
||||
*/
|
||||
@Override
|
||||
public final void ecmaPut(Context cx, Object id, Object value) {
|
||||
if (cx == null) cx = Context.getCurrentContext();
|
||||
XMLName xmlName = lib.toXMLNameOrIndex(cx, id);
|
||||
@ -302,6 +317,7 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
/**
|
||||
* Implementation of ECMAScript [[Delete]].
|
||||
*/
|
||||
@Override
|
||||
public final boolean ecmaDelete(Context cx, Object id) {
|
||||
if (cx == null) cx = Context.getCurrentContext();
|
||||
XMLName xmlName = lib.toXMLNameOrIndex(cx, id);
|
||||
@ -316,6 +332,7 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
}
|
||||
|
||||
// TODO Can this be made more strongly typed?
|
||||
@Override
|
||||
public Ref memberRef(Context cx, Object elem, int memberTypeFlags) {
|
||||
boolean attribute = (memberTypeFlags & Node.ATTRIBUTE_FLAG) != 0;
|
||||
boolean descendants = (memberTypeFlags & Node.DESCENDANTS_FLAG) != 0;
|
||||
@ -334,24 +351,31 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
/**
|
||||
* Generic reference to implement x::ns, x.@ns::y, x..@ns::y etc.
|
||||
*/
|
||||
public Ref memberRef(Context cx, Object namespace, Object elem, int memberTypeFlags) {
|
||||
@Override
|
||||
public Ref memberRef(Context cx, Object namespace, Object elem,
|
||||
int memberTypeFlags)
|
||||
{
|
||||
boolean attribute = (memberTypeFlags & Node.ATTRIBUTE_FLAG) != 0;
|
||||
boolean descendants = (memberTypeFlags & Node.DESCENDANTS_FLAG) != 0;
|
||||
XMLName rv = XMLName.create(lib.toNodeQName(cx, namespace, elem), attribute, descendants);
|
||||
XMLName rv = XMLName.create(lib.toNodeQName(cx, namespace, elem),
|
||||
attribute, descendants);
|
||||
rv.initXMLObject(this);
|
||||
return rv;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NativeWith enterWith(Scriptable scope) {
|
||||
return new XMLWithScope(lib, scope, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NativeWith enterDotQuery(Scriptable scope) {
|
||||
XMLWithScope xws = new XMLWithScope(lib, scope, this);
|
||||
xws.initAsDotQuery();
|
||||
return xws;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Object addValues(Context cx, boolean thisIsLeft,
|
||||
Object value) {
|
||||
if (value instanceof XMLObject) {
|
||||
@ -430,6 +454,7 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
|
||||
MAX_PROTOTYPE_ID = 40;
|
||||
|
||||
@Override
|
||||
protected int findPrototypeId(String s) {
|
||||
int id;
|
||||
// #generated# Last update: 2007-08-20 09:04:06 EDT
|
||||
@ -507,6 +532,7 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
}
|
||||
// #/string_id_map#
|
||||
|
||||
@Override
|
||||
protected void initPrototypeId(int id) {
|
||||
String s;
|
||||
int arity;
|
||||
@ -582,7 +608,10 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
throw ScriptRuntime.notFunctionError(object, name);
|
||||
}
|
||||
|
||||
public Object execIdCall(IdFunctionObject f, Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
|
||||
@Override
|
||||
public Object execIdCall(IdFunctionObject f, Context cx, Scriptable scope,
|
||||
Scriptable thisObj, Object[] args)
|
||||
{
|
||||
if (!f.hasTag(XMLOBJECT_TAG)) {
|
||||
return super.execIdCall(f, cx, scope, thisObj, args);
|
||||
}
|
||||
@ -791,7 +820,7 @@ abstract class XMLObjectImpl extends XMLObject {
|
||||
return lib.newTextElementXML(reference, qname, value);
|
||||
}
|
||||
|
||||
/** @deprecated Hopefully this can be replaced with ecmaToXml below. */
|
||||
/* TODO: Hopefully this can be replaced with ecmaToXml below. */
|
||||
final XML newXMLFromJs(Object inputObject) {
|
||||
return lib.newXMLFromJs(inputObject);
|
||||
}
|
||||
|
||||
@ -82,6 +82,7 @@ final class XMLWithScope extends NativeWith
|
||||
_xmlList = lib.newXMLList();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object updateDotQuery(boolean value)
|
||||
{
|
||||
// Return null to continue looping
|
||||
|
||||
@ -87,7 +87,7 @@ class XmlNode {
|
||||
document = processor.newDocument();
|
||||
}
|
||||
Node referenceDom = (reference != null) ? reference.dom : null;
|
||||
Element e = document.createElementNS(qname.getUri(), qname.qualify(referenceDom));
|
||||
Element e = document.createElementNS(qname.getNamespace().getUri(), qname.qualify(referenceDom));
|
||||
if (value != null) {
|
||||
e.appendChild(document.createTextNode(value));
|
||||
}
|
||||
@ -139,6 +139,7 @@ class XmlNode {
|
||||
return raw.ecmaToXmlString(this.dom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "XmlNode: type=" + dom.getNodeType() + " dom=" + dom.toString();
|
||||
}
|
||||
@ -329,8 +330,8 @@ class XmlNode {
|
||||
}
|
||||
|
||||
private static class Namespaces {
|
||||
private HashMap map = new HashMap();
|
||||
private HashMap uriToPrefix = new HashMap();
|
||||
private Map<String,String> map = new HashMap<String,String>();
|
||||
private Map<String,String> uriToPrefix = new HashMap<String,String>();
|
||||
|
||||
Namespaces() {
|
||||
}
|
||||
@ -348,26 +349,24 @@ class XmlNode {
|
||||
|
||||
Namespace getNamespaceByUri(String uri) {
|
||||
if (uriToPrefix.get(uri) == null) return null;
|
||||
return Namespace.create(uri, (String)uriToPrefix.get(uri));
|
||||
return Namespace.create(uri, uriToPrefix.get(uri));
|
||||
}
|
||||
|
||||
Namespace getNamespace(String prefix) {
|
||||
if (map.get(prefix) == null) return null;
|
||||
return Namespace.create(prefix, (String)map.get(prefix));
|
||||
return Namespace.create(prefix, map.get(prefix));
|
||||
}
|
||||
|
||||
Namespace[] getNamespaces() {
|
||||
Iterator i = map.keySet().iterator();
|
||||
ArrayList rv = new ArrayList();
|
||||
while(i.hasNext()) {
|
||||
String prefix = (String)i.next();
|
||||
String uri = (String)map.get(prefix);
|
||||
ArrayList<Namespace> rv = new ArrayList<Namespace>();
|
||||
for (String prefix: map.keySet()) {
|
||||
String uri = map.get(prefix);
|
||||
Namespace n = Namespace.create(prefix, uri);
|
||||
if (!n.isEmpty()) {
|
||||
rv.add( n );
|
||||
rv.add(n);
|
||||
}
|
||||
}
|
||||
return (Namespace[])rv.toArray(new Namespace[0]);
|
||||
return rv.toArray(new Namespace[rv.size()]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -401,7 +400,7 @@ class XmlNode {
|
||||
}
|
||||
|
||||
final void renameNode(QName qname) {
|
||||
this.dom = dom.getOwnerDocument().renameNode(dom, qname.getUri(), qname.qualify(dom));
|
||||
this.dom = dom.getOwnerDocument().renameNode(dom, qname.getNamespace().getUri(), qname.qualify(dom));
|
||||
}
|
||||
|
||||
void invalidateNamespacePrefix() {
|
||||
@ -526,15 +525,15 @@ class XmlNode {
|
||||
}
|
||||
|
||||
XmlNode[] getMatchingChildren(Filter filter) {
|
||||
ArrayList rv = new ArrayList();
|
||||
ArrayList<XmlNode> rv = new ArrayList<XmlNode>();
|
||||
NodeList nodes = this.dom.getChildNodes();
|
||||
for (int i=0; i<nodes.getLength(); i++) {
|
||||
Node node = nodes.item(i);
|
||||
if (filter.accept(node)) {
|
||||
rv.add( createImpl(node) );
|
||||
rv.add(createImpl(node));
|
||||
}
|
||||
}
|
||||
return (XmlNode[])rv.toArray(new XmlNode[0]);
|
||||
return rv.toArray(new XmlNode[rv.size()]);
|
||||
}
|
||||
|
||||
XmlNode[] getAttributes() {
|
||||
@ -602,6 +601,7 @@ class XmlNode {
|
||||
private Namespace() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (prefix == null) return "XmlNode.Namespace [" + uri + "]";
|
||||
return "XmlNode.Namespace [" + prefix + "{" + uri + "}]";
|
||||
@ -672,6 +672,7 @@ class XmlNode {
|
||||
private QName() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "XmlNode.QName [" + localName + "," + namespace + "]";
|
||||
}
|
||||
@ -744,16 +745,6 @@ class XmlNode {
|
||||
element.setAttributeNS(namespace.getUri(), qualify(namespace.getPrefix(), localName), value);
|
||||
}
|
||||
|
||||
/** @deprecated Use getNamespace() */
|
||||
String getUri() {
|
||||
return namespace.getUri();
|
||||
}
|
||||
|
||||
/** @deprecated Use getNamespace() */
|
||||
String getPrefix() {
|
||||
return namespace.getPrefix();
|
||||
}
|
||||
|
||||
Namespace getNamespace() {
|
||||
return namespace;
|
||||
}
|
||||
@ -763,32 +754,32 @@ class XmlNode {
|
||||
}
|
||||
}
|
||||
|
||||
static class List {
|
||||
private java.util.Vector v;
|
||||
static class InternalList {
|
||||
private List<XmlNode> list;
|
||||
|
||||
List() {
|
||||
v = new java.util.Vector();
|
||||
InternalList() {
|
||||
list = new ArrayList<XmlNode>();
|
||||
}
|
||||
|
||||
private void _add(XmlNode n) {
|
||||
v.add(n);
|
||||
list.add(n);
|
||||
}
|
||||
|
||||
XmlNode item(int index) {
|
||||
return (XmlNode)(v.get(index));
|
||||
return list.get(index);
|
||||
}
|
||||
|
||||
void remove(int index) {
|
||||
v.remove(index);
|
||||
list.remove(index);
|
||||
}
|
||||
|
||||
void add(List other) {
|
||||
void add(InternalList other) {
|
||||
for (int i=0; i<other.length(); i++) {
|
||||
_add(other.item(i));
|
||||
}
|
||||
}
|
||||
|
||||
void add(List from, int startInclusive, int endExclusive) {
|
||||
void add(InternalList from, int startInclusive, int endExclusive) {
|
||||
for (int i=startInclusive; i<endExclusive; i++) {
|
||||
_add(from.item(i));
|
||||
}
|
||||
@ -798,12 +789,12 @@ class XmlNode {
|
||||
_add(node);
|
||||
}
|
||||
|
||||
/** @deprecated */
|
||||
/* TODO: was marked deprecated by original author */
|
||||
void add(XML xml) {
|
||||
_add(xml.getAnnotation());
|
||||
}
|
||||
|
||||
/** @deprecated */
|
||||
/* TODO: was marked deprecated by original author */
|
||||
void addToList(Object toAdd) {
|
||||
if (toAdd instanceof Undefined) {
|
||||
// Missing argument do nothing...
|
||||
@ -823,23 +814,26 @@ class XmlNode {
|
||||
}
|
||||
|
||||
int length() {
|
||||
return v.size();
|
||||
return list.size();
|
||||
}
|
||||
}
|
||||
|
||||
static abstract class Filter {
|
||||
static final Filter COMMENT = new Filter() {
|
||||
@Override
|
||||
boolean accept(Node node) {
|
||||
return node.getNodeType() == Node.COMMENT_NODE;
|
||||
}
|
||||
};
|
||||
static final Filter TEXT = new Filter() {
|
||||
@Override
|
||||
boolean accept(Node node) {
|
||||
return node.getNodeType() == Node.TEXT_NODE;
|
||||
}
|
||||
};
|
||||
static Filter PROCESSING_INSTRUCTION(final XMLName name) {
|
||||
return new Filter() {
|
||||
@Override
|
||||
boolean accept(Node node) {
|
||||
if (node.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE) {
|
||||
ProcessingInstruction pi = (ProcessingInstruction)node;
|
||||
@ -850,11 +844,13 @@ class XmlNode {
|
||||
};
|
||||
}
|
||||
static Filter ELEMENT = new Filter() {
|
||||
@Override
|
||||
boolean accept(Node node) {
|
||||
return node.getNodeType() == Node.ELEMENT_NODE;
|
||||
}
|
||||
};
|
||||
static Filter TRUE = new Filter() {
|
||||
@Override
|
||||
boolean accept(Node node) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -39,6 +39,8 @@ package org.mozilla.javascript.xmlimpl;
|
||||
import org.w3c.dom.*;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.mozilla.javascript.*;
|
||||
|
||||
@ -184,29 +186,29 @@ class XmlProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
private void addProcessingInstructionsTo(java.util.Vector v, Node node) {
|
||||
private void addProcessingInstructionsTo(List<Node> list, Node node) {
|
||||
if (node instanceof ProcessingInstruction) {
|
||||
v.add(node);
|
||||
list.add(node);
|
||||
}
|
||||
if (node.getChildNodes() != null) {
|
||||
for (int i=0; i<node.getChildNodes().getLength(); i++) {
|
||||
addProcessingInstructionsTo(v, node.getChildNodes().item(i));
|
||||
addProcessingInstructionsTo(list, node.getChildNodes().item(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addCommentsTo(java.util.Vector v, Node node) {
|
||||
private void addCommentsTo(List<Node> list, Node node) {
|
||||
if (node instanceof Comment) {
|
||||
v.add(node);
|
||||
list.add(node);
|
||||
}
|
||||
if (node.getChildNodes() != null) {
|
||||
for (int i=0; i<node.getChildNodes().getLength(); i++) {
|
||||
addProcessingInstructionsTo(v, node.getChildNodes().item(i));
|
||||
addProcessingInstructionsTo(list, node.getChildNodes().item(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addTextNodesToRemoveAndTrim(java.util.Vector toRemove, Node node) {
|
||||
private void addTextNodesToRemoveAndTrim(List<Node> toRemove, Node node) {
|
||||
if (node instanceof Text) {
|
||||
Text text = (Text)node;
|
||||
boolean BUG_369394_IS_VALID = false;
|
||||
@ -237,18 +239,16 @@ class XmlProcessor {
|
||||
builder = getDocumentBuilderFromPool();
|
||||
Document document = builder.parse( new org.xml.sax.InputSource(new java.io.StringReader(syntheticXml)) );
|
||||
if (ignoreProcessingInstructions) {
|
||||
java.util.Vector v = new java.util.Vector();
|
||||
addProcessingInstructionsTo(v, document);
|
||||
for (int i=0; i<v.size(); i++) {
|
||||
Node node = (Node)v.elementAt(i);
|
||||
List<Node> list = new java.util.ArrayList<Node>();
|
||||
addProcessingInstructionsTo(list, document);
|
||||
for (Node node: list) {
|
||||
node.getParentNode().removeChild(node);
|
||||
}
|
||||
}
|
||||
if (ignoreComments) {
|
||||
java.util.Vector v = new java.util.Vector();
|
||||
addCommentsTo(v, document);
|
||||
for (int i=0; i<v.size(); i++) {
|
||||
Node node = (Node)v.elementAt(i);
|
||||
List<Node> list = new java.util.ArrayList<Node>();
|
||||
addCommentsTo(list, document);
|
||||
for (Node node: list) {
|
||||
node.getParentNode().removeChild(node);
|
||||
}
|
||||
}
|
||||
@ -258,10 +258,9 @@ class XmlProcessor {
|
||||
// so that it would know which whitespace to ignore.
|
||||
|
||||
// Instead we will try to delete it ourselves.
|
||||
java.util.Vector v = new java.util.Vector();
|
||||
addTextNodesToRemoveAndTrim(v, document);
|
||||
for (int i=0; i<v.size(); i++) {
|
||||
Node node = (Node)v.elementAt(i);
|
||||
List<Node> list = new java.util.ArrayList<Node>();
|
||||
addTextNodesToRemoveAndTrim(list, document);
|
||||
for (Node node: list) {
|
||||
node.getParentNode().removeChild(node);
|
||||
}
|
||||
}
|
||||
@ -417,7 +416,7 @@ class XmlProcessor {
|
||||
|
||||
// We "mark" all the nodes first; if we tried to do this loop otherwise, it would behave unexpectedly (the inserted nodes
|
||||
// would contribute to the length and it might never terminate).
|
||||
java.util.Vector toIndent = new java.util.Vector();
|
||||
ArrayList<Node> toIndent = new ArrayList<Node>();
|
||||
boolean indentChildren = false;
|
||||
for (int i=0; i<e.getChildNodes().getLength(); i++) {
|
||||
if (i == 1) indentChildren = true;
|
||||
@ -430,21 +429,22 @@ class XmlProcessor {
|
||||
}
|
||||
if (indentChildren) {
|
||||
for (int i=0; i<toIndent.size(); i++) {
|
||||
e.insertBefore( e.getOwnerDocument().createTextNode(beforeContent), (Node)toIndent.elementAt(i) );
|
||||
e.insertBefore(e.getOwnerDocument().createTextNode(beforeContent),
|
||||
toIndent.get(i));
|
||||
}
|
||||
}
|
||||
NodeList nodes = e.getChildNodes();
|
||||
java.util.Vector v = new java.util.Vector();
|
||||
for (int i=0; i<nodes.getLength(); i++) {
|
||||
ArrayList<Element> list = new ArrayList<Element>();
|
||||
for (int i=0; i < nodes.getLength(); i++) {
|
||||
if (nodes.item(i) instanceof Element) {
|
||||
v.add( nodes.item(i) );
|
||||
list.add((Element)nodes.item(i));
|
||||
}
|
||||
}
|
||||
for (int i=0; i<v.size(); i++) {
|
||||
beautifyElement( (Element)v.elementAt(i), indent + prettyIndent );
|
||||
for (Element elem: list) {
|
||||
beautifyElement(elem, indent + prettyIndent);
|
||||
}
|
||||
if (indentChildren) {
|
||||
e.appendChild( e.getOwnerDocument().createTextNode(afterContent) );
|
||||
e.appendChild(e.getOwnerDocument().createTextNode(afterContent));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user