📄 fsexceptionhandler.java
字号:
for (Iterator i = finalActions.iterator(); i.hasNext();)
anObject.finalActions.add(((FSActionObject)i.next()).clone());
return anObject;
}
public boolean equals(Object anObject)
{
boolean result = false;
if (super.equals(anObject))
{
FSExceptionHandler typedObject = (FSExceptionHandler)anObject;
if (variable != null)
result = variable.equals(typedObject.variable);
else
result = variable == typedObject.variable;
result = result && register == typedObject.register;
if (tryActions != null)
result = result && tryActions.equals(typedObject.tryActions);
else
result = result && tryActions == typedObject.tryActions;
if (catchActions != null)
result = result && catchActions.equals(typedObject.catchActions);
else
result = result && catchActions == typedObject.catchActions;
if (finalActions != null)
result = result && finalActions.equals(typedObject.finalActions);
else
result = result && finalActions == typedObject.finalActions;
}
return result;
}
public void appendDescription(StringBuffer buffer, int depth)
{
buffer.append(name());
if (depth > 0)
{
buffer.append(": { ");
Transform.append(buffer, "variable", variable);
Transform.append(buffer, "register", register);
Transform.append(buffer, "tryActions", tryActions, depth);
Transform.append(buffer, "catchActions", catchActions, depth);
Transform.append(buffer, "finalActions", finalActions, depth);
buffer.append("}");
}
}
public int length(FSCoder coder)
{
super.length(coder);
length += 7;
length += (variable != null) ? coder.strlen(variable, true) : 1;
for (Iterator i = tryActions.iterator(); i.hasNext();)
{
FSActionObject currentAction = (FSActionObject)i.next();
length += currentAction.length(coder);
length += (currentAction.getType() > 128) ? 3 : 1;
}
if (catchActions != null)
{
for (Iterator i = catchActions.iterator(); i.hasNext();)
{
FSActionObject currentAction = (FSActionObject)i.next();
length += currentAction.length(coder);
length += (currentAction.getType() > 128) ? 3 : 1;
}
}
if (finalActions != null)
{
for (Iterator i = finalActions.iterator(); i.hasNext();)
{
FSActionObject currentAction = (FSActionObject)i.next();
length += currentAction.length(coder);
length += (currentAction.getType() > 128) ? 3 : 1;
}
}
return length;
}
public void encode(FSCoder coder)
{
super.encode(coder);
coder.writeBits(0, 5);
coder.writeBits(variable == null ? 1 : 0, 1);
coder.writeBits(catchActions != null && catchActions.size() > 0 ? 1 : 0, 1);
coder.writeBits(finalActions != null && finalActions.size() > 0 ? 1 : 0, 1);
int tryLength = 0;
for (Iterator i = tryActions.iterator(); i.hasNext();)
{
FSActionObject currentAction = (FSActionObject)i.next();
tryLength += currentAction.getLength();
tryLength += (currentAction.getType() > 128) ? 3 : 1;
}
coder.writeWord(tryLength, 2);
int catchLength = 0;
if (catchActions != null)
{
for (Iterator i = catchActions.iterator(); i.hasNext();)
{
FSActionObject currentAction = (FSActionObject)i.next();
catchLength += currentAction.getLength();
catchLength += (currentAction.getType() > 128) ? 3 : 1;
}
}
coder.writeWord(catchLength, 2);
int finalLength = 0;
if (finalActions != null)
{
for (Iterator i = finalActions.iterator(); i.hasNext();)
{
FSActionObject currentAction = (FSActionObject)i.next();
finalLength += currentAction.getLength();
finalLength += (currentAction.getType() > 128) ? 3 : 1;
}
}
coder.writeWord(finalLength, 2);
if (variable != null)
coder.writeString(variable);
else
coder.writeWord(register, 1);
for (Iterator i=tryActions.iterator(); i.hasNext();)
{
FSActionObject action = (FSActionObject)i.next();
int objStart = coder.getPointer();
int start = coder.getPointer() + ((action.getType() > 128) ? 24 : 8);
int next = start + (action.getLength() << 3);
action.encode(coder);
coder.setPointer(next);
int delta = (coder.getPointer() - next) >> 3;
if (delta != 0)
{
coder.context[FSCoder.CodingError] = 1;
coder.context[FSCoder.TypeInError] = action.getType();
coder.context[FSCoder.StartOfError] = objStart >>> 3;
coder.context[FSCoder.ExpectedLength] = (next-objStart)>>>3;
coder.context[FSCoder.Delta] = delta;
}
}
if (catchActions != null)
{
for (Iterator i=catchActions.iterator(); i.hasNext();)
{
FSActionObject action = (FSActionObject)i.next();
int objStart = coder.getPointer();
int start = coder.getPointer() + ((action.getType() > 128) ? 24 : 8);
int next = start + (action.getLength() << 3);
action.encode(coder);
coder.setPointer(next);
int delta = (coder.getPointer() - next) >> 3;
if (delta != 0)
{
coder.context[FSCoder.CodingError] = 1;
coder.context[FSCoder.TypeInError] = action.getType();
coder.context[FSCoder.StartOfError] = objStart >>> 3;
coder.context[FSCoder.ExpectedLength] = (next-objStart)>>>3;
coder.context[FSCoder.Delta] = delta;
}
}
}
if (finalActions != null)
{
for (Iterator i=finalActions.iterator(); i.hasNext();)
{
FSActionObject action = (FSActionObject)i.next();
int objStart = coder.getPointer();
int start = coder.getPointer() + ((action.getType() > 128) ? 24 : 8);
int next = start + (action.getLength() << 3);
action.encode(coder);
coder.setPointer(next);
int delta = (coder.getPointer() - next) >> 3;
if (delta != 0)
{
coder.context[FSCoder.CodingError] = 1;
coder.context[FSCoder.TypeInError] = action.getType();
coder.context[FSCoder.StartOfError] = objStart >>> 3;
coder.context[FSCoder.ExpectedLength] = (next-objStart)>>>3;
coder.context[FSCoder.Delta] = delta;
}
}
}
coder.endObject(name());
}
public void decode(FSCoder coder)
{
boolean containsVariable = false;
boolean containsCatch = false;
boolean containsFinal = false;
super.decode(coder);
coder.readBits(5, false);
containsVariable = coder.readBits(1, false) != 1;
containsCatch = coder.readBits(1, false) == 1;
containsFinal = coder.readBits(1, false) == 1;
int tryLength = coder.readWord(2, false);
int catchLength = coder.readWord(2, false);
int finalLength = coder.readWord(2, false);
tryActions = new ArrayList();
if (containsCatch)
catchActions = new ArrayList();
if (containsFinal)
finalActions = new ArrayList();
/*
* Both the variable name and register index are represented
* in Describe so pretend fields are consecutive.
*/
if (containsVariable)
{
variable = coder.readString();
}
else
{
register = coder.readWord(1, false);
}
while (tryLength > 0)
{
FSActionObject anAction = FSMovie.decodeAction(coder);
if (anAction != null)
{
tryLength -= anAction.getLength() + ((anAction.getType() >= 128) ? 3 : 1);
tryActions.add(anAction);
}
else
{
coder.adjustPointer(8);
tryLength =- 1;
}
}
if (containsCatch)
{
while (catchLength > 0)
{
FSActionObject anAction = FSMovie.decodeAction(coder);
if (anAction != null)
{
catchLength -= anAction.getLength() + ((anAction.getType() >= 128) ? 3 : 1);
catchActions.add(anAction);
}
else
{
coder.adjustPointer(8);
tryLength =- 1;
}
}
}
if (containsFinal)
{
while (finalLength > 0)
{
FSActionObject anAction = FSMovie.decodeAction(coder);
if (anAction != null)
{
finalLength -= anAction.getLength() + ((anAction.getType() >= 128) ? 3 : 1);
finalActions.add(anAction);
}
else
{
coder.adjustPointer(8);
tryLength =- 1;
}
}
}
coder.endObject(name());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -