javassist icon indicating copy to clipboard operation
javassist copied to clipboard

Needed Support of TypeArguments for a Collection variable (List<Object>)

Open manikchand1995 opened this issue 7 years ago • 4 comments

When I tried to insert the following code in a method body by CtMethod.insertAt(int,String), exception occured. It would be helpful, if some one helps me to get over this.

code : List<String> list = new ArrayList<String>();

exception trace :

Caused by: compile error: syntax error near "rrayList<String>();"
	at javassist.compiler.Parser.parseNew(Parser.java:1293)
	at javassist.compiler.Parser.parsePrimaryExpr(Parser.java:1244)
	at javassist.compiler.Parser.parsePostfix(Parser.java:1031)
	at javassist.compiler.Parser.parseUnaryExpr(Parser.java:888)
	at javassist.compiler.Parser.parseBinaryExpr(Parser.java:775)
	at javassist.compiler.Parser.parseConditionalExpr(Parser.java:719)
	at javassist.compiler.Parser.parseExpression(Parser.java:699)
	at javassist.compiler.Parser.parseExpression(Parser.java:704)
	at javassist.compiler.Parser.parseDeclarationOrExpression(Parser.java:591)
	at javassist.compiler.Parser.parseStatement(Parser.java:277)
	at javassist.compiler.Javac.compileStmnt(Javac.java:565)
	at javassist.CtBehavior.insertAt(CtBehavior.java:1192)
	... 4 more

manikchand1995 avatar Feb 09 '18 13:02 manikchand1995

Use raw type and explicit type casts. At bytecode level, type arguments are taken off.

chibash avatar Feb 09 '18 15:02 chibash

I just insert List processArg = new ArrayList(); BUT still got the "syntax error near rrayList();" Would you like to show me a good example to insert collection? Thank you very much! :)

PhD-5 avatar Sep 12 '18 08:09 PhD-5

Since Javassist does not know which packages you import, you have to use FQNs. So, java.util.List p = new java.util.ArrayList().

But the error message seems weird. The string literal might be broken.

chibash avatar Sep 12 '18 12:09 chibash

public void test(Object src, Object value) { java.util.List<java.lang.String> valueNew = (java.util.List<java.lang.String>) value; } i want to cast value(Object type) to List<String>,but print error: Caused by: compile error: syntax error near "g.String>) value; }" at javassist.compiler.Parser.parsePrimaryExpr(Parser.java:1256) at javassist.compiler.Parser.parsePostfix(Parser.java:1030) at javassist.compiler.Parser.parseUnaryExpr(Parser.java:888) at javassist.compiler.Parser.binaryExpr2(Parser.java:809) at javassist.compiler.Parser.parseBinaryExpr(Parser.java:782) at javassist.compiler.Parser.parseConditionalExpr(Parser.java:719) at javassist.compiler.Parser.parseExpression(Parser.java:699) at javassist.compiler.Parser.parsePrimaryExpr(Parser.java:1244) at javassist.compiler.Parser.parsePostfix(Parser.java:1030) at javassist.compiler.Parser.parseCast(Parser.java:921) at javassist.compiler.Parser.parseUnaryExpr(Parser.java:886) at javassist.compiler.Parser.parseBinaryExpr(Parser.java:775) at javassist.compiler.Parser.parseConditionalExpr(Parser.java:719) at javassist.compiler.Parser.parseExpression(Parser.java:699) at javassist.compiler.Parser.parseExpression(Parser.java:704) at javassist.compiler.Parser.parseDeclarationOrExpression(Parser.java:591)

It would be helpful,thank you very much. @chibash

amateur-RD avatar Sep 13 '23 06:09 amateur-RD