Skip to content

Commit c865d21

Browse files
author
zhourenjian
committed
Add Simple Pipe's #deal's parameter type to optional class dependencies, so no extra @j2sOptionalRequire * is needed to load those classes.
Fixing some NPE bugs
1 parent 98ee4df commit c865d21

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

src/net/sf/j2s/core/astvisitors/ASTScriptVisitor.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,10 @@ protected void visitMethodParameterList(List arguments,
627627
boxingNode(element);
628628
Expression exp = (Expression) element;
629629
ITypeBinding typeBinding = exp.resolveTypeBinding();
630-
String typeName = typeBinding.getName();
630+
String typeName = null;
631+
if (typeBinding != null) {
632+
typeName = typeBinding.getName();
633+
}
631634
String parameterTypeName = null;
632635
if (parameterTypes != null) {
633636
parameterTypeName = parameterTypes[i].getName();
@@ -1703,8 +1706,8 @@ public boolean visit(MethodInvocation node) {
17031706
buffer.append(" (");
17041707

17051708
IMethodBinding methodBinding = node.resolveMethodBinding();
1706-
ITypeBinding[] paramTypes = methodBinding.getParameterTypes();
17071709
if (methodBinding != null && methodBinding.isVarargs()) {
1710+
ITypeBinding[] paramTypes = methodBinding.getParameterTypes();
17081711
visitList(args, ", ", 0, paramTypes.length - 1);
17091712
if (paramTypes.length - 1 > 0) {
17101713
buffer.append(", ");
@@ -2585,7 +2588,8 @@ public void endVisit(TypeDeclaration node) {
25852588
private String prepareSimpleSerializable(TypeDeclaration node, List bodyDeclarations) {
25862589
StringBuffer fieldsSerializables = new StringBuffer();
25872590
ITypeBinding binding = node.resolveBinding();
2588-
boolean isSimpleSerializable = (Bindings.findTypeInHierarchy(binding, "net.sf.j2s.ajax.SimpleSerializable") != null);
2591+
boolean isSimpleSerializable = binding != null
2592+
&& (Bindings.findTypeInHierarchy(binding, "net.sf.j2s.ajax.SimpleSerializable") != null);
25892593
for (Iterator iter = bodyDeclarations.iterator(); iter.hasNext();) {
25902594
ASTNode element = (ASTNode) iter.next();
25912595
if (element instanceof FieldDeclaration) {

src/net/sf/j2s/core/astvisitors/Bindings.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -955,7 +955,7 @@ public static boolean isEqualMethod(IMethodBinding method, String methodName, St
955955
* @return the type binding
956956
*/
957957
public static ITypeBinding findTypeInHierarchy(ITypeBinding hierarchyType, String fullyQualifiedTypeName) {
958-
if (hierarchyType.isArray() || hierarchyType.isPrimitive()) {
958+
if (hierarchyType == null || hierarchyType.isArray() || hierarchyType.isPrimitive()) {
959959
return null;
960960
}
961961
if (fullyQualifiedTypeName.equals(hierarchyType.getQualifiedName())) {

src/net/sf/j2s/core/astvisitors/DependencyASTVisitor.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -905,6 +905,24 @@ public void setToCompileVariableName(boolean toCompileVariableName) {
905905

906906
public boolean visit(MethodDeclaration node) {
907907
IMethodBinding mBinding = node.resolveBinding();
908+
if (Bindings.isMethodInvoking(mBinding, "net.sf.j2s.ajax.SimplePipeRunnable", "deal")) {
909+
ITypeBinding[] parameterTypes = mBinding.getParameterTypes();
910+
if (parameterTypes != null && parameterTypes.length == 1) {
911+
ITypeBinding paramType = parameterTypes[0];
912+
ITypeBinding declaringClass = paramType.getDeclaringClass();
913+
QNTypeBinding qn = new QNTypeBinding();
914+
String qualifiedName = null;
915+
if (declaringClass != null) {
916+
qn.binding = declaringClass;
917+
qualifiedName = declaringClass.getQualifiedName();
918+
} else {
919+
qn.binding = paramType;
920+
qualifiedName = paramType.getQualifiedName();
921+
}
922+
qn.qualifiedName = discardGenericType(qualifiedName);
923+
optionals.add(qn);
924+
}
925+
}
908926
boolean toBeIgnored = false;
909927
if (Bindings.isMethodInvoking(mBinding, "net.sf.j2s.ajax.SimpleRPCRunnable", "ajaxRun")) {
910928
toBeIgnored = true;

0 commit comments

Comments
 (0)