java-decompiler: code attributes reading restored
This commit is contained in:
parent
686b5abef9
commit
4e79d160ca
@ -18,7 +18,6 @@ package org.jetbrains.java.decompiler.struct;
|
|||||||
import org.jetbrains.java.decompiler.code.*;
|
import org.jetbrains.java.decompiler.code.*;
|
||||||
import org.jetbrains.java.decompiler.struct.attr.StructGeneralAttribute;
|
import org.jetbrains.java.decompiler.struct.attr.StructGeneralAttribute;
|
||||||
import org.jetbrains.java.decompiler.struct.consts.ConstantPool;
|
import org.jetbrains.java.decompiler.struct.consts.ConstantPool;
|
||||||
import org.jetbrains.java.decompiler.struct.lazy.LazyLoader;
|
|
||||||
import org.jetbrains.java.decompiler.util.DataInputFullStream;
|
import org.jetbrains.java.decompiler.util.DataInputFullStream;
|
||||||
import org.jetbrains.java.decompiler.util.VBStyleCollection;
|
import org.jetbrains.java.decompiler.util.VBStyleCollection;
|
||||||
|
|
||||||
@ -55,7 +54,7 @@ public class StructMethod extends StructMember {
|
|||||||
private int codeFullLength = 0;
|
private int codeFullLength = 0;
|
||||||
private InstructionSequence seq;
|
private InstructionSequence seq;
|
||||||
private boolean expanded = false;
|
private boolean expanded = false;
|
||||||
|
private VBStyleCollection<StructGeneralAttribute, String> codeAttributes;
|
||||||
|
|
||||||
public StructMethod(DataInputFullStream in, StructClass clStruct) throws IOException {
|
public StructMethod(DataInputFullStream in, StructClass clStruct) throws IOException {
|
||||||
classStruct = clStruct;
|
classStruct = clStruct;
|
||||||
@ -70,6 +69,10 @@ public class StructMethod extends StructMember {
|
|||||||
descriptor = values[1];
|
descriptor = values[1];
|
||||||
|
|
||||||
attributes = readAttributes(in, pool);
|
attributes = readAttributes(in, pool);
|
||||||
|
if (codeAttributes != null) {
|
||||||
|
attributes.addAllWithKey(codeAttributes);
|
||||||
|
codeAttributes = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -87,12 +90,12 @@ public class StructMethod extends StructMember {
|
|||||||
localVariables = in.readUnsignedShort();
|
localVariables = in.readUnsignedShort();
|
||||||
codeLength = in.readInt();
|
codeLength = in.readInt();
|
||||||
in.discard(codeLength);
|
in.discard(codeLength);
|
||||||
int exc_length = in.readUnsignedShort();
|
int excLength = in.readUnsignedShort();
|
||||||
in.discard(exc_length * 8);
|
in.discard(excLength * 8);
|
||||||
codeFullLength = codeLength + exc_length * 8 + 2;
|
codeFullLength = codeLength + excLength * 8 + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
LazyLoader.skipAttributes(in);
|
codeAttributes = readAttributes(in, pool);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -115,6 +118,7 @@ public class StructMethod extends StructMember {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("AssignmentToForLoopParameter")
|
||||||
private InstructionSequence parseBytecode(DataInputFullStream in, int length, ConstantPool pool) throws IOException {
|
private InstructionSequence parseBytecode(DataInputFullStream in, int length, ConstantPool pool) throws IOException {
|
||||||
VBStyleCollection<Instruction, Integer> instructions = new VBStyleCollection<Instruction, Integer>();
|
VBStyleCollection<Instruction, Integer> instructions = new VBStyleCollection<Instruction, Integer>();
|
||||||
|
|
||||||
|
@ -73,6 +73,7 @@ public class SingleClassesTest {
|
|||||||
@Test public void testCodeConstructs() { doTest("TestCodeConstructs"); }
|
@Test public void testCodeConstructs() { doTest("TestCodeConstructs"); }
|
||||||
@Test public void testConstants() { doTest("TestConstants"); }
|
@Test public void testConstants() { doTest("TestConstants"); }
|
||||||
@Test public void testEnum() { doTest("TestEnum"); }
|
@Test public void testEnum() { doTest("TestEnum"); }
|
||||||
|
@Test public void testDebugSymbols() { doTest("TestDebugSymbols"); }
|
||||||
|
|
||||||
private void doTest(final String testName) {
|
private void doTest(final String testName) {
|
||||||
try {
|
try {
|
||||||
|
BIN
testData/classes/pkg/TestDebugSymbols.class
Normal file
BIN
testData/classes/pkg/TestDebugSymbols.class
Normal file
Binary file not shown.
11
testData/results/TestDebugSymbols.dec
Normal file
11
testData/results/TestDebugSymbols.dec
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package pkg;
|
||||||
|
|
||||||
|
class TestDebugSymbols {
|
||||||
|
private int m() {
|
||||||
|
String text = "text";
|
||||||
|
long prolonged = 42L;
|
||||||
|
float decimated = (float)prolonged / 10.0F;
|
||||||
|
double doubled = (double)(2.0F * decimated);
|
||||||
|
return (text + ":" + prolonged + ":" + decimated + ":" + doubled).length();
|
||||||
|
}
|
||||||
|
}
|
27
testData/src/pkg/TestDebugSymbols.java
Normal file
27
testData/src/pkg/TestDebugSymbols.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2000-2014 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package pkg;
|
||||||
|
|
||||||
|
// need to be compiled with debug info
|
||||||
|
class TestDebugSymbols {
|
||||||
|
private int m() {
|
||||||
|
String text = "text";
|
||||||
|
long prolonged = 42L;
|
||||||
|
float decimated = prolonged / 10.0f;
|
||||||
|
double doubled = 2 * decimated;
|
||||||
|
return (text + ":" + prolonged + ":" + decimated + ":" + doubled).length();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user