This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git
The following commit(s) were added to refs/heads/master by this push:
new caa5c5b1 Merge some string literals
caa5c5b1 is described below
commit caa5c5b1359e2f18c1011bcbacaf78370fc62e17
Author: Gary D. Gregory <[email protected]>
AuthorDate: Sun Jul 20 16:17:41 2025 -0400
Merge some string literals
---
.../java/org/apache/bcel/util/AttributeHTML.java | 4 ++--
.../java/org/apache/bcel/util/BCELFactory.java | 4 ++--
src/main/java/org/apache/bcel/util/BCELifier.java | 4 ++--
src/main/java/org/apache/bcel/util/Class2HTML.java | 27 ++++++++++++++++------
src/main/java/org/apache/bcel/util/CodeHTML.java | 6 ++---
.../java/org/apache/bcel/util/ConstantHTML.java | 4 ++--
src/main/java/org/apache/bcel/util/MethodHTML.java | 6 ++---
.../bcel/verifier/statics/Pass1Verifier.java | 2 +-
.../bcel/verifier/statics/Pass2Verifier.java | 8 +++----
.../bcel/verifier/statics/Pass3aVerifier.java | 6 ++---
.../structurals/InstConstraintVisitor.java | 4 ++--
11 files changed, 44 insertions(+), 31 deletions(-)
diff --git a/src/main/java/org/apache/bcel/util/AttributeHTML.java
b/src/main/java/org/apache/bcel/util/AttributeHTML.java
index 63dac416..e0bafaf2 100644
--- a/src/main/java/org/apache/bcel/util/AttributeHTML.java
+++ b/src/main/java/org/apache/bcel/util/AttributeHTML.java
@@ -160,8 +160,8 @@ final class AttributeHTML implements Closeable {
final int start = var.getStartPC();
final int end = start + var.getLength();
printWriter.println("<LI>" +
Class2HTML.referenceType(signature) + " <B>" + var.getName() + "</B> in
slot %" + var.getIndex()
- + "<BR>Valid from lines " + "<A HREF=\"" + className +
"_code.html#code" + methodNumber + "@" + start + "\" TARGET=Code>" + start
- + "</A> to " + "<A HREF=\"" + className +
"_code.html#code" + methodNumber + "@" + end + "\" TARGET=Code>" + end +
"</A></LI>");
+ + "<BR>Valid from lines <A HREF=\"" + className +
"_code.html#code" + methodNumber + "@" + start + "\" TARGET=Code>" + start
+ + "</A> to <A HREF=\"" + className + "_code.html#code"
+ methodNumber + "@" + end + "\" TARGET=Code>" + end + "</A></LI>");
});
printWriter.print("</UL>\n");
break;
diff --git a/src/main/java/org/apache/bcel/util/BCELFactory.java
b/src/main/java/org/apache/bcel/util/BCELFactory.java
index 18b41265..d515a27c 100644
--- a/src/main/java/org/apache/bcel/util/BCELFactory.java
+++ b/src/main/java/org/apache/bcel/util/BCELFactory.java
@@ -167,8 +167,8 @@ final class BCELFactory extends EmptyVisitor {
final CodeExceptionGen[] handlers = methodGen.getExceptionHandlers();
for (final CodeExceptionGen h : handlers) {
final String type = h.getCatchType() == null ? "null" :
BCELifier.printType(h.getCatchType());
- printWriter.println(" method.addExceptionHandler(" + "ih_" +
h.getStartPC().getPosition() + ", " + "ih_" + h.getEndPC().getPosition() + ", "
- + "ih_" + h.getHandlerPC().getPosition() + ", " + type + ");");
+ printWriter.println(" method.addExceptionHandler(ih_" +
h.getStartPC().getPosition() + ", ih_" + h.getEndPC().getPosition() + ", ih_"
+ + h.getHandlerPC().getPosition() + ", " + type + ");");
}
}
diff --git a/src/main/java/org/apache/bcel/util/BCELifier.java
b/src/main/java/org/apache/bcel/util/BCELifier.java
index 89a7bdde..20ef1ff0 100644
--- a/src/main/java/org/apache/bcel/util/BCELifier.java
+++ b/src/main/java/org/apache/bcel/util/BCELifier.java
@@ -266,7 +266,7 @@ public class BCELifier extends
org.apache.bcel.classfile.EmptyVisitor {
printWriter.println();
printWriter.println(" public " + className + "Creator() {");
printWriter.println(" _cg = new ClassGen(\"" +
(packageName.isEmpty() ? className : packageName + "." + className) + "\", \""
+ superName
- + "\", " + "\"" + clazz.getSourceFileName() + "\", " +
printFlags(clazz.getAccessFlags(), FLAGS.CLASS) + ", " + "new String[] { " +
inter + " });");
+ + "\", \"" + clazz.getSourceFileName() + "\", " +
printFlags(clazz.getAccessFlags(), FLAGS.CLASS) + ", " + "new String[] { " +
inter + " });");
printWriter.println(" _cg.setMajor(" + clazz.getMajor() + ");");
printWriter.println(" _cg.setMinor(" + clazz.getMinor() + ");");
printWriter.println();
@@ -301,7 +301,7 @@ public class BCELifier extends
org.apache.bcel.classfile.EmptyVisitor {
final MethodGen mg = new MethodGen(method, clazz.getClassName(),
constantPoolGen);
printWriter.println(" InstructionList il = new InstructionList();");
printWriter.println(" MethodGen method = new MethodGen(" +
printFlags(method.getAccessFlags(), FLAGS.METHOD) + ", " +
printType(mg.getReturnType())
- + ", " + printArgumentTypes(mg.getArgumentTypes()) + ", " + "new
String[] { " + Utility.printArray(mg.getArgumentNames(), false, true) + " }, \""
+ + ", " + printArgumentTypes(mg.getArgumentTypes()) + ", new
String[] { " + Utility.printArray(mg.getArgumentNames(), false, true) + " }, \""
+ method.getName() + "\", \"" + clazz.getClassName() + "\", il,
_cp);");
final ExceptionTable exceptionTable = method.getExceptionTable();
if (exceptionTable != null) {
diff --git a/src/main/java/org/apache/bcel/util/Class2HTML.java
b/src/main/java/org/apache/bcel/util/Class2HTML.java
index 5298f205..e9c4fa51 100644
--- a/src/main/java/org/apache/bcel/util/Class2HTML.java
+++ b/src/main/java/org/apache/bcel/util/Class2HTML.java
@@ -213,13 +213,26 @@ public class Class2HTML implements Constants {
private void writeMainHTML(final AttributeHTML attributeHtml, final
Charset charset) throws FileNotFoundException, UnsupportedEncodingException {
try (PrintWriter file = new PrintWriter(dir + className + ".html",
charset.name())) {
- file.println("<HTML>\n" + "<HEAD><TITLE>Documentation for " +
className + "</TITLE>" + "</HEAD>\n" + "<FRAMESET BORDER=1 cols=\"30%,*\">\n"
- + "<FRAMESET BORDER=1 rows=\"80%,*\">\n" + "<FRAME
NAME=\"ConstantPool\" SRC=\"" + className + "_cp.html" + "\"\n
MARGINWIDTH=\"0\" "
- + "MARGINHEIGHT=\"0\" FRAMEBORDER=\"1\" SCROLLING=\"AUTO\">\n"
+ "<FRAME NAME=\"Attributes\" SRC=\"" + className + "_attributes.html"
- + "\"\n MARGINWIDTH=\"0\" " + "MARGINHEIGHT=\"0\"
FRAMEBORDER=\"1\" SCROLLING=\"AUTO\">\n" + "</FRAMESET>\n"
- + "<FRAMESET BORDER=1 rows=\"80%,*\">\n" + "<FRAME
NAME=\"Code\" SRC=\"" + className + "_code.html\"\n MARGINWIDTH=0 "
- + "MARGINHEIGHT=0 FRAMEBORDER=1 SCROLLING=\"AUTO\">\n" +
"<FRAME NAME=\"Methods\" SRC=\"" + className + "_methods.html\"\n MARGINWIDTH=0
"
- + "MARGINHEIGHT=0 FRAMEBORDER=1 SCROLLING=\"AUTO\">\n" +
"</FRAMESET></FRAMESET></HTML>");
+ // @formatter:off
+ file.println("<HTML>\n"
+ + "<HEAD><TITLE>Documentation for " + className +
"</TITLE></HEAD>\n"
+ + "<FRAMESET BORDER=1 cols=\"30%,*\">\n"
+ + "<FRAMESET BORDER=1 rows=\"80%,*\">\n"
+ + "<FRAME NAME=\"ConstantPool\" SRC=\"" + className +
"_cp.html" + "\"\n"
+ + "MARGINWIDTH=\"0\" "
+ + "MARGINHEIGHT=\"0\" FRAMEBORDER=\"1\" SCROLLING=\"AUTO\">\n"
+ + "<FRAME NAME=\"Attributes\" SRC=\"" + className +
"_attributes.html\"\n"
+ + " MARGINWIDTH=\"0\" MARGINHEIGHT=\"0\" FRAMEBORDER=\"1\"
SCROLLING=\"AUTO\">\n"
+ + "</FRAMESET>\n"
+ + "<FRAMESET BORDER=1 rows=\"80%,*\">\n"
+ + "<FRAME NAME=\"Code\" SRC=\"" + className + "_code.html\"\n"
+ + " MARGINWIDTH=0 "
+ + "MARGINHEIGHT=0 FRAMEBORDER=1 SCROLLING=\"AUTO\">\n"
+ + "<FRAME NAME=\"Methods\" SRC=\"" + className +
"_methods.html\"\n"
+ + " MARGINWIDTH=0 "
+ + "MARGINHEIGHT=0 FRAMEBORDER=1 SCROLLING=\"AUTO\">\n"
+ + "</FRAMESET></FRAMESET></HTML>");
+ // @formatter:on
}
final Attribute[] attributes = javaClass.getAttributes();
for (int i = 0; i < attributes.length; i++) {
diff --git a/src/main/java/org/apache/bcel/util/CodeHTML.java
b/src/main/java/org/apache/bcel/util/CodeHTML.java
index 7492f291..4a9ebe3d 100644
--- a/src/main/java/org/apache/bcel/util/CodeHTML.java
+++ b/src/main/java/org/apache/bcel/util/CodeHTML.java
@@ -490,7 +490,7 @@ final class CodeHTML {
access = Utility.replace(access, " ", " ");
// Get the method's attributes, the Code Attribute in particular
final Attribute[] attributes = method.getAttributes();
- printWriter.print("<P><B><FONT COLOR=\"#FF0000\">" + access +
"</FONT> " + "<A NAME=method" + methodNumber + ">" +
Class2HTML.referenceType(type)
+ printWriter.print("<P><B><FONT COLOR=\"#FF0000\">" + access +
"</FONT> <A NAME=method" + methodNumber + ">" +
Class2HTML.referenceType(type)
+ "</A> <A HREF=\"" + className + "_methods.html#method" +
methodNumber + "\" TARGET=Methods>" + htmlName + "</A>(");
for (int i = 0; i < args.length; i++) {
printWriter.print(Class2HTML.referenceType(args[i]));
@@ -518,7 +518,7 @@ final class CodeHTML {
printWriter.print("<UL>");
for (int j = 0; j < attributes2.length; j++) {
tag = attributes2[j].getTag();
- printWriter.print("<LI><A HREF=\"" + className +
"_attributes.html#" + "method" + methodNumber + "@" + i + "@" + j
+ printWriter.print("<LI><A HREF=\"" + className +
"_attributes.html#method" + methodNumber + "@" + i + "@" + j
+ "\" TARGET=Attributes>" +
Const.getAttributeName(tag) + "</A></LI>\n");
}
printWriter.print("</UL>");
@@ -533,7 +533,7 @@ final class CodeHTML {
stream.mark(stream.available());
findGotos(stream, c);
stream.reset();
- printWriter.println("<TABLE BORDER=0><TR><TH
ALIGN=LEFT>Byte<BR>offset</TH>" + "<TH ALIGN=LEFT>Instruction</TH><TH
ALIGN=LEFT>Argument</TH>");
+ printWriter.println("<TABLE BORDER=0><TR><TH
ALIGN=LEFT>Byte<BR>offset</TH><TH ALIGN=LEFT>Instruction</TH><TH
ALIGN=LEFT>Argument</TH>");
while (stream.available() > 0) {
final int offset = stream.getIndex();
final String str = codeToHTML(stream, methodNumber);
diff --git a/src/main/java/org/apache/bcel/util/ConstantHTML.java
b/src/main/java/org/apache/bcel/util/ConstantHTML.java
index 8c04ade3..6b27c503 100644
--- a/src/main/java/org/apache/bcel/util/ConstantHTML.java
+++ b/src/main/java/org/apache/bcel/util/ConstantHTML.java
@@ -143,11 +143,11 @@ final class ConstantHTML {
if (methodClass.equals(className)) {
ref = "<A HREF=\"" + className + "_code.html#method" +
getMethodNumber(methodName + signature) + "\" TARGET=Code>" + htmlMethodName +
"</A>";
} else {
- ref = "<A HREF=\"" + methodClass + ".html" + "\" TARGET=_top>"
+ shortMethodClass + "</A>." + htmlMethodName;
+ ref = "<A HREF=\"" + methodClass + ".html\" TARGET=_top>" +
shortMethodClass + "</A>." + htmlMethodName;
}
constantRef[index] = retType + " <A HREF=\"" + className +
"_cp.html#cp" + classIndex + "\" TARGET=Constants>" + shortMethodClass
+ "</A>.<A HREF=\"" + className + "_cp.html#cp" + index + "\"
TARGET=ConstantPool>" + htmlMethodName + "</A> " + argTypes;
- printWriter.println("<P><TT>" + retType + " " + ref +
argTypes + " </TT>\n<UL>" + "<LI><A HREF=\"#cp" + classIndex + "\">Class
index("
+ printWriter.println("<P><TT>" + retType + " " + ref +
argTypes + " </TT>\n<UL><LI><A HREF=\"#cp" + classIndex + "\">Class index("
+ classIndex + ")</A>\n" + "<LI><A HREF=\"#cp" + nameIndex +
"\">NameAndType index(" + nameIndex + ")</A></UL>");
break;
case Const.CONSTANT_Fieldref:
diff --git a/src/main/java/org/apache/bcel/util/MethodHTML.java
b/src/main/java/org/apache/bcel/util/MethodHTML.java
index 227997f4..7d94aca2 100644
--- a/src/main/java/org/apache/bcel/util/MethodHTML.java
+++ b/src/main/java/org/apache/bcel/util/MethodHTML.java
@@ -52,13 +52,13 @@ final class MethodHTML {
printWriter.print(charset.name());
printWriter.println("\"></head>");
printWriter.println("<BODY BGCOLOR=\"#C0C0C0\"><TABLE BORDER=0>");
- printWriter.println("<TR><TH ALIGN=LEFT>Access flags</TH><TH
ALIGN=LEFT>Type</TH>" + "<TH ALIGN=LEFT>Field name</TH></TR>");
+ printWriter.println("<TR><TH ALIGN=LEFT>Access flags</TH><TH
ALIGN=LEFT>Type</TH><TH ALIGN=LEFT>Field name</TH></TR>");
for (final Field field : fields) {
writeField(field);
}
printWriter.println("</TABLE>");
printWriter.println("<TABLE BORDER=0><TR><TH
ALIGN=LEFT>Access flags</TH>"
- + "<TH ALIGN=LEFT>Return type</TH><TH
ALIGN=LEFT>Method name</TH>" + "<TH ALIGN=LEFT>Arguments</TH></TR>");
+ + "<TH ALIGN=LEFT>Return type</TH><TH
ALIGN=LEFT>Method name</TH><TH ALIGN=LEFT>Arguments</TH></TR>");
for (int i = 0; i < methods.length; i++) {
writeMethod(methods[i], i);
}
@@ -114,7 +114,7 @@ final class MethodHTML {
access = Utility.replace(access, " ", " ");
final String htmlName = Class2HTML.toHTML(name);
printWriter.print("<TR VALIGN=TOP><TD><FONT COLOR=\"#FF0000\"><A
NAME=method" + methodNumber + ">" + access + "</A></FONT></TD>");
- printWriter.print("<TD>" + Class2HTML.referenceType(type) +
"</TD><TD>" + "<A HREF=" + className + "_code.html#method" + methodNumber + "
TARGET=Code>"
+ printWriter.print("<TD>" + Class2HTML.referenceType(type) +
"</TD><TD><A HREF=" + className + "_code.html#method" + methodNumber + "
TARGET=Code>"
+ htmlName + "</A></TD>\n<TD>(");
for (int i = 0; i < args.length; i++) {
printWriter.print(Class2HTML.referenceType(args[i]));
diff --git a/src/main/java/org/apache/bcel/verifier/statics/Pass1Verifier.java
b/src/main/java/org/apache/bcel/verifier/statics/Pass1Verifier.java
index c5f95946..fee54b45 100644
--- a/src/main/java/org/apache/bcel/verifier/statics/Pass1Verifier.java
+++ b/src/main/java/org/apache/bcel/verifier/statics/Pass1Verifier.java
@@ -142,7 +142,7 @@ public final class Pass1Verifier extends PassVerifier {
} catch (final RuntimeException e) {
// BCEL does not catch every possible RuntimeException; for
example if
// a constant pool index is referenced that does not exist.
- return new
VerificationResult(VerificationResult.VERIFIED_REJECTED, "Parsing via BCEL did
not succeed. " + " exception occurred:\n" + e.toString());
+ return new
VerificationResult(VerificationResult.VERIFIED_REJECTED, "Parsing via BCEL did
not succeed. exception occurred:\n" + e.toString());
// Don't think we want to dump a stack trace unless we have some
sort of a debug option.
// e.getClass().getName()+" occurred:\n"+Utility.getStackTrace(e));
}
diff --git a/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java
b/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java
index 6a56be66..e8a73ce2 100644
--- a/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java
+++ b/src/main/java/org/apache/bcel/verifier/statics/Pass2Verifier.java
@@ -709,7 +709,7 @@ public final class Pass2Verifier extends PassVerifier
implements Constants {
foundInnerClasses = true;
} else if (hasInnerClass) {
throw new ClassConstraintException("A Classfile
structure (like '" + tostring(obj) + "') must have exactly one InnerClasses
attribute"
- + " if at least one Inner Class is referenced
(which is the case)." + " More than one InnerClasses attribute was found.");
+ + " if at least one Inner Class is referenced
(which is the case). More than one InnerClasses attribute was found.");
}
if (!hasInnerClass) {
addMessage("No referenced Inner Class found, but
InnerClasses attribute '" + tostring(att)
@@ -837,7 +837,7 @@ public final class Pass2Verifier extends PassVerifier
implements Constants {
// it!
if (name.equals(Const.STATIC_INITIALIZER_NAME) && ts.length != 0) {
throw new ClassConstraintException("Method '" + tostring(obj)
+ "' has illegal name '" + name + "'."
- + " Its name resembles the class or interface
initialization method" + " which it isn't because of its arguments
(==descriptor).");
+ + " Its name resembles the class or interface
initialization method which it isn't because of its arguments (==descriptor).");
}
if (jc.isClass()) {
@@ -888,7 +888,7 @@ public final class Pass2Verifier extends PassVerifier
implements Constants {
if (jc.getMajor() >= Const.MAJOR_1_8) {
if (obj.isPublic() == obj.isPrivate()) {
throw new ClassConstraintException(
- "Interface method '" + tostring(obj) + "' must
have" + " exactly one of its ACC_PUBLIC and ACC_PRIVATE modifiers set.");
+ "Interface method '" + tostring(obj) + "' must
have exactly one of its ACC_PUBLIC and ACC_PRIVATE modifiers set.");
}
if (obj.isProtected() || obj.isFinal() ||
obj.isSynchronized() || obj.isNative()) {
throw new ClassConstraintException("Interface method
'" + tostring(obj) + "' must not have"
@@ -912,7 +912,7 @@ public final class Pass2Verifier extends PassVerifier
implements Constants {
if ((obj.getAccessFlags() & ~(Const.ACC_PUBLIC | Const.ACC_PRIVATE
| Const.ACC_PROTECTED | Const.ACC_STATIC | Const.ACC_FINAL |
Const.ACC_SYNCHRONIZED | Const.ACC_NATIVE | Const.ACC_ABSTRACT
| Const.ACC_STRICT)) > 0) {
- addMessage("Method '" + tostring(obj) + "' has access flag(s)
other than" + " ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,"
+ addMessage("Method '" + tostring(obj) + "' has access flag(s)
other than ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,"
+ " ACC_SYNCHRONIZED, ACC_NATIVE, ACC_ABSTRACT, ACC_STRICT
set (ignored).");
}
diff --git a/src/main/java/org/apache/bcel/verifier/statics/Pass3aVerifier.java
b/src/main/java/org/apache/bcel/verifier/statics/Pass3aVerifier.java
index 5705cb2a..607eb082 100644
--- a/src/main/java/org/apache/bcel/verifier/statics/Pass3aVerifier.java
+++ b/src/main/java/org/apache/bcel/verifier/statics/Pass3aVerifier.java
@@ -254,7 +254,7 @@ public final class Pass3aVerifier extends PassVerifier {
final int dimensions = ((ArrayType) t).getDimensions();
if (dimensions > Const.MAX_ARRAY_DIMENSIONS) {
constraintViolated(o,
- "Not allowed to create an array with more than " +
Const.MAX_ARRAY_DIMENSIONS + " dimensions;" + " actual: " + dimensions);
+ "Not allowed to create an array with more than " +
Const.MAX_ARRAY_DIMENSIONS + " dimensions; actual: " + dimensions);
}
}
}
@@ -926,7 +926,7 @@ public final class Pass3aVerifier extends PassVerifier {
if (instructionPosition == offset) {
if (offsets.contains(offset)) {
addMessage("LineNumberTable attribute '" +
code.getLineNumberTable() + "' refers to the same code offset ('" + offset
- + "') more than once" + " which is violating
the semantics [but is sometimes produced by IBM's 'jikes' compiler].");
+ + "') more than once which is violating the
semantics [but is sometimes produced by IBM's 'jikes' compiler].");
} else {
offsets.add(offset);
}
@@ -1127,7 +1127,7 @@ public final class Pass3aVerifier extends PassVerifier {
final Instruction last = instructionList.getEnd().getInstruction();
if (!(last instanceof ReturnInstruction || last instanceof RET || last
instanceof GotoInstruction || last instanceof ATHROW)) {
throw new StaticCodeInstructionConstraintException(
- "Execution must not fall off the bottom of the code array." +
" This constraint is enforced statically as some existing verifiers do"
+ "Execution must not fall off the bottom of the code array.
This constraint is enforced statically as some existing verifiers do"
+ " - so it may be a false alarm if the last instruction
is not reachable.");
}
}
diff --git
a/src/main/java/org/apache/bcel/verifier/structurals/InstConstraintVisitor.java
b/src/main/java/org/apache/bcel/verifier/structurals/InstConstraintVisitor.java
index d9aba376..f954f44f 100644
---
a/src/main/java/org/apache/bcel/verifier/structurals/InstConstraintVisitor.java
+++
b/src/main/java/org/apache/bcel/verifier/structurals/InstConstraintVisitor.java
@@ -704,7 +704,7 @@ public class InstConstraintVisitor extends EmptyVisitor {
}
// stack().peek(1).getSize == 1.
if (stack().peek(2).getSize() != 1) {
- constraintViolated(o, "If stack top's size is 1 and stack
next-to-top's size is 1," + " stack next-to-next-to-top's size must also be 1,
but is: '"
+ constraintViolated(o, "If stack top's size is 1 and stack
next-to-top's size is 1, stack next-to-next-to-top's size must also be 1, but
is: '"
+ stack().peek(2) + "' of size '" + stack().peek(2).getSize()
+ "'.");
}
}
@@ -2366,7 +2366,7 @@ public class InstConstraintVisitor extends EmptyVisitor {
constraintViolated(o, "Expecting a class type (ObjectType) to
work on. Found: '" + obj + "'.");
}
} catch (final ClassNotFoundException e) {
- constraintViolated(o, "Expecting a class type (ObjectType) to work
on. Found: '" + obj + "'." + " which threw " + e);
+ constraintViolated(o, "Expecting a class type (ObjectType) to work
on. Found: '" + obj + "'. which threw " + e);
}
}