Skip to content

Commit 85b4309

Browse files
committed
Backup
1 parent 035918a commit 85b4309

File tree

9 files changed

+342
-134
lines changed

9 files changed

+342
-134
lines changed

ExtensionsNS/Extensions.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Runtime.CompilerServices;
88
using System.Text;
99
using System.Threading.Tasks;
10+
using System.Windows.Threading;
1011
using System.Xml;
1112

1213
namespace Java_Bytecode_Toolkit.ExtensionsNS
@@ -198,6 +199,14 @@ public static void WriteToXMLWriter(this object obj, XmlWriter xmlWriter, JavaCl
198199
xmlWriter.WriteEndElement();
199200
}
200201

202+
public static DispatcherOperation BeginInvoke(this Dispatcher dispatcher, Action action, params object[] args)
203+
{
204+
return dispatcher.BeginInvoke(
205+
(Action)action,
206+
args
207+
);
208+
}
209+
201210
public class UnsupportedConversionException : Exception
202211
{
203212
public UnsupportedConversionException() : base("Conversion from byte array to current data type is not supported.")

FileSystemItem.cs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
using Java_Bytecode_Toolkit.ExtensionsNS;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.IO;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using System.Xml;
9+
10+
namespace Java_Bytecode_Toolkit
11+
{
12+
public class FileSystemItem
13+
{
14+
public static readonly XmlWriterSettings DEFAULT_XML_WRITER_SETTINGS = new XmlWriterSettings()
15+
{
16+
Indent = true,
17+
NewLineOnAttributes = true
18+
};
19+
20+
public string filePath = "";
21+
22+
public string Name
23+
{
24+
get
25+
{
26+
return Path.GetFileName(this.filePath);
27+
}
28+
}
29+
30+
public bool IsFile
31+
{
32+
get
33+
{
34+
return File.Exists(this.filePath);
35+
}
36+
}
37+
38+
public bool IsDirectory
39+
{
40+
get
41+
{
42+
return Directory.Exists(this.filePath);
43+
}
44+
}
45+
46+
public FileSystemItem()
47+
{
48+
49+
}
50+
51+
public FileSystemItem(string filePath)
52+
{
53+
this.filePath = filePath;
54+
}
55+
56+
public virtual void ExportAsXMLFile(string exportedXMLFilePath)
57+
{
58+
using (XmlWriter xmlWriter = XmlWriter.Create(exportedXMLFilePath, DEFAULT_XML_WRITER_SETTINGS))
59+
{
60+
xmlWriter.WriteStartElement("FileSystemItem");
61+
62+
xmlWriter.WriteAttributeString("FilePath", this.filePath);
63+
64+
xmlWriter.WriteAttributeString("Name", this.Name);
65+
66+
xmlWriter.WriteEndElement();
67+
68+
xmlWriter.Flush();
69+
}
70+
}
71+
}
72+
}

JavaFileTreeViewItem.cs renamed to FileSystemTreeViewItem.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,22 @@
2020

2121
namespace Java_Bytecode_Toolkit
2222
{
23-
public class JavaFileTreeViewItem : TreeViewItem
23+
public class FileSystemTreeViewItem : TreeViewItem
2424
{
2525
private MenuItem closeContextMenuItem = null;
2626

2727
private MenuItem exportAsXMLFileContextMenuItem = null;
2828

2929
private SaveFileDialog exportAsXMLFileSaveFileDialog = new SaveFileDialog();
3030

31-
static JavaFileTreeViewItem()
31+
static FileSystemTreeViewItem()
3232
{
33-
DefaultStyleKeyProperty.OverrideMetadata(typeof(JavaFileTreeViewItem), new FrameworkPropertyMetadata(typeof(JavaFileTreeViewItem)));
33+
DefaultStyleKeyProperty.OverrideMetadata(typeof(FileSystemTreeViewItem), new FrameworkPropertyMetadata(typeof(FileSystemTreeViewItem)));
3434
}
3535

3636
private void OnExportAsXMLFileSaveFileDialogFileOk(object sender, CancelEventArgs e)
3737
{
38-
App.Current.MainWindow.homeScreen.javaClassFileTreeViewItemToJavaClassFileMap[this].ExportAsXMLFile(
38+
App.Current.MainWindow.homeScreen.fileSystemTreeViewItemToFileSystemItemMap[this].ExportAsXMLFile(
3939
this.exportAsXMLFileSaveFileDialog.FileName
4040
);
4141
}
@@ -50,7 +50,7 @@ private void OnCloseContextMenuItemClick(object sender, RoutedEventArgs e)
5050
App.Current.MainWindow.homeScreen.MainTreeView.Items.Remove(this);
5151
}
5252

53-
public JavaFileTreeViewItem()
53+
public FileSystemTreeViewItem()
5454
{
5555

5656
}

HomeScreen.xaml.cs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace Java_Bytecode_Toolkit
2525
/// </summary>
2626
public partial class HomeScreen : UserControl
2727
{
28-
public Dictionary<JavaFileTreeViewItem, JavaClassFile> javaClassFileTreeViewItemToJavaClassFileMap = new Dictionary<JavaFileTreeViewItem, JavaClassFile>();
28+
public Dictionary<FileSystemTreeViewItem, FileSystemItem> fileSystemTreeViewItemToFileSystemItemMap = new Dictionary<FileSystemTreeViewItem, FileSystemItem>();
2929

3030
private void OnMainTreeViewSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
3131
{
@@ -36,29 +36,32 @@ private void OnMainTreeViewSelectedItemChanged(object sender, RoutedPropertyChan
3636
return;
3737
}
3838

39-
JavaClassFile selectedJavaClassFile = this.javaClassFileTreeViewItemToJavaClassFileMap[this.MainTreeView.SelectedItem as JavaFileTreeViewItem];
39+
FileSystemItem selectedJavaFile = this.fileSystemTreeViewItemToFileSystemItemMap[this.MainTreeView.SelectedItem as FileSystemTreeViewItem];
4040

41-
this.ClassNameTextBlock.Text = selectedJavaClassFile.Name.Split('.')[0];
41+
this.ClassNameTextBlock.Text = selectedJavaFile.Name.Split('.')[0];
4242

43-
this.FilePathTextBlock.Text = selectedJavaClassFile.filePath;
43+
this.FilePathTextBlock.Text = selectedJavaFile.filePath;
4444

45-
this.FileMagicNumberInHexTextBlock.Text = "0x" + selectedJavaClassFile.magic.ToString("X");
45+
if (selectedJavaFile is JavaClassFile selectedJavaClassFile)
46+
{
47+
this.FileMagicNumberInHexTextBlock.Text = "0x" + selectedJavaClassFile.magic.ToString("X");
4648

47-
this.MajorVersionTextBlock.Text = selectedJavaClassFile.majorVersion.ToString();
49+
this.MajorVersionTextBlock.Text = selectedJavaClassFile.majorVersion.ToString();
4850

49-
this.MinorVersionTextBlock.Text = selectedJavaClassFile.minorVersion.ToString();
51+
this.MinorVersionTextBlock.Text = selectedJavaClassFile.minorVersion.ToString();
5052

51-
this.ConstantPoolSizeTextBlock.Text = selectedJavaClassFile.constantPoolCount.ToString();
53+
this.ConstantPoolSizeTextBlock.Text = selectedJavaClassFile.constantPoolCount.ToString();
5254

53-
this.AccessFlagsTextBlock.Text = selectedJavaClassFile.accessFlags.ToString();
55+
this.AccessFlagsTextBlock.Text = selectedJavaClassFile.accessFlags.ToString();
5456

55-
this.NumInterfacesTextBlock.Text = selectedJavaClassFile.interfacesCount.ToString();
57+
this.NumInterfacesTextBlock.Text = selectedJavaClassFile.interfacesCount.ToString();
5658

57-
this.NumFieldsTextBlock.Text = selectedJavaClassFile.fieldsCount.ToString();
59+
this.NumFieldsTextBlock.Text = selectedJavaClassFile.fieldsCount.ToString();
5860

59-
this.NumMethodsTextBlock.Text = selectedJavaClassFile.methodsCount.ToString();
61+
this.NumMethodsTextBlock.Text = selectedJavaClassFile.methodsCount.ToString();
6062

61-
this.NumAttribsTextBlock.Text = selectedJavaClassFile.attributesCount.ToString();
63+
this.NumAttribsTextBlock.Text = selectedJavaClassFile.attributesCount.ToString();
64+
}
6265

6366
this.SelectedFileTabControl.Visibility = Visibility.Visible;
6467
}

Java-Bytecode-Toolkit.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@
124124
</Compile>
125125
<Compile Include="Configuration.cs" />
126126
<Compile Include="ExtendedButton.cs" />
127+
<Compile Include="FileSystemItem.cs" />
128+
<Compile Include="JavaJarFile.cs" />
127129
<Compile Include="LoadingScreen.xaml.cs">
128130
<DependentUpon>LoadingScreen.xaml</DependentUpon>
129131
</Compile>
@@ -174,7 +176,7 @@
174176
<DependentUpon>HomeScreen.xaml</DependentUpon>
175177
</Compile>
176178
<Compile Include="JavaClassFile.cs" />
177-
<Compile Include="JavaFileTreeViewItem.cs" />
179+
<Compile Include="FileSystemTreeViewItem.cs" />
178180
<Compile Include="MainWindow.xaml.cs">
179181
<DependentUpon>MainWindow.xaml</DependentUpon>
180182
<SubType>Code</SubType>

JavaClassFile.cs

Lines changed: 56 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,11 @@
1414

1515
namespace Java_Bytecode_Toolkit
1616
{
17-
public class JavaClassFile
17+
public class JavaClassFile : FileSystemItem
1818
{
19-
private static readonly XmlWriterSettings DEFAULT_XML_WRITER_SETTINGS = new XmlWriterSettings()
20-
{
21-
Indent = true,
22-
NewLineOnAttributes = true
23-
};
24-
2519
// Note: Everything in Java binary files is stored in big-endian order.
2620
public const bool IS_JAVA_BINARY_FILE_LITTLE_ENDIAN = false;
2721

28-
public string filePath = "";
29-
3022
public UInt32 magic = 0;
3123

3224
public UInt16 minorVersion = 0;
@@ -65,106 +57,93 @@ public class JavaClassFile
6557
// Array size = attributesCount
6658
public AttributeInfo[] attributes = null;
6759

68-
public String Name
60+
public JavaClassFile() : base()
6961
{
70-
get
71-
{
72-
string[] filePathParts = this.filePath.Split(
73-
Path.DirectorySeparatorChar
74-
);
7562

76-
return filePathParts[filePathParts.Length - 1];
77-
}
7863
}
7964

80-
public JavaClassFile()
65+
public JavaClassFile(string javaClassFilePath) : base(javaClassFilePath)
8166
{
82-
83-
}
84-
85-
public JavaClassFile(string javaClassFilePath)
86-
{
87-
this.filePath = javaClassFilePath;
88-
8967
bool readSuccessful = this.Read();
9068
}
9169

9270
public bool Read()
9371
{
94-
FileStream javaClassFileStream = null;
95-
9672
try
9773
{
98-
javaClassFileStream = File.OpenRead(this.filePath);
99-
}
100-
catch
101-
{
102-
return false;
103-
}
74+
using (FileStream javaClassFileStream = File.OpenRead(this.filePath))
75+
{
76+
this.magic = javaClassFileStream.ReadBytesFromStreamAs<uint>(
77+
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
78+
);
10479

105-
this.magic = javaClassFileStream.ReadBytesFromStreamAs<uint>(
106-
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
107-
);
80+
this.minorVersion = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
81+
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
82+
);
10883

109-
this.minorVersion = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
110-
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
111-
);
84+
this.majorVersion = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
85+
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
86+
);
11287

113-
this.majorVersion = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
114-
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
115-
);
88+
this.constantPoolCount = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
89+
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
90+
);
11691

117-
this.constantPoolCount = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
118-
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
119-
);
92+
this.constantPool = new ConstantPoolInfo[this.constantPoolCount - 1];
12093

121-
this.constantPool = new ConstantPoolInfo[this.constantPoolCount - 1];
94+
this.ReadConstantPool(javaClassFileStream);
12295

123-
this.ReadConstantPool(javaClassFileStream);
96+
this.accessFlags = (AccessFlags)javaClassFileStream.ReadBytesFromStreamAs<UInt16>(
97+
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
98+
);
12499

125-
this.accessFlags = (AccessFlags)javaClassFileStream.ReadBytesFromStreamAs<UInt16>(
126-
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
127-
);
100+
this.thisClass = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
101+
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
102+
);
128103

129-
this.thisClass = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
130-
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
131-
);
104+
this.superClass = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
105+
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
106+
);
132107

133-
this.superClass = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
134-
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
135-
);
108+
this.interfacesCount = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
109+
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
110+
);
136111

137-
this.interfacesCount = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
138-
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
139-
);
112+
this.interfaces = new ushort[this.interfacesCount];
140113

141-
this.interfaces = new ushort[this.interfacesCount];
114+
this.ReadInterfaces(javaClassFileStream);
142115

143-
this.ReadInterfaces(javaClassFileStream);
116+
this.fieldsCount = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
117+
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
118+
);
144119

145-
this.fieldsCount = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
146-
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
147-
);
120+
this.fields = new FieldInfo[this.fieldsCount];
148121

149-
this.fields = new FieldInfo[this.fieldsCount];
122+
this.ReadFields(javaClassFileStream);
150123

151-
this.ReadFields(javaClassFileStream);
124+
this.methodsCount = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
125+
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
126+
);
152127

153-
this.methodsCount = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
154-
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
155-
);
128+
this.methods = new MethodInfo[this.methodsCount];
156129

157-
this.methods = new MethodInfo[this.methodsCount];
130+
this.ReadMethods(javaClassFileStream);
158131

159-
this.ReadMethods(javaClassFileStream);
132+
this.attributesCount = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
133+
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
134+
);
160135

161-
this.attributesCount = javaClassFileStream.ReadBytesFromStreamAs<ushort>(
162-
IS_JAVA_BINARY_FILE_LITTLE_ENDIAN
163-
);
136+
this.attributes = new AttributeInfo[this.attributesCount];
164137

165-
this.attributes = new AttributeInfo[this.attributesCount];
138+
this.ReadAttributes(javaClassFileStream);
139+
}
140+
}
141+
catch (Exception e)
142+
{
143+
App.Current.logger.WriteLine(e.ToString());
166144

167-
this.ReadAttributes(javaClassFileStream);
145+
return false;
146+
}
168147

169148
return true;
170149
}
@@ -520,7 +499,7 @@ public void Save()
520499

521500
}
522501

523-
public void ExportAsXMLFile(string exportedXMLFilePath)
502+
public override void ExportAsXMLFile(string exportedXMLFilePath)
524503
{
525504
using (XmlWriter xmlWriter = XmlWriter.Create(exportedXMLFilePath, DEFAULT_XML_WRITER_SETTINGS))
526505
{

0 commit comments

Comments
 (0)