Skip to content

Commit f6b0837

Browse files
author
emmanue1
committed
Prepare refactoring of ObjectTypeMaker and SignatureParser
1 parent a94f5b9 commit f6b0837

File tree

8 files changed

+60
-67
lines changed

8 files changed

+60
-67
lines changed

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717
import org.jd.core.v1.model.javasyntax.type.PrimitiveType;
1818

1919
public class AnnotationConverter implements ElementValueVisitor {
20-
protected ObjectTypeMaker factory;
20+
protected ObjectTypeMaker objectTypeMaker;
2121
protected org.jd.core.v1.model.javasyntax.reference.ElementValue elementValue = null;
2222

23-
public AnnotationConverter(ObjectTypeMaker factory) {
24-
this.factory = factory;
23+
public AnnotationConverter(ObjectTypeMaker objectTypeMaker) {
24+
this.objectTypeMaker = objectTypeMaker;
2525
}
2626

2727
@SuppressWarnings("unchecked")
@@ -73,7 +73,7 @@ protected AnnotationReference convert(Annotation annotation) {
7373

7474
assert (descriptor != null) && (descriptor.length() > 2) && (descriptor.charAt(0) == 'L') && (descriptor.charAt(descriptor.length()-1) == ';');
7575

76-
ObjectType ot = factory.makeFromDescriptor(descriptor);
76+
ObjectType ot = objectTypeMaker.makeFromDescriptor(descriptor);
7777
ElementValuePair[] elementValuePairs = annotation.getElementValuePairs();
7878

7979
if (elementValuePairs == null) {
@@ -145,7 +145,7 @@ public void visit(ElementValuePrimitiveType elementValuePrimitiveType) {
145145
@Override
146146
public void visit(ElementValueClassInfo elementValueClassInfo) {
147147
String classInfo = elementValueClassInfo.getClassInfo();
148-
ObjectType ot = factory.makeFromDescriptor(classInfo);
148+
ObjectType ot = objectTypeMaker.makeFromDescriptor(classInfo);
149149
elementValue = new ExpressionElementValue(new TypeReferenceDotClassExpression(ot));
150150
}
151151

@@ -162,7 +162,7 @@ public void visit(ElementValueEnumConstValue elementValueEnumConstValue) {
162162

163163
assert (descriptor != null) && (descriptor.length() > 2) && (descriptor.charAt(0) == 'L') && (descriptor.charAt(descriptor.length()-1) == ';') : "AnnotationConverter.visit(elementValueEnumConstValue)";
164164

165-
ObjectType ot = factory.makeFromDescriptor(descriptor);
165+
ObjectType ot = objectTypeMaker.makeFromDescriptor(descriptor);
166166
String constName = elementValueEnumConstValue.getConstName();
167167
String internalTypeName = descriptor.substring(1, descriptor.length()-1);
168168
elementValue = new ExpressionElementValue(new FieldReferenceExpression(ot, new ObjectTypeReferenceExpression(ot), internalTypeName, constName, descriptor));

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

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ public void parse(BasicBlock basicBlock, Statements<Statement> statements, Defau
8888
ConstantNameAndType constantNameAndType;
8989
String typeName, name, descriptor;
9090
ObjectType ot;
91-
Type t;
9291
int i, count, value;
9392
AbstractLocalVariable localVariable;
9493

@@ -218,8 +217,8 @@ public void parse(BasicBlock basicBlock, Statements<Statement> statements, Defau
218217
valueRef = stack.pop();
219218
indexRef = stack.pop();
220219
arrayRef = stack.pop();
221-
t = arrayRef.getType();
222-
statements.add(new ExpressionStatement(new BinaryOperatorExpression(lineNumber, t.createType(t.getDimension()-1), new ArrayExpression(lineNumber, arrayRef, indexRef), "=", valueRef, 16)));
220+
type1 = arrayRef.getType();
221+
statements.add(new ExpressionStatement(new BinaryOperatorExpression(lineNumber, type1.createType(type1.getDimension()-1), new ArrayExpression(lineNumber, arrayRef, indexRef), "=", valueRef, 16)));
223222
break;
224223
case 80: // LASTORE
225224
valueRef = stack.pop();
@@ -243,8 +242,8 @@ public void parse(BasicBlock basicBlock, Statements<Statement> statements, Defau
243242
valueRef = stack.pop();
244243
indexRef = stack.pop();
245244
arrayRef = stack.pop();
246-
t = arrayRef.getType();
247-
statements.add(new ExpressionStatement(new BinaryOperatorExpression(lineNumber, t.createType(t.getDimension()>0 ? t.getDimension()-1 : 0), new ArrayExpression(lineNumber, arrayRef, indexRef), "=", valueRef, 16)));
245+
type1 = arrayRef.getType();
246+
statements.add(new ExpressionStatement(new BinaryOperatorExpression(lineNumber, type1.createType(type1.getDimension()>0 ? type1.getDimension()-1 : 0), new ArrayExpression(lineNumber, arrayRef, indexRef), "=", valueRef, 16)));
248247
break;
249248
case 84: // BASTORE
250249
valueRef = stack.pop();
@@ -722,9 +721,7 @@ public void parse(BasicBlock basicBlock, Statements<Statement> statements, Defau
722721
case 182: case 183: case 184: case 185: // INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE
723722
constantMemberRef = constants.getConstant( ((code[++offset] & 255) << 8) | (code[++offset] & 255) );
724723
typeName = constants.getConstantTypeName(constantMemberRef.getClassIndex());
725-
ot = (typeName.charAt(0) == '[') ?
726-
objectTypeMaker.makeFromDescriptor(typeName) :
727-
objectTypeMaker.makeFromInternalTypeName(typeName);
724+
ot = objectTypeMaker.makeFromDescriptorOrInternalTypeName(typeName);
728725
constantNameAndType = constants.getConstant(constantMemberRef.getNameAndTypeIndex());
729726
name = constants.getConstantUtf8(constantNameAndType.getNameIndex());
730727
descriptor = constants.getConstantUtf8(constantNameAndType.getDescriptorIndex());
@@ -804,29 +801,25 @@ public void parse(BasicBlock basicBlock, Statements<Statement> statements, Defau
804801
break;
805802
case 192: // CHECKCAST
806803
typeName = constants.getConstantTypeName( ((code[++offset] & 255) << 8) | (code[++offset] & 255) );
807-
t = (typeName.charAt(0) == '[') ?
808-
objectTypeMaker.makeFromDescriptor(typeName) :
809-
objectTypeMaker.makeFromInternalTypeName(typeName);
804+
type1 = objectTypeMaker.makeFromDescriptorOrInternalTypeName(typeName);
810805
expression1 = stack.pop();
811806
if (expression1.getClass() == CastExpression.class) {
812807
// Skip double cast
813-
((CastExpression)expression1).setType(t);
808+
((CastExpression)expression1).setType(type1);
814809
} else {
815810
searchFirstLineNumberVisitor.init();
816811
expression1.accept(searchFirstLineNumberVisitor);
817-
expression1 = new CastExpression(searchFirstLineNumberVisitor.getLineNumber(), t, expression1);
812+
expression1 = new CastExpression(searchFirstLineNumberVisitor.getLineNumber(), type1, expression1);
818813
}
819814
stack.push(expression1);
820815
break;
821816
case 193: // INSTANCEOF
822817
typeName = constants.getConstantTypeName( ((code[++offset] & 255) << 8) | (code[++offset] & 255) );
823-
t = (typeName.charAt(0) == '[') ?
824-
objectTypeMaker.makeFromDescriptor(typeName) :
825-
objectTypeMaker.makeFromInternalTypeName(typeName);
826-
if (t == null) {
827-
t = PrimitiveTypeUtil.getPrimitiveTypeFromDescriptor(typeName);
818+
type1 = objectTypeMaker.makeFromDescriptorOrInternalTypeName(typeName);
819+
if (type1 == null) {
820+
type1 = PrimitiveTypeUtil.getPrimitiveTypeFromDescriptor(typeName);
828821
}
829-
stack.push(new InstanceOfExpression(lineNumber, stack.pop(), t));
822+
stack.push(new InstanceOfExpression(lineNumber, stack.pop(), type1));
830823
break;
831824
case 194: // MONITORENTER
832825
statements.add(new ClassFileMonitorEnterStatement(stack.pop()));
@@ -998,9 +991,7 @@ private void parseLDC(DefaultStack<Expression> stack, ConstantPool constants, in
998991
case Constant.CONSTANT_Class:
999992
int typeNameIndex = ((ConstantClass) constant).getNameIndex();
1000993
String typeName = ((ConstantUtf8)constants.getConstant(typeNameIndex)).getValue();
1001-
Type type = (typeName.charAt(0) == '[') ?
1002-
objectTypeMaker.makeFromDescriptor(typeName) :
1003-
objectTypeMaker.makeFromInternalTypeName(typeName);
994+
Type type = objectTypeMaker.makeFromDescriptorOrInternalTypeName(typeName);
1004995
if (type == null) {
1005996
type = PrimitiveTypeUtil.getPrimitiveTypeFromDescriptor(typeName);
1006997
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ public ObjectType makeFromInternalTypeName(String internalTypeName) {
113113
return ot;
114114
}
115115

116+
public ObjectType makeFromDescriptorOrInternalTypeName(String descriptorOrInternalTypeName) {
117+
return (descriptorOrInternalTypeName.charAt(0) == '[') ? makeFromDescriptor(descriptorOrInternalTypeName) : makeFromInternalTypeName(descriptorOrInternalTypeName);
118+
}
119+
116120
private ObjectType loadFromLoader(String internalTypeName) {
117121
try {
118122
ObjectType ot = internalTypeNameToObjectTypeCache.get(internalTypeName);

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.expression.ClassFileNewExpression;
2020
import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.expression.ClassFileSuperConstructorInvocationExpression;
2121
import org.jd.core.v1.service.converter.classfiletojavasyntax.util.PrimitiveTypeUtil;
22-
import org.jd.core.v1.service.converter.classfiletojavasyntax.util.SignatureParser;
2322
import org.jd.core.v1.util.DefaultList;
2423

2524
import java.util.AbstractList;

src/test/java/org/jd/core/v1/AnnotationConverterTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public class AnnotationConverterTest extends TestCase {
2727
public void test() throws Exception {
2828
InputStream is = this.getClass().getResourceAsStream("/zip/data-java-jdk-1.7.0.zip");
2929
ZipLoader loader = new ZipLoader(is);
30-
ObjectTypeMaker factory = new ObjectTypeMaker(loader);
31-
AnnotationConverter converter = new AnnotationConverter(factory);
30+
ObjectTypeMaker objectTypeMaker = new ObjectTypeMaker(loader);
31+
AnnotationConverter converter = new AnnotationConverter(objectTypeMaker);
3232
DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor();
3333

3434
Message message = new Message();

src/test/java/org/jd/core/v1/ControlFlowGraphTest.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,12 @@
3434

3535
import static org.jd.core.v1.service.converter.classfiletojavasyntax.model.cfg.BasicBlock.*;
3636

37-
3837
public class ControlFlowGraphTest extends TestCase {
3938
protected DeserializeClassFileProcessor deserializer = new DeserializeClassFileProcessor();
4039
protected ConvertClassFileProcessor converter = new ConvertClassFileProcessor();
4140
protected ClassPathLoader loader = new ClassPathLoader();
42-
protected ObjectTypeMaker factory = new ObjectTypeMaker(loader);
43-
protected SignatureParser parser = new SignatureParser(factory);
41+
protected ObjectTypeMaker objectTypeMaker = new ObjectTypeMaker(loader);
42+
protected SignatureParser signatureParser = new SignatureParser(objectTypeMaker);
4443

4544
// --- Basic test ----------------------------------------------------------------------------------------------- //
4645
@Test
@@ -2635,7 +2634,7 @@ protected InputStream loadFile(String zipName) throws IOException {
26352634
}
26362635

26372636
protected Method searchMethod(String internalTypeName, String methodName) throws Exception {
2638-
return searchMethod(loader, factory, parser, internalTypeName, methodName, null);
2637+
return searchMethod(loader, objectTypeMaker, signatureParser, internalTypeName, methodName, null);
26392638
}
26402639

26412640
protected Method searchMethod(InputStream is, String internalTypeName, String methodName) throws Exception {
@@ -2647,18 +2646,18 @@ protected Method searchMethod(InputStream is, String internalTypeName, String me
26472646
return null;
26482647
} else {
26492648
ZipLoader loader = new ZipLoader(is);
2650-
ObjectTypeMaker factory = new ObjectTypeMaker(loader);
2651-
SignatureParser parser = new SignatureParser(factory);
2652-
return searchMethod(loader, factory, parser, internalTypeName, methodName, methodDescriptor);
2649+
ObjectTypeMaker objectTypeMaker = new ObjectTypeMaker(loader);
2650+
SignatureParser signatureParser = new SignatureParser(objectTypeMaker);
2651+
return searchMethod(loader, objectTypeMaker, signatureParser, internalTypeName, methodName, methodDescriptor);
26532652
}
26542653
}
26552654

2656-
protected Method searchMethod(Loader loader, ObjectTypeMaker factory, SignatureParser parser, String internalTypeName, String methodName, String methodDescriptor) throws Exception {
2655+
protected Method searchMethod(Loader loader, ObjectTypeMaker objectTypeMaker, SignatureParser signatureParser, String internalTypeName, String methodName, String methodDescriptor) throws Exception {
26572656
Message message = new Message();
26582657
message.setHeader("mainInternalTypeName", internalTypeName);
26592658
message.setHeader("loader", loader);
2660-
message.setHeader("objectTypeMaker", factory);
2661-
message.setHeader("signatureParser", parser);
2659+
message.setHeader("objectTypeMaker", objectTypeMaker);
2660+
message.setHeader("signatureParser", signatureParser);
26622661

26632662
deserializer.process(message);
26642663
converter.process(message);

src/test/java/org/jd/core/v1/JarFileToJavaSourceTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ protected void test(InputStream inputStream) throws Exception {
9595
// Recompile source
9696
String source = printer.toString();
9797

98-
// TODO if (!CompilerUtil.compile("1.8", new JavaSourceFileObject(internalTypeName, source))) {
99-
// TODO recompilationFailedCounter++;
100-
// TODO }
98+
if (!CompilerUtil.compile("1.8", new JavaSourceFileObject(internalTypeName, source))) {
99+
recompilationFailedCounter++;
100+
}
101101
}
102102
}
103103

@@ -128,7 +128,7 @@ protected void test(InputStream inputStream) throws Exception {
128128

129129
assertTrue(exceptionCounter == 0);
130130
assertTrue(assertFailedCounter == 0);
131-
// TODO assertTrue(recompilationFailedCounter == 0);
131+
assertTrue(recompilationFailedCounter == 0);
132132
}
133133
}
134134

0 commit comments

Comments
 (0)