Skip to content

Commit 7fa1b8f

Browse files
author
emmanue1
committed
Quick fixes
1 parent 9506382 commit 7fa1b8f

File tree

11 files changed

+76
-51
lines changed

11 files changed

+76
-51
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ dependencies {
99
testCompile 'org.apache.commons:commons-collections4:4.1'
1010
}
1111

12-
version='1.1.0'
12+
version='1.1.1'
1313

1414
tasks.withType(JavaCompile) {
1515
sourceCompatibility = targetCompatibility = '1.8'

src/main/java/org/jd/core/v1/model/javasyntax/expression/ArrayExpression.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ protected static Type createItemType(Expression expression) {
5252
Type type = expression.getType();
5353
int dimension = type.getDimension();
5454

55-
assert (type == TYPE_UNDEFINED_OBJECT) || (dimension > 0) : "ArrayExpression.createItemType(exp) : zero or negative dimension";
56-
5755
return type.createType((dimension > 0) ? dimension-1 : 0);
5856
}
5957

src/main/java/org/jd/core/v1/model/javasyntax/type/ObjectType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public int getDimension() {
137137

138138
@Override
139139
public Type createType(int dimension) {
140-
assert dimension >= 0 : "ObjectType.createType(dim) : create type with zero or negative dimension";
140+
assert dimension >= 0 : "ObjectType.createType(dim) : create type with negative dimension";
141141

142142
if (this.dimension == dimension) {
143143
return this;

src/main/java/org/jd/core/v1/model/javasyntax/type/PrimitiveType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public int getRightFlags() {
123123

124124
@Override
125125
public Type createType(int dimension) {
126-
assert dimension >= 0 : "PrimitiveType.createType(dim) : create type with zero or negative dimension";
126+
assert dimension >= 0 : "PrimitiveType.createType(dim) : create type with negative dimension";
127127
if (dimension == 0) {
128128
return this;
129129
} else {

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/model/localvariable/ObjectLocalVariable.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,15 @@ public String toString() {
7979

8080
@Override
8181
public boolean isAssignableFrom(Type type) {
82-
if (type.isObject()) {
83-
return typeMaker.isAssignable((ObjectType) this.type, (ObjectType) type);
84-
} else if (type.isGeneric()) {
82+
if (this.type.isObject()) {
8583
if (this.type.equals(TYPE_OBJECT)) {
86-
return true;
84+
if ((type.getDimension() > 0) || !type.isPrimitive()) {
85+
return true;
86+
}
87+
}
88+
89+
if (type.isObject()) {
90+
return typeMaker.isAssignable((ObjectType) this.type, (ObjectType) type);
8791
}
8892
}
8993

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/util/ByteCodeParser.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import static org.jd.core.v1.model.javasyntax.declaration.Declaration.FLAG_STATIC;
3838
import static org.jd.core.v1.model.javasyntax.declaration.Declaration.FLAG_SYNTHETIC;
3939
import static org.jd.core.v1.model.javasyntax.statement.ReturnStatement.RETURN;
40+
import static org.jd.core.v1.model.javasyntax.type.ObjectType.TYPE_OBJECT;
4041
import static org.jd.core.v1.model.javasyntax.type.ObjectType.TYPE_UNDEFINED_OBJECT;
4142
import static org.jd.core.v1.model.javasyntax.type.PrimitiveType.*;
4243

@@ -261,7 +262,7 @@ public void parse(BasicBlock basicBlock, Statements statements, DefaultStack<Exp
261262
expression1 = stack.pop();
262263
Class clazz = expression1.getClass();
263264
if ((clazz != ClassFileLocalVariableReferenceExpression.class) && (clazz != FieldReferenceExpression.class)) {
264-
typeParametersToTypeArgumentsBinder.bindParameterTypesWithArgumentTypes(TYPE_VOID, expression1);
265+
typeParametersToTypeArgumentsBinder.bindParameterTypesWithArgumentTypes(TYPE_OBJECT, expression1);
265266
statements.add(new ExpressionStatement(expression1));
266267
}
267268
break;
@@ -726,7 +727,7 @@ public void parse(BasicBlock basicBlock, Statements statements, DefaultStack<Exp
726727
if (opcode == 184) { // INVOKESTATIC
727728
expression1 = typeParametersToTypeArgumentsBinder.newMethodInvocationExpression(lineNumber, new ObjectTypeReferenceExpression(lineNumber, ot), ot, name, descriptor, methodTypes, parameters);
728729
if (TYPE_VOID.equals(methodTypes.returnedType)) {
729-
typeParametersToTypeArgumentsBinder.bindParameterTypesWithArgumentTypes(TYPE_VOID, expression1);
730+
typeParametersToTypeArgumentsBinder.bindParameterTypesWithArgumentTypes(TYPE_OBJECT, expression1);
730731
statements.add(new ExpressionStatement(expression1));
731732
} else {
732733
stack.push(expression1);
@@ -755,7 +756,7 @@ public void parse(BasicBlock basicBlock, Statements statements, DefaultStack<Exp
755756
} else {
756757
expression1 = typeParametersToTypeArgumentsBinder.newMethodInvocationExpression(
757758
lineNumber, getMethodInstanceReference(expression1, ot, name, descriptor), ot, name, descriptor, methodTypes, parameters);
758-
typeParametersToTypeArgumentsBinder.bindParameterTypesWithArgumentTypes(TYPE_VOID, expression1);
759+
typeParametersToTypeArgumentsBinder.bindParameterTypesWithArgumentTypes(TYPE_OBJECT, expression1);
759760
statements.add(new ExpressionStatement(expression1));
760761
}
761762
} else {

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/util/TypeMaker.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -941,7 +941,7 @@ private ObjectType searchSuperParameterizedType(long superHashCode, String super
941941
BindTypeParametersToTypeArgumentsVisitor bindTypeParametersToTypeArgumentsVisitor = new BindTypeParametersToTypeArgumentsVisitor();
942942
HashMap<String, TypeArgument> bindings = new HashMap<>();
943943

944-
if (rightTypeTypes.typeParameters.isList()) {
944+
if (rightTypeTypes.typeParameters.isList() && objectType.getTypeArguments().isTypeArgumentList()) {
945945
Iterator<TypeParameter> iteratorTypeParameter = rightTypeTypes.typeParameters.iterator();
946946
Iterator<TypeArgument> iteratorTypeArgument = objectType.getTypeArguments().getTypeArgumentList().iterator();
947947

@@ -1213,7 +1213,7 @@ private Type loadFieldType(ObjectType objectType, String fieldName, String descr
12131213
BindTypeParametersToTypeArgumentsVisitor bindTypeParametersToTypeArgumentsVisitor = new BindTypeParametersToTypeArgumentsVisitor();
12141214
HashMap<String, TypeArgument> bindings = new HashMap<>();
12151215

1216-
if (typeTypes.typeParameters.isList()) {
1216+
if (typeTypes.typeParameters.isList() && typeArguments.isTypeArgumentList()) {
12171217
Iterator<TypeParameter> iteratorTypeParameter = typeTypes.typeParameters.iterator();
12181218
Iterator<TypeArgument> iteratorTypeArgument = typeArguments.getTypeArgumentList().iterator();
12191219

@@ -1303,7 +1303,7 @@ private MethodTypes loadMethodTypes(ObjectType objectType, String methodName, St
13031303
HashMap<String, TypeArgument> bindings = new HashMap<>();
13041304
MethodTypes newMethodTypes = new MethodTypes();
13051305

1306-
if (typeTypes.typeParameters.isList()) {
1306+
if (typeTypes.typeParameters.isList() && typeArguments.isTypeArgumentList()) {
13071307
Iterator<TypeParameter> iteratorTypeParameter = typeTypes.typeParameters.iterator();
13081308
Iterator<TypeArgument> iteratorTypeArgument = typeArguments.getTypeArgumentList().iterator();
13091309

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/util/TypeParametersToTypeArgumentsBinder.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.*;
1919

2020
import static org.jd.core.v1.model.javasyntax.declaration.Declaration.FLAG_STATIC;
21+
import static org.jd.core.v1.model.javasyntax.type.ObjectType.TYPE_OBJECT;
2122

2223
public class TypeParametersToTypeArgumentsBinder {
2324
protected PopulateBindingsWithTypeParameterVisitor populateBindingsWithTypeParameterVisitor = new PopulateBindingsWithTypeParameterVisitor();
@@ -75,7 +76,7 @@ public ClassFileConstructorInvocationExpression newConstructorInvocationExpressi
7576
TypeMaker.MethodTypes methodTypes, BaseExpression parameters) {
7677

7778
BaseType parameterTypes = clone(methodTypes.parameterTypes);
78-
Map<String, TypeArgument> bindings = createBindings(null, null, null, methodTypes.typeParameters, PrimitiveType.TYPE_VOID, null, parameterTypes, parameters);
79+
Map<String, TypeArgument> bindings = createBindings(null, null, null, methodTypes.typeParameters, TYPE_OBJECT, null, parameterTypes, parameters);
7980

8081
parameterTypes = bindParameterTypesWithArgumentTypes(bindings, parameterTypes);
8182
bindParameterTypesWithArgumentTypes(parameterTypes, parameters);
@@ -99,7 +100,7 @@ public ClassFileSuperConstructorInvocationExpression newSuperConstructorInvocati
99100
BaseTypeArgument typeArguments = typeTypes.superType.getTypeArguments();
100101
BaseTypeParameter methodTypeParameters = methodTypes.typeParameters;
101102

102-
bindings = createBindings(null, typeParameters, typeArguments, methodTypeParameters, PrimitiveType.TYPE_VOID, null, parameterTypes, parameters);
103+
bindings = createBindings(null, typeParameters, typeArguments, methodTypeParameters, TYPE_OBJECT, null, parameterTypes, parameters);
103104
}
104105
}
105106

@@ -139,7 +140,7 @@ public FieldReferenceExpression newFieldReferenceExpression(
139140
BaseTypeParameter typeParameters = typeTypes.typeParameters;
140141
BaseTypeArgument typeArguments = expressionObjectType.getTypeArguments();
141142

142-
bindings = createBindings(expression, typeParameters, typeArguments, null, PrimitiveType.TYPE_VOID, null, null, null);
143+
bindings = createBindings(expression, typeParameters, typeArguments, null, TYPE_OBJECT, null, null, null);
143144
}
144145

145146
type = (Type)bindParameterTypesWithArgumentTypes(bindings, type);
@@ -303,7 +304,7 @@ protected void bindParameterTypesWithArgumentTypes(Type type, ClassFileNewExpres
303304

304305
protected void bindParameterTypesWithArgumentTypes(BaseType types, BaseExpression expressions) {
305306
if (types != null) {
306-
if (types.isList()) {
307+
if (types.isList() && expressions.isList()) {
307308
Iterator<Type> parameterTypesIterator = types.iterator();
308309
Iterator<Expression> parametersIterator = expressions.iterator();
309310

@@ -344,7 +345,7 @@ protected Map<String, TypeArgument> createBindings(
344345
typeParameters.accept(populateBindingsWithTypeParameterVisitor);
345346

346347
if (typeArguments != null) {
347-
if (typeParameters.isList()) {
348+
if (typeParameters.isList() && typeArguments.isTypeArgumentList()) {
348349
Iterator<TypeParameter> iteratorTypeParameter = typeParameters.iterator();
349350
Iterator<TypeArgument> iteratorTypeArgument = typeArguments.getTypeArgumentList().iterator();
350351

@@ -363,13 +364,13 @@ protected Map<String, TypeArgument> createBindings(
363364
methodTypeParameters.accept(populateBindingsWithTypeParameterVisitor);
364365
}
365366

366-
if ((returnType != PrimitiveType.TYPE_VOID) && (returnExpressionType != null)) {
367+
if (!TYPE_OBJECT.equals(returnType) && (returnExpressionType != null)) {
367368
populateBindingsWithTypeArgumentVisitor.init(contextualTypeBounds, bindings, typeBounds, returnType);
368369
returnExpressionType.accept(populateBindingsWithTypeArgumentVisitor);
369370
}
370371

371372
if (parameterTypes != null) {
372-
if (parameterTypes.isList()) {
373+
if (parameterTypes.isList() && parameters.isList()) {
373374
Iterator<Type> parameterTypesIterator = parameterTypes.iterator();
374375
Iterator<Expression> parametersIterator = parameters.iterator();
375376

@@ -548,7 +549,7 @@ public void visit(NewExpression expression) {
548549

549550
@Override
550551
public void visit(CastExpression expression) {
551-
assert (type.getDimension() == expression.getType().getDimension()) : "TypeParametersToTypeArgumentsBinder.visit(CastExpression ce) : invalid array type";
552+
assert TYPE_OBJECT.equals(type) || (type.getDimension() == expression.getType().getDimension()) : "TypeParametersToTypeArgumentsBinder.visit(CastExpression ce) : invalid array type";
552553

553554
if (type.isObject()) {
554555
ObjectType objectType = (ObjectType)type;
@@ -582,15 +583,19 @@ public void visit(CastExpression expression) {
582583

583584
@Override
584585
public void visit(TernaryOperatorExpression expression) {
585-
expression.setType(type);
586-
bindParameterTypesWithArgumentTypes(type, expression.getExpressionTrue());
587-
bindParameterTypesWithArgumentTypes(type, expression.getExpressionFalse());
586+
Type t = type;
587+
588+
expression.setType(t);
589+
bindParameterTypesWithArgumentTypes(t, expression.getExpressionTrue());
590+
bindParameterTypesWithArgumentTypes(t, expression.getExpressionFalse());
588591
}
589592

590593
@Override
591594
public void visit(BinaryOperatorExpression expression) {
592-
bindParameterTypesWithArgumentTypes(type, expression.getLeftExpression());
593-
bindParameterTypesWithArgumentTypes(type, expression.getRightExpression());
595+
Type t = type;
596+
597+
bindParameterTypesWithArgumentTypes(t, expression.getLeftExpression());
598+
bindParameterTypesWithArgumentTypes(t, expression.getRightExpression());
594599
}
595600
}
596601
}

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/visitor/AddCastExpressionVisitor.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,19 +122,28 @@ public void visit(LocalVariableDeclarator declarator) {
122122

123123
@Override
124124
public void visit(ArrayVariableInitializer declaration) {
125-
Type t = type;
125+
if (type.getDimension() == 0) {
126+
acceptListDeclaration(declaration);
127+
} else {
128+
Type t = type;
126129

127-
type = type.createType(type.getDimension() - 1);
128-
acceptListDeclaration(declaration);
129-
type = t;
130+
type = type.createType(type.getDimension() - 1);
131+
acceptListDeclaration(declaration);
132+
type = t;
133+
}
130134
}
131135

132136
@Override
133137
public void visit(ExpressionVariableInitializer declaration) {
134138
Expression expression = declaration.getExpression();
135139

136140
if (expression.getClass() == NewInitializedArray.class) {
137-
((NewInitializedArray)expression).getArrayInitializer().accept(this);
141+
NewInitializedArray nia = (NewInitializedArray)expression;
142+
Type t = type;
143+
144+
type = nia.getType();
145+
nia.getArrayInitializer().accept(this);
146+
type = t;
138147
} else {
139148
declaration.setExpression(updateExpression(type, expression));
140149
}

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/visitor/BindTypeParametersToTypeArgumentsVisitor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ public void visit(GenericType type) {
104104
} else {
105105
typeArgumentToTypeVisitor.init();
106106
ta.accept(typeArgumentToTypeVisitor);
107-
result = typeArgumentToTypeVisitor.getType().createType(type.getDimension());
107+
Type t = typeArgumentToTypeVisitor.getType();
108+
result = t.createType(t.getDimension() + type.getDimension());
108109
}
109110
}
110111

0 commit comments

Comments
 (0)