11-21-2006 Jonathan Pobst <monkey@jpobst.com>

MoMA Initial Import

svn path=/trunk/moma/; revision=68284
This commit is contained in:
Jonathan Pobst 2006-11-21 20:13:51 +00:00
Коммит a96043bcd8
41 изменённых файлов: 2889 добавлений и 0 удалений

429
MainForm.Designer.cs сгенерированный Normal file
Просмотреть файл

@ -0,0 +1,429 @@
namespace MoMA
{
partial class MainForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose (bool disposing)
{
if (disposing && (components != null)) {
components.Dispose ();
}
base.Dispose (disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent ()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager (typeof (MainForm));
this.pictureBox1 = new System.Windows.Forms.PictureBox ();
this.NextButton = new System.Windows.Forms.Button ();
this.BackButton = new System.Windows.Forms.Button ();
this.label1 = new System.Windows.Forms.Label ();
this.StepLabel = new System.Windows.Forms.Label ();
this.IntroductionLabel = new System.Windows.Forms.Label ();
this.AssemblyLabel = new System.Windows.Forms.Label ();
this.AssemblyAddButton = new System.Windows.Forms.Button ();
this.AssemblyRemoveButton = new System.Windows.Forms.Button ();
this.AssemblyListView = new System.Windows.Forms.ListView ();
this.columnHeader1 = new System.Windows.Forms.ColumnHeader ();
this.MonoTodoResultsImage = new System.Windows.Forms.PictureBox ();
this.MonoTodoResultsLabel = new System.Windows.Forms.Label ();
this.AnalysisResultsLabel = new System.Windows.Forms.Label ();
this.NotImplementedResultsLabel = new System.Windows.Forms.Label ();
this.NotImplementedResultsImage = new System.Windows.Forms.PictureBox ();
this.PInvokesResultsLabel = new System.Windows.Forms.Label ();
this.PInvokesResultsImage = new System.Windows.Forms.PictureBox ();
this.AssemblyInstructions = new System.Windows.Forms.Label ();
this.MissingResultsLabel = new System.Windows.Forms.Label ();
this.MissingResultsImage = new System.Windows.Forms.PictureBox ();
this.ResultsText = new System.Windows.Forms.Label ();
this.ResultsDetailLink = new System.Windows.Forms.LinkLabel ();
this.ProjectLink = new System.Windows.Forms.LinkLabel ();
this.SubmitLabel = new System.Windows.Forms.Label ();
this.SubmitInstructions = new System.Windows.Forms.Label ();
this.ViewReportButton = new System.Windows.Forms.Button ();
this.SubmitReportButton = new System.Windows.Forms.Button ();
this.label2 = new System.Windows.Forms.Label ();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit ();
((System.ComponentModel.ISupportInitialize)(this.MonoTodoResultsImage)).BeginInit ();
((System.ComponentModel.ISupportInitialize)(this.NotImplementedResultsImage)).BeginInit ();
((System.ComponentModel.ISupportInitialize)(this.PInvokesResultsImage)).BeginInit ();
((System.ComponentModel.ISupportInitialize)(this.MissingResultsImage)).BeginInit ();
this.SuspendLayout ();
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.Color.Transparent;
this.pictureBox1.Image = global::MoMA.Properties.Resources.monkey;
this.pictureBox1.Location = new System.Drawing.Point (12, 12);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size (100, 119);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// NextButton
//
this.NextButton.Location = new System.Drawing.Point (621, 429);
this.NextButton.Name = "NextButton";
this.NextButton.Size = new System.Drawing.Size (86, 30);
this.NextButton.TabIndex = 1;
this.NextButton.Text = "Next";
this.NextButton.UseVisualStyleBackColor = true;
this.NextButton.Click += new System.EventHandler (this.NextButton_Click);
//
// BackButton
//
this.BackButton.Enabled = false;
this.BackButton.Location = new System.Drawing.Point (529, 429);
this.BackButton.Name = "BackButton";
this.BackButton.Size = new System.Drawing.Size (86, 30);
this.BackButton.TabIndex = 2;
this.BackButton.Text = "Back";
this.BackButton.UseVisualStyleBackColor = true;
this.BackButton.Click += new System.EventHandler (this.BackButton_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.BackColor = System.Drawing.Color.Transparent;
this.label1.Font = new System.Drawing.Font ("Arial", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.Location = new System.Drawing.Point (135, 12);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size (340, 32);
this.label1.TabIndex = 3;
this.label1.Text = "Mono Migration Analyzer";
//
// StepLabel
//
this.StepLabel.AutoSize = true;
this.StepLabel.Font = new System.Drawing.Font ("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.StepLabel.Location = new System.Drawing.Point (12, 414);
this.StepLabel.Name = "StepLabel";
this.StepLabel.Size = new System.Drawing.Size (60, 14);
this.StepLabel.TabIndex = 4;
this.StepLabel.Text = "Step 1 of 4";
//
// IntroductionLabel
//
this.IntroductionLabel.Font = new System.Drawing.Font ("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.IntroductionLabel.Location = new System.Drawing.Point (138, 130);
this.IntroductionLabel.Name = "IntroductionLabel";
this.IntroductionLabel.Size = new System.Drawing.Size (530, 202);
this.IntroductionLabel.TabIndex = 5;
this.IntroductionLabel.Text = resources.GetString ("IntroductionLabel.Text");
//
// AssemblyLabel
//
this.AssemblyLabel.Font = new System.Drawing.Font ("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.AssemblyLabel.Location = new System.Drawing.Point (170, 100);
this.AssemblyLabel.Name = "AssemblyLabel";
this.AssemblyLabel.Size = new System.Drawing.Size (416, 20);
this.AssemblyLabel.TabIndex = 6;
this.AssemblyLabel.Text = "Choose the assemblies to analyze:";
//
// AssemblyAddButton
//
this.AssemblyAddButton.Image = global::MoMA.Properties.Resources.list_add;
this.AssemblyAddButton.Location = new System.Drawing.Point (592, 123);
this.AssemblyAddButton.Name = "AssemblyAddButton";
this.AssemblyAddButton.Size = new System.Drawing.Size (30, 30);
this.AssemblyAddButton.TabIndex = 8;
this.AssemblyAddButton.UseVisualStyleBackColor = true;
this.AssemblyAddButton.Click += new System.EventHandler (this.AssemblyAddButton_Click);
//
// AssemblyRemoveButton
//
this.AssemblyRemoveButton.Image = global::MoMA.Properties.Resources.list_remove;
this.AssemblyRemoveButton.Location = new System.Drawing.Point (592, 159);
this.AssemblyRemoveButton.Name = "AssemblyRemoveButton";
this.AssemblyRemoveButton.Size = new System.Drawing.Size (30, 30);
this.AssemblyRemoveButton.TabIndex = 9;
this.AssemblyRemoveButton.UseVisualStyleBackColor = true;
this.AssemblyRemoveButton.Click += new System.EventHandler (this.AssemblyRemoveButton_Click);
//
// AssemblyListView
//
this.AssemblyListView.Columns.AddRange (new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1});
this.AssemblyListView.FullRowSelect = true;
this.AssemblyListView.Location = new System.Drawing.Point (173, 123);
this.AssemblyListView.MultiSelect = false;
this.AssemblyListView.Name = "AssemblyListView";
this.AssemblyListView.Size = new System.Drawing.Size (413, 145);
this.AssemblyListView.TabIndex = 10;
this.AssemblyListView.UseCompatibleStateImageBehavior = false;
this.AssemblyListView.View = System.Windows.Forms.View.Details;
//
// columnHeader1
//
this.columnHeader1.Text = "Assembly";
this.columnHeader1.Width = 409;
//
// MonoTodoResultsImage
//
this.MonoTodoResultsImage.Image = global::MoMA.Properties.Resources.button_ok;
this.MonoTodoResultsImage.Location = new System.Drawing.Point (193, 214);
this.MonoTodoResultsImage.Name = "MonoTodoResultsImage";
this.MonoTodoResultsImage.Size = new System.Drawing.Size (22, 22);
this.MonoTodoResultsImage.TabIndex = 11;
this.MonoTodoResultsImage.TabStop = false;
//
// MonoTodoResultsLabel
//
this.MonoTodoResultsLabel.Font = new System.Drawing.Font ("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.MonoTodoResultsLabel.Location = new System.Drawing.Point (220, 216);
this.MonoTodoResultsLabel.Name = "MonoTodoResultsLabel";
this.MonoTodoResultsLabel.Size = new System.Drawing.Size (310, 20);
this.MonoTodoResultsLabel.TabIndex = 12;
this.MonoTodoResultsLabel.Text = "Methods marked with [MonoTodo] called: 0";
//
// AnalysisResultsLabel
//
this.AnalysisResultsLabel.Font = new System.Drawing.Font ("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.AnalysisResultsLabel.Location = new System.Drawing.Point (169, 100);
this.AnalysisResultsLabel.Name = "AnalysisResultsLabel";
this.AnalysisResultsLabel.Size = new System.Drawing.Size (416, 20);
this.AnalysisResultsLabel.TabIndex = 14;
this.AnalysisResultsLabel.Text = "Analysis Summary:";
//
// NotImplementedResultsLabel
//
this.NotImplementedResultsLabel.Font = new System.Drawing.Font ("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.NotImplementedResultsLabel.Location = new System.Drawing.Point (220, 188);
this.NotImplementedResultsLabel.Name = "NotImplementedResultsLabel";
this.NotImplementedResultsLabel.Size = new System.Drawing.Size (395, 20);
this.NotImplementedResultsLabel.TabIndex = 16;
this.NotImplementedResultsLabel.Text = "Methods called that throw NotImplementedException: 0";
//
// NotImplementedResultsImage
//
this.NotImplementedResultsImage.Image = global::MoMA.Properties.Resources.button_ok;
this.NotImplementedResultsImage.Location = new System.Drawing.Point (193, 186);
this.NotImplementedResultsImage.Name = "NotImplementedResultsImage";
this.NotImplementedResultsImage.Size = new System.Drawing.Size (22, 22);
this.NotImplementedResultsImage.TabIndex = 15;
this.NotImplementedResultsImage.TabStop = false;
//
// PInvokesResultsLabel
//
this.PInvokesResultsLabel.Font = new System.Drawing.Font ("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.PInvokesResultsLabel.Location = new System.Drawing.Point (220, 160);
this.PInvokesResultsLabel.Name = "PInvokesResultsLabel";
this.PInvokesResultsLabel.Size = new System.Drawing.Size (310, 20);
this.PInvokesResultsLabel.TabIndex = 19;
this.PInvokesResultsLabel.Text = "P/Invokes called: 0";
//
// PInvokesResultsImage
//
this.PInvokesResultsImage.Image = global::MoMA.Properties.Resources.button_ok;
this.PInvokesResultsImage.Location = new System.Drawing.Point (193, 158);
this.PInvokesResultsImage.Name = "PInvokesResultsImage";
this.PInvokesResultsImage.Size = new System.Drawing.Size (22, 22);
this.PInvokesResultsImage.TabIndex = 18;
this.PInvokesResultsImage.TabStop = false;
//
// AssemblyInstructions
//
this.AssemblyInstructions.Font = new System.Drawing.Font ("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.AssemblyInstructions.Location = new System.Drawing.Point (173, 278);
this.AssemblyInstructions.Name = "AssemblyInstructions";
this.AssemblyInstructions.Size = new System.Drawing.Size (413, 54);
this.AssemblyInstructions.TabIndex = 21;
this.AssemblyInstructions.Text = "Select the main assembly (.exe or .dll) as well as any referenced user libraries " +
"(.dll). (Do not select assemblies that ship with .Net, like System.Xml or Syste" +
"m.Windows.Forms.)";
//
// MissingResultsLabel
//
this.MissingResultsLabel.Font = new System.Drawing.Font ("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.MissingResultsLabel.Location = new System.Drawing.Point (220, 132);
this.MissingResultsLabel.Name = "MissingResultsLabel";
this.MissingResultsLabel.Size = new System.Drawing.Size (310, 20);
this.MissingResultsLabel.TabIndex = 23;
this.MissingResultsLabel.Text = "Methods that still missing in Mono: 0";
//
// MissingResultsImage
//
this.MissingResultsImage.Image = global::MoMA.Properties.Resources.button_ok;
this.MissingResultsImage.Location = new System.Drawing.Point (193, 130);
this.MissingResultsImage.Name = "MissingResultsImage";
this.MissingResultsImage.Size = new System.Drawing.Size (22, 22);
this.MissingResultsImage.TabIndex = 22;
this.MissingResultsImage.TabStop = false;
//
// ResultsText
//
this.ResultsText.Font = new System.Drawing.Font ("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.ResultsText.Location = new System.Drawing.Point (170, 278);
this.ResultsText.Name = "ResultsText";
this.ResultsText.Size = new System.Drawing.Size (416, 54);
this.ResultsText.TabIndex = 24;
this.ResultsText.Text = "Congratulations! No potential issues were detected in your assemblies. The only" +
" thing left to do is to try running them on Mono and see what happens.";
//
// ResultsDetailLink
//
this.ResultsDetailLink.AutoSize = true;
this.ResultsDetailLink.Font = new System.Drawing.Font ("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.ResultsDetailLink.Location = new System.Drawing.Point (471, 332);
this.ResultsDetailLink.Name = "ResultsDetailLink";
this.ResultsDetailLink.Size = new System.Drawing.Size (115, 16);
this.ResultsDetailLink.TabIndex = 25;
this.ResultsDetailLink.TabStop = true;
this.ResultsDetailLink.Text = "View Detail Report";
this.ResultsDetailLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler (this.ResultsDetailLink_LinkClicked);
//
// ProjectLink
//
this.ProjectLink.Font = new System.Drawing.Font ("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.ProjectLink.Location = new System.Drawing.Point (210, 438);
this.ProjectLink.Name = "ProjectLink";
this.ProjectLink.Size = new System.Drawing.Size (172, 14);
this.ProjectLink.TabIndex = 26;
this.ProjectLink.TabStop = true;
this.ProjectLink.Text = "http://www.mono-project.com";
this.ProjectLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler (this.ProjectLink_LinkClicked);
//
// SubmitLabel
//
this.SubmitLabel.Font = new System.Drawing.Font ("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.SubmitLabel.Location = new System.Drawing.Point (173, 98);
this.SubmitLabel.Name = "SubmitLabel";
this.SubmitLabel.Size = new System.Drawing.Size (416, 20);
this.SubmitLabel.TabIndex = 27;
this.SubmitLabel.Text = "Submit Results:";
//
// SubmitInstructions
//
this.SubmitInstructions.Font = new System.Drawing.Font ("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.SubmitInstructions.Location = new System.Drawing.Point (173, 123);
this.SubmitInstructions.Name = "SubmitInstructions";
this.SubmitInstructions.Size = new System.Drawing.Size (416, 183);
this.SubmitInstructions.TabIndex = 28;
this.SubmitInstructions.Text = resources.GetString ("SubmitInstructions.Text");
//
// ViewReportButton
//
this.ViewReportButton.Location = new System.Drawing.Point (411, 325);
this.ViewReportButton.Name = "ViewReportButton";
this.ViewReportButton.Size = new System.Drawing.Size (86, 30);
this.ViewReportButton.TabIndex = 29;
this.ViewReportButton.Text = "View Report";
this.ViewReportButton.UseVisualStyleBackColor = true;
this.ViewReportButton.Click += new System.EventHandler (this.ViewReportButton_Click);
//
// SubmitReportButton
//
this.SubmitReportButton.Enabled = false;
this.SubmitReportButton.Location = new System.Drawing.Point (503, 325);
this.SubmitReportButton.Name = "SubmitReportButton";
this.SubmitReportButton.Size = new System.Drawing.Size (86, 30);
this.SubmitReportButton.TabIndex = 30;
this.SubmitReportButton.Text = "Submit Report";
this.SubmitReportButton.UseVisualStyleBackColor = true;
this.SubmitReportButton.Click += new System.EventHandler (this.SubmitReportButton_Click);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font ("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label2.Location = new System.Drawing.Point (12, 438);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size (63, 14);
this.label2.TabIndex = 32;
this.label2.Text = "Version 1.0";
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF (6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject ("$this.BackgroundImage")));
this.ClientSize = new System.Drawing.Size (719, 471);
this.Controls.Add (this.label2);
this.Controls.Add (this.SubmitReportButton);
this.Controls.Add (this.ViewReportButton);
this.Controls.Add (this.SubmitInstructions);
this.Controls.Add (this.SubmitLabel);
this.Controls.Add (this.ProjectLink);
this.Controls.Add (this.ResultsDetailLink);
this.Controls.Add (this.ResultsText);
this.Controls.Add (this.MissingResultsLabel);
this.Controls.Add (this.MissingResultsImage);
this.Controls.Add (this.label1);
this.Controls.Add (this.PInvokesResultsLabel);
this.Controls.Add (this.PInvokesResultsImage);
this.Controls.Add (this.NotImplementedResultsLabel);
this.Controls.Add (this.NotImplementedResultsImage);
this.Controls.Add (this.AnalysisResultsLabel);
this.Controls.Add (this.MonoTodoResultsLabel);
this.Controls.Add (this.MonoTodoResultsImage);
this.Controls.Add (this.AssemblyListView);
this.Controls.Add (this.AssemblyRemoveButton);
this.Controls.Add (this.AssemblyAddButton);
this.Controls.Add (this.AssemblyLabel);
this.Controls.Add (this.IntroductionLabel);
this.Controls.Add (this.StepLabel);
this.Controls.Add (this.BackButton);
this.Controls.Add (this.NextButton);
this.Controls.Add (this.pictureBox1);
this.Controls.Add (this.AssemblyInstructions);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = "MainForm";
this.Text = "MoMA: Mono Migration Analyzer";
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit ();
((System.ComponentModel.ISupportInitialize)(this.MonoTodoResultsImage)).EndInit ();
((System.ComponentModel.ISupportInitialize)(this.NotImplementedResultsImage)).EndInit ();
((System.ComponentModel.ISupportInitialize)(this.PInvokesResultsImage)).EndInit ();
((System.ComponentModel.ISupportInitialize)(this.MissingResultsImage)).EndInit ();
this.ResumeLayout (false);
this.PerformLayout ();
}
#endregion
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Button NextButton;
private System.Windows.Forms.Button BackButton;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label StepLabel;
private System.Windows.Forms.Label IntroductionLabel;
private System.Windows.Forms.Label AssemblyLabel;
private System.Windows.Forms.Button AssemblyAddButton;
private System.Windows.Forms.Button AssemblyRemoveButton;
private System.Windows.Forms.ListView AssemblyListView;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.PictureBox MonoTodoResultsImage;
private System.Windows.Forms.Label MonoTodoResultsLabel;
private System.Windows.Forms.Label AnalysisResultsLabel;
private System.Windows.Forms.Label NotImplementedResultsLabel;
private System.Windows.Forms.PictureBox NotImplementedResultsImage;
private System.Windows.Forms.Label PInvokesResultsLabel;
private System.Windows.Forms.PictureBox PInvokesResultsImage;
private System.Windows.Forms.Label AssemblyInstructions;
private System.Windows.Forms.Label MissingResultsLabel;
private System.Windows.Forms.PictureBox MissingResultsImage;
private System.Windows.Forms.Label ResultsText;
private System.Windows.Forms.LinkLabel ResultsDetailLink;
private System.Windows.Forms.LinkLabel ProjectLink;
private System.Windows.Forms.Label SubmitLabel;
private System.Windows.Forms.Label SubmitInstructions;
private System.Windows.Forms.Button ViewReportButton;
private System.Windows.Forms.Button SubmitReportButton;
private System.Windows.Forms.Label label2;
}
}

307
MainForm.cs Normal file
Просмотреть файл

@ -0,0 +1,307 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Web.UI;
using System.IO;
using MoMA.Analyzer;
namespace MoMA
{
public partial class MainForm : Form
{
private WizardStep current_step;
public MainForm ()
{
InitializeComponent ();
ResetForm ();
SetupForm (WizardStep.Introduction);
}
private void ResetForm ()
{
IntroductionLabel.Visible = false;
AssemblyAddButton.Visible = false;
AssemblyListView.Visible = false;
AssemblyRemoveButton.Visible = false;
AssemblyLabel.Visible = false;
AssemblyInstructions.Visible = false;
AnalysisResultsLabel.Visible = false;
MonoTodoResultsImage.Visible = false;
MonoTodoResultsLabel.Visible = false;
NotImplementedResultsImage.Visible = false;
NotImplementedResultsLabel.Visible = false;
PInvokesResultsImage.Visible = false;
PInvokesResultsLabel.Visible = false;
MissingResultsImage.Visible = false;
MissingResultsLabel.Visible = false;
ResultsDetailLink.Visible = false;
ResultsText.Visible = false;
SubmitInstructions.Visible = false;
SubmitLabel.Visible = false;
SubmitReportButton.Visible = false;
ViewReportButton.Visible = false;
}
private void SetupForm (WizardStep step)
{
switch (step) {
case WizardStep.Introduction:
IntroductionLabel.Visible = true;
break;
case WizardStep.ChooseAssemblies:
AssemblyAddButton.Visible = true;
AssemblyListView.Visible = true;
AssemblyRemoveButton.Visible = true;
AssemblyLabel.Visible = true;
AssemblyInstructions.Visible = true;
break;
case WizardStep.ViewResults:
AnalysisResultsLabel.Visible = true;
MonoTodoResultsImage.Visible = true;
MonoTodoResultsLabel.Visible = true;
NotImplementedResultsImage.Visible = true;
NotImplementedResultsLabel.Visible = true;
PInvokesResultsImage.Visible = true;
PInvokesResultsLabel.Visible = true;
MissingResultsImage.Visible = true;
MissingResultsLabel.Visible = true;
ResultsText.Visible = true;
NextButton.Text = "Next";
if (ResultsText.Text.StartsWith ("There"))
ResultsDetailLink.Visible = true;
break;
case WizardStep.SubmitResults:
SubmitInstructions.Visible = true;
SubmitLabel.Visible = true;
SubmitReportButton.Visible = true;
ViewReportButton.Visible = true;
NextButton.Text = "Close";
break;
}
StepLabel.Text = String.Format ("Step {0} of 4", (int)step);
current_step = step;
}
private void NextButton_Click (object sender, EventArgs e)
{
switch (current_step) {
case WizardStep.Introduction:
ResetForm ();
SetupForm (WizardStep.ChooseAssemblies);
break;
case WizardStep.ChooseAssemblies:
if (AssemblyListView.Items.Count == 0)
{
MessageBox.Show ("Please choose at least one assembly to analyze.");
return;
}
AnalyzeAssemblies ();
ResetForm ();
SetupForm (WizardStep.ViewResults);
break;
case WizardStep.ViewResults:
ResetForm ();
SetupForm (WizardStep.SubmitResults);
break;
case WizardStep.SubmitResults:
Application.Exit ();
break;
}
BackButton.Enabled = true;
}
private void BackButton_Click (object sender, EventArgs e)
{
switch (current_step) {
case WizardStep.Introduction:
ResetForm ();
SetupForm (WizardStep.ChooseAssemblies);
break;
case WizardStep.ChooseAssemblies:
BackButton.Enabled = false;
ResetForm ();
SetupForm (WizardStep.Introduction);
break;
case WizardStep.ViewResults:
ResetForm ();
SetupForm (WizardStep.ChooseAssemblies);
break;
case WizardStep.SubmitResults:
ResetForm ();
SetupForm (WizardStep.ViewResults);
break;
}
}
private void AssemblyAddButton_Click (object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog ();
ofd.Multiselect = true;
ofd.Filter = "Assemblies (*.exe, *.dll)|*.exe; *.dll|All Files (*.*)|*.*";
if (ofd.ShowDialog () == DialogResult.OK) {
foreach (string s in ofd.FileNames) {
ListViewItem lvi = new ListViewItem (System.IO.Path.GetFileName (s));
lvi.Tag = s;
AssemblyListView.Items.Add (lvi);
}
}
}
private void AssemblyRemoveButton_Click (object sender, EventArgs e)
{
if (AssemblyListView.SelectedItems.Count > 0)
AssemblyListView.Items.Remove (AssemblyListView.SelectedItems[0]);
}
private void AnalyzeAssemblies ()
{
AssemblyAnalyzer aa = new AssemblyAnalyzer ();
// Keep total counts for all assemblies for summary screen
int monotodocount = 0;
int notimplementedcount = 0;
int pinvokecount = 0;
int missingcount = 0;
string todo_defs = Path.Combine (Path.GetDirectoryName (Application.ExecutablePath), "monotodo.txt");
string nie_defs = Path.Combine (Path.GetDirectoryName (Application.ExecutablePath), "exception.txt");
string missing_defs = Path.Combine (Path.GetDirectoryName (Application.ExecutablePath), "missing.txt");
// Load the definition files
aa.LoadDefinitions (todo_defs, nie_defs, missing_defs);
// Scan user's assemblies for P/Invokes
foreach (ListViewItem lvi in AssemblyListView.Items)
aa.ScanAssemblyForPInvokes ((string)lvi.Tag);
// Start the results reports
string output_path = Path.Combine (Path.GetDirectoryName (Application.ExecutablePath), "Reports");
XhtmlTextWriter report = aa.BeginHtmlReport (new FileStream (Path.Combine (output_path, "output.html"), FileMode.Create));
StreamWriter submit_report = aa.BeginTextReport (new FileStream (Path.Combine (output_path, "submit.txt"), FileMode.Create));
// Scan user's assemblies for issues
foreach (ListViewItem lvi in AssemblyListView.Items)
{
aa.AnalyzeAssembly ((string)lvi.Tag);
report.WriteFullBeginTag ("h2");
report.WriteEncodedText (Path.GetFileName ((string)lvi.Tag));
report.WriteEndTag ("h2");
aa.AddResultsToHtmlReport (report);
aa.AddResultsToTextReport (submit_report);
monotodocount += aa.MonoTodoResults.Count;
notimplementedcount += aa.NotImplementedExceptionResults.Count;
pinvokecount += aa.PInvokeResults.Count;
missingcount += aa.MissingMethodResults.Count;
aa.MissingMethodResults.Clear ();
aa.MonoTodoResults.Clear ();
aa.NotImplementedExceptionResults.Clear ();
aa.PInvokeResults.Clear ();
}
// Finish up the reports
aa.FinishHtmlReport (report);
aa.FinishTextReport (submit_report);
// Update the summary screen
UpdateResultsSummary (monotodocount, notimplementedcount, pinvokecount, missingcount);
// Enable the report submission button
SubmitReportButton.Enabled = true;
}
private void UpdateResultsSummary (int monotodocount, int notimplementedcount, int pinvokecount, int missingcount)
{
if (monotodocount == 0) {
MonoTodoResultsImage.Image = MoMA.Properties.Resources.button_ok;
MonoTodoResultsLabel.Text = "No methods marked with [MonoTodo] are called.";
}
else {
MonoTodoResultsImage.Image = MoMA.Properties.Resources.dialog_warning;
MonoTodoResultsLabel.Text = String.Format ("Methods called marked with [MonoTodo]: {0}", monotodocount);
}
if (notimplementedcount == 0) {
NotImplementedResultsImage.Image = MoMA.Properties.Resources.button_ok;
NotImplementedResultsLabel.Text = "No methods that throw NotImplementedException are called.";
}
else {
NotImplementedResultsImage.Image = MoMA.Properties.Resources.dialog_warning;
NotImplementedResultsLabel.Text = String.Format ("Methods called that throw NotImplementedException: {0}", notimplementedcount);
}
if (pinvokecount == 0) {
PInvokesResultsImage.Image = MoMA.Properties.Resources.button_ok;
PInvokesResultsLabel.Text = "No P/Invokes are called.";
}
else {
PInvokesResultsImage.Image = MoMA.Properties.Resources.dialog_warning;
PInvokesResultsLabel.Text = String.Format ("P/Invokes called: {0}", pinvokecount);
}
if (missingcount == 0) {
MissingResultsImage.Image = MoMA.Properties.Resources.button_ok;
MissingResultsLabel.Text = "All methods called exist in Mono.";
}
else {
MissingResultsImage.Image = MoMA.Properties.Resources.dialog_warning;
MissingResultsLabel.Text = String.Format ("Methods that are still missing in Mono: {0}", missingcount);
}
if (monotodocount + notimplementedcount + pinvokecount + missingcount == 0)
ResultsText.Text = "Congratulations! No potential issues were detected in the selected assemblies. The only thing left to do is to try running them on Mono and see what happens.";
else {
ResultsText.Text = "There were potential issues detected in the selected assemblies. A report detailing each issue has been created.";
ResultsDetailLink.Visible = true;
}
}
private void ResultsDetailLink_LinkClicked (object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start (Path.Combine (Path.Combine (Path.GetDirectoryName (Application.ExecutablePath), "Reports"), "output.html"));
}
private void ProjectLink_LinkClicked (object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start ("http://www.mono-project.com/");
}
private void ViewReportButton_Click (object sender, EventArgs e)
{
System.Diagnostics.Process.Start (Path.Combine (Path.Combine (Path.GetDirectoryName (Application.ExecutablePath), "Reports"), "submit.txt"));
}
private void SubmitReportButton_Click (object sender, EventArgs e)
{
SubmitReportButton.Enabled = false;
string output_path = Path.Combine (Path.GetDirectoryName (Application.ExecutablePath), "Reports");
StreamReader sr = new StreamReader (new FileStream (Path.Combine (output_path, "submit.txt"), FileMode.Open));
string results = sr.ReadToEnd ();
MoMAWebServices.MoMASubmit ws = new MoMA.MoMAWebServices.MoMASubmit ();
if (ws.SubmitResults (results))
MessageBox.Show ("Results successfully submitted. Thanks!");
else
MessageBox.Show ("Result submission failed. Please try again later.");
}
}
}

364
MainForm.resx Normal file
Просмотреть файл

@ -0,0 +1,364 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="IntroductionLabel.Text" xml:space="preserve">
<value>The Mono Migration Analyzer (MoMA) tool helps you identify issues you may have when porting your .Net application to Mono. It helps pinpoint platform specific calls (P/Invoke) and areas that are not yet supported by the Mono project.
While MoMA can help show potential issues, there are many complex factors that cannot be covered by a simple tool. MoMA may fail to point out areas that will cause problems, and may point out areas which will not actually be an issue.
Use the results provided as a guide to get you started on porting your application, but remember the true test is actually running your application on Mono.
Good luck!</value>
</data>
<data name="SubmitInstructions.Text" xml:space="preserve">
<value>Want to help out the Mono project? Please submit your results to the Mono team so they can prioritize their efforts based on what functionality people need most.
The following report has been prepared. It doesn't contain any information about your assemblies, just which incomplete methods it calls in Mono and which P/Invokes it uses. (You can view the report before sending as well.)
This information is invaluable to the Mono team to find which areas are missing that are needed by real-world applications.</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
HgAAAABJRU5ErkJggg==
</value>
</data>
</root>

Просмотреть файл

@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace MoMA.Analyzer
{
public class BaseChecker
{
protected SortedList <string, Method> data;
protected BaseChecker ()
{
}
public BaseChecker (Stream input)
{
data = new SortedList<string, Method> ();
StreamReader input_reader = new StreamReader (input);
string line;
while ((line = input_reader.ReadLine ()) != null)
data[line] = new Method (line);
}
public BaseChecker (SortedList <string, Method> data)
{
this.data = data;
}
public virtual bool Matches (string method, out Method match)
{
if (method.Contains ("AddMemoryPressure"))
Console.WriteLine (method);
if (data.ContainsKey (method)) {
match = data[method];
return true;
}
match = null;
return false;
}
}
}

Просмотреть файл

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace MoMA.Analyzer
{
public class CheckMonoTodo : BaseChecker
{
public CheckMonoTodo (Stream input)
{
data = new SortedList<string, Method> ();
StreamReader input_reader = new StreamReader (input);
string line;
while ((line = input_reader.ReadLine ()) != null)
{
int split = line.IndexOf ("-");
string method = line.Substring (0, split);
string description = line.Substring (split + 1);
data[method] = new Method (method, description);
}
}
}
}

Просмотреть файл

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Mono.Cecil;
namespace MoMA.Analyzer
{
public class CheckPInvokes : BaseChecker
{
public CheckPInvokes ()
{
data = new SortedList<string, Method> ();
}
public void FindPInvokesInAssembly (string assembly)
{
AssemblyDefinition ad = AssemblyFactory.GetAssembly (assembly);
//Gets all types of the MainModule of the assembly
foreach (TypeDefinition type in ad.MainModule.Types) {
if (type.Name != "<Module>") {
//Gets all methods of the current type
foreach (MethodDefinition method in type.Methods)
if ((method.Attributes & MethodAttributes.PInvokeImpl) == MethodAttributes.PInvokeImpl)
data[method.ToString ()] = new Method (method.ToString (), method.PInvokeInfo.Module.Name);
}
}
}
}
}

Просмотреть файл

@ -0,0 +1,278 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Mono.Cecil;
using Mono.Cecil.Cil;
using System.Web.UI;
namespace MoMA.Analyzer
{
public class AssemblyAnalyzer
{
private CheckMonoTodo mono_todo;
private BaseChecker not_implemented;
private BaseChecker missing;
private CheckPInvokes pinvoke;
private List<BaseError> mono_todo_results;
private List<BaseError> not_implemented_results;
private List<BaseError> missing_results;
private List<BaseError> pinvoke_results;
public List<BaseError> MonoTodoResults
{
get { return this.mono_todo_results; }
}
public List<BaseError> NotImplementedExceptionResults
{
get { return this.not_implemented_results; }
}
public List<BaseError> MissingMethodResults
{
get { return this.missing_results; }
}
public List<BaseError> PInvokeResults
{
get { return this.pinvoke_results; }
}
public AssemblyAnalyzer ()
{
mono_todo_results = new List<BaseError> ();
not_implemented_results = new List<BaseError> ();
missing_results = new List<BaseError> ();
pinvoke_results = new List<BaseError> ();
}
public void LoadDefinitions (string monoTodoDefinitions, string notImplementedDefinitions, string missingDefinitions)
{
Stream mt = new FileStream (monoTodoDefinitions, FileMode.Open);
Stream ni = new FileStream (notImplementedDefinitions, FileMode.Open);
Stream mi = new FileStream (missingDefinitions, FileMode.Open);
LoadDefinitions (mt, ni, mi);
mt.Close ();
ni.Close ();
mi.Close ();
}
public void LoadDefinitions (Stream monoTodoDefinitions, Stream notImplementedDefinitions, Stream missingDefinitions)
{
if (monoTodoDefinitions != null)
mono_todo = new CheckMonoTodo (monoTodoDefinitions);
if (notImplementedDefinitions != null)
not_implemented = new BaseChecker (notImplementedDefinitions);
if (missingDefinitions != null)
missing = new BaseChecker (missingDefinitions);
}
public void ScanAssemblyForPInvokes (string assembly)
{
if (pinvoke == null)
pinvoke = new CheckPInvokes ();
pinvoke.FindPInvokesInAssembly (assembly);
}
public void AnalyzeAssembly (string assembly)
{
AssemblyDefinition ad = AssemblyFactory.GetAssembly (assembly);
foreach (TypeDefinition type in ad.MainModule.Types) {
if (type.Name != "<Module>") {
foreach (MethodDefinition method in type.Methods) {
if (method.Body != null) {
foreach (Instruction i in method.Body.Instructions) {
if (i.OpCode == OpCodes.Call || i.OpCode == OpCodes.Callvirt) {
Method match;
if (mono_todo != null && mono_todo.Matches (i.Operand.ToString (), out match))
mono_todo_results.Add (new MonoTodoError (new Method (method.ToString ()), match));
if (not_implemented != null && not_implemented.Matches (i.Operand.ToString (), out match))
not_implemented_results.Add (new NotImplementedExceptionError (new Method (method.ToString ()), match));
if (pinvoke.Matches (i.Operand.ToString (), out match))
pinvoke_results.Add (new PInvokeError (new Method (method.ToString ()), match));
if (missing.Matches (i.Operand.ToString (), out match))
missing_results.Add (new MissingMethodError (new Method (method.ToString ()), match));
}
}
}
}
}
}
}
public XhtmlTextWriter BeginHtmlReport (Stream output)
{
StreamWriter sw = new StreamWriter (output);
XhtmlTextWriter writer = new XhtmlTextWriter (sw);
writer.WriteBeginTag ("html");
writer.WriteAttribute ("xmlns", "http://www.w3.org/1999/xhtml");
writer.Write (HtmlTextWriter.TagRightChar);
writer.WriteFullBeginTag ("head");
writer.WriteFullBeginTag ("title");
writer.WriteEncodedText ("MoMa Report");
writer.WriteEndTag ("title");
WriteCss (writer);
writer.WriteEndTag ("head");
writer.WriteFullBeginTag ("body");
writer.WriteFullBeginTag ("h1");
writer.WriteEncodedText ("MoMA Scan Results");
writer.WriteEndTag ("h1");
writer.WriteBreak ();
writer.WriteEncodedText (String.Format ("Scan time: {0}" , DateTime.Now.ToString ()));
writer.WriteBreak ();
writer.WriteBreak ();
writer.Write ("For descriptions of issues and what to do, see <a href=\"http://www.mono-project.com/MoMA_-_Issue_Descriptions\">http://www.mono-project.com/MoMA_-_Issue_Descriptions</a>.");
writer.WriteBreak ();
writer.WriteBreak ();
return writer;
}
public StreamWriter BeginTextReport (Stream output)
{
return new StreamWriter (output);
}
public void AddResultsToHtmlReport (XhtmlTextWriter writer)
{
if (missing_results.Count + pinvoke_results.Count + not_implemented_results.Count + mono_todo_results.Count == 0) {
writer.WriteFullBeginTag ("h3");
writer.WriteEncodedText ("No Issues Found");
writer.WriteEndTag ("h3");
writer.WriteBreak ();
}
else {
OutputHtmlResults (writer, "Methods missing from Mono", missing_results, "Calling Method", "Method not yet in Mono");
OutputHtmlResults (writer, "P/Invokes into native code", pinvoke_results, "Calling Method", "P/Invoke Method", "External DLL");
OutputHtmlResults (writer, "Methods called that throw NotImplementedException", not_implemented_results, "Calling Method", "Mono method that throws NotImplementedException");
OutputHtmlResults (writer, "Methods called marked with [MonoTodo]", mono_todo_results, "Calling Method", "Method with [MonoTodo]", "Reason");
}
}
public void AddResultsToTextReport (StreamWriter writer)
{
OutputTextResults (writer, "Methods missing from Mono", missing_results);
OutputTextResults (writer, "P/Invokes into native code", pinvoke_results);
OutputTextResults (writer, "Methods called that throw NotImplementedException", not_implemented_results);
OutputTextResults (writer, "Methods called marked with [MonoTodo]", mono_todo_results);
}
private void OutputHtmlResults (XhtmlTextWriter writer, string heading, List<BaseError> results, params string[] tableHeaders)
{
if (results.Count == 0)
return;
writer.WriteFullBeginTag ("h3");
writer.WriteEncodedText (heading);
writer.WriteEndTag ("h3");
writer.WriteFullBeginTag ("table");
writer.WriteBeginTag ("tr");
writer.WriteAttribute ("class", "header");
writer.Write (HtmlTextWriter.TagRightChar);
if (tableHeaders != null && tableHeaders.Length > 0) {
foreach (string s in tableHeaders) {
writer.WriteFullBeginTag ("td");
writer.WriteEncodedText (s);
writer.WriteEndTag ("td");
}
}
writer.WriteEndTag ("tr");
bool odd = false;
string previous_class = string.Empty;
foreach (BaseError be in results) {
if (previous_class != be.GetCaller ().Class) {
writer.WriteBeginTag ("tr");
writer.WriteAttribute ("class", "class");
writer.Write (HtmlTextWriter.TagRightChar);
writer.WriteBeginTag ("td");
writer.WriteAttribute ("colspan", "3");
writer.Write (HtmlTextWriter.TagRightChar);
writer.WriteEncodedText ("Class " + be.GetCaller ().Class + ":");
writer.WriteEndTag ("td");
writer.WriteEndTag ("tr");
}
be.WriteHtml (writer, odd);
odd = !odd;
previous_class = be.GetCaller ().Class;
}
writer.WriteEndTag ("table");
writer.WriteBreak ();
writer.WriteBreak ();
}
private void OutputTextResults (StreamWriter writer, string heading, List<BaseError> results)
{
if (results.Count == 0)
return;
writer.WriteLine ("[{0}]", heading);
foreach (BaseError be in results)
be.WriteText (writer);
}
public void FinishHtmlReport (XhtmlTextWriter writer)
{
writer.WriteEndTag ("body");
writer.WriteEndTag ("html");
writer.Close ();
}
public void FinishTextReport (StreamWriter writer)
{
writer.Close ();
}
public void ClearPInvokeDefinitions ()
{
pinvoke_results = new List<BaseError> ();
}
private void WriteCss (XhtmlTextWriter writer)
{
writer.WriteFullBeginTag ("style");
writer.WriteLine ("body { background-color: #fff; color: #333; font-family: lucida grande, sans-serif; margin: 5; padding: 0; font-size: 9pt; }");
writer.WriteLine ("table { font-size: 9pt; width: 100%; padding: 0; margin: 0; font-family: Verdana, Tahoma, Lucida Sans, Sans-Serif; border-collapse: collapse; }");
writer.WriteLine ("table tr.header { font-weight: bold; font-size: 12px; padding: 5px; background-color: #e8f3d4; border: none; }");
writer.WriteLine ("table tr.header td { padding: 5px; border: 1px; }");
writer.WriteLine ("tr.odd { background-color: #F1F5FA; }");
writer.WriteLine ("tr.class { font-weight: bold; }");
writer.WriteLine ("h1,h2,h3,h4,h5,h6 { color: #68892f; font-family: vag rounded, vag round, arial mt rounded, arial rounded, lucida grande, myriad, andale sans, luxi sans, bitstream vera sans, tahoma, toga sans, helvetica, arial, sans-serif; margin: 0; padding: 0; }");
writer.WriteLine ("h1 { font-size: 2.25em; }");
writer.WriteLine ("h2 { margin-bottom: .5em; font-size: 1.75em; }");
writer.WriteLine ("h3 { margin-bottom: .45em; font-size: 1.25em; }");
writer.WriteEndTag ("style");
}
}
}

122
MoMA.Analyzer/Method.cs Normal file
Просмотреть файл

@ -0,0 +1,122 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace MoMA.Analyzer
{
public class Method
{
private string raw_method;
private string method_output;
private string method_output_with_class;
private string method_class;
private string data;
public Method (string method)
{
raw_method = method;
ParseMethod();
}
public Method (string method, string data)
{
this.raw_method = method;
this.data = data;
ParseMethod ();
}
public string RawMethod
{
get { return raw_method; }
set { raw_method = value; }
}
public string Data
{
get { return data; }
set { data = value; }
}
public string Class
{
get { return method_class; }
set { method_class = value; }
}
private void ParseMethod ()
{
string return_type;
string function_name;
string[] parameters;
if (raw_method.Contains ("modopt("))
{
int mod_start = raw_method.IndexOf ("modopt(");
int mod_end = raw_method.IndexOf (")", mod_start);
raw_method = raw_method.Substring (0, mod_start) + raw_method.Substring (mod_end + 2);
}
return_type = raw_method.Substring (0, raw_method.IndexOf (" "));
int colons = raw_method.IndexOf ("::");
int function_end = raw_method.IndexOf ("(");
function_name = raw_method.Substring (colons + 2, function_end - colons - 2).Replace ("::", ".");
string parameter_string = raw_method.Substring (function_end + 1, raw_method.Length - function_end - 2);
parameters = parameter_string.Split (',');
string final_parameters = string.Empty;
foreach (string p in parameters)
final_parameters += (ConvertType (p) + ", ");
final_parameters = final_parameters.Substring (0, final_parameters.Length - 2);
method_output = string.Format ("{0} {1}({2})", ConvertType (return_type), function_name, final_parameters);
method_class = raw_method.Substring (raw_method.IndexOf (" ") + 1, colons - raw_method.IndexOf (" ") - 1);
method_output_with_class = string.Format ("{0} {1}.{2}({3})", ConvertType (return_type), method_class.Substring (method_class.LastIndexOf (".") + 1), function_name, final_parameters);
}
public override string ToString ()
{
return method_output;
}
public string ToStringWithClass ()
{
return method_output_with_class;
}
private string ConvertType (string type)
{
switch (type) {
case "System.Void":
return "void";
case "System.Boolean":
return "bool";
case "System.Int32":
return "int";
case "System.String":
return "string";
case "System.Double":
return "double";
case "System.Decimal":
return "decimal";
case "System.Char":
return "char";
case "System.UInt32":
return "uint";
case "System.Void*":
return "void*";
case "System.Byte":
return "byte";
}
return type.Substring (type.LastIndexOf (".") + 1);
}
}
}

Просмотреть файл

@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Text;
using Mono.Cecil;
using Mono.Cecil.Cil;
using System.IO;
namespace MoMA.Analyzer
{
public class MethodExtractor
{
// Parse the assemblies looking for various sticky points
// Leave any of the SortedList parameters null that you aren't interested in
public static void ExtractFromAssembly (string assembly, SortedList<string, Method> allMethods, SortedList<string, Method> throwsNotImplementedMethods, SortedList<string, Method> monoTodoMethods)
{
AssemblyDefinition ad = AssemblyFactory.GetAssembly (assembly);
//Gets all types of the MainModule of the assembly
foreach (TypeDefinition type in ad.MainModule.Types) {
if (type.Name != "<Module>") {
//Gets all methods of the current type
foreach (MethodDefinition method in type.Methods) {
// We only want Public and Protected methods
if ((method.Attributes & MethodAttributes.Family) == 0 && (method.Attributes & MethodAttributes.Public) == 0)
continue;
// If adding all methods, add this method
if (allMethods != null)
allMethods[method.ToString ()] = new Method (method.ToString ());
// If adding MonoTODO methods, check this method
if (monoTodoMethods != null)
foreach (CustomAttribute ca in method.CustomAttributes)
if (ca.Constructor.DeclaringType.ToString () == "System.MonoTODOAttribute")
monoTodoMethods[method.ToString ()] = new Method (method.ToString (), ca.ConstructorParameters.Count > 0 ? ca.ConstructorParameters[0].ToString () : string.Empty);
// If adding methods that throw NotImplementedException, look for those
if (throwsNotImplementedMethods != null && method.Body != null)
foreach (Instruction i in method.Body.Instructions)
if (i.OpCode == OpCodes.Throw)
if (i.Previous.Operand != null && i.Previous.Operand.ToString ().StartsWith ("System.Void System.NotImplementedException"))
throwsNotImplementedMethods[method.ToString ()] = new Method (method.ToString ());
}
}
}
}
public static void ComputeMethodDifference (SortedList<string, Method> master, SortedList<string, Method> subset, SortedList<string, Method> output)
{
// If it's in the master but not the subset, add it to the output
foreach (string s in master.Keys)
if (!(subset.ContainsKey (s)))
output[s] = new Method (s);
}
}
}

Просмотреть файл

@ -0,0 +1,61 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{CC12F142-C92F-4AD0-AEA3-D94F661C557B}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MoMA.Analyzer</RootNamespace>
<AssemblyName>MoMA.Analyzer</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Mono.Cecil, Version=0.4.3.1, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Cecil\gendarme\console\bin\Release\Mono.Cecil.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Web" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Analysis\BaseChecker.cs" />
<Compile Include="AssemblyAnalyzer.cs" />
<Compile Include="Results\BaseError.cs" />
<Compile Include="Analysis\CheckMonoTodo.cs" />
<Compile Include="Analysis\CheckPInvokes.cs" />
<Compile Include="MethodExtractor.cs" />
<Compile Include="Method.cs" />
<Compile Include="Results\MissingMethodError.cs" />
<Compile Include="Results\MonoTodoError.cs" />
<Compile Include="Results\NotImplementedExceptionError.cs" />
<Compile Include="Results\PInvokeError.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Просмотреть файл

@ -0,0 +1,35 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle ("MoMA.Analyzer")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("None")]
[assembly: AssemblyProduct ("MoMA.Analyzer")]
[assembly: AssemblyCopyright ("Copyright © None 2006")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible (false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid ("a86c98e8-0c8d-4041-a7dd-aefae6bedc1a")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion ("1.0.0.0")]
[assembly: AssemblyFileVersion ("1.0.0.0")]

Просмотреть файл

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace MoMA.Analyzer
{
public abstract class BaseError
{
protected Method caller;
protected Method callee;
public abstract void WriteHtml (System.Web.UI.XhtmlTextWriter tw, bool odd);
public abstract void WriteText (System.IO.StreamWriter results);
public virtual Method GetCaller ()
{
return caller;
}
}
}

Просмотреть файл

@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
namespace MoMA.Analyzer
{
class MissingMethodError : BaseError
{
public MissingMethodError (Method caller, Method callee)
{
this.caller = caller;
this.callee = callee;
}
public override void WriteHtml (System.Web.UI.XhtmlTextWriter tw, bool odd)
{
if (odd) {
tw.WriteBeginTag ("tr");
tw.WriteAttribute ("class", "odd");
tw.Write (HtmlTextWriter.TagRightChar);
}
else
tw.WriteFullBeginTag ("tr");
tw.WriteFullBeginTag ("td");
tw.WriteEncodedText (caller.ToString ());
tw.WriteEndTag ("td");
tw.WriteFullBeginTag ("td");
tw.WriteEncodedText (callee.ToStringWithClass ());
tw.WriteEndTag ("td");
tw.WriteEndTag ("tr");
}
public override void WriteText (System.IO.StreamWriter results)
{
results.WriteLine (callee.RawMethod);
}
}
}

Просмотреть файл

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
namespace MoMA.Analyzer
{
class MonoTodoError : BaseError
{
public MonoTodoError (Method caller, Method callee)
{
this.caller = caller;
this.callee = callee;
}
public override void WriteHtml (System.Web.UI.XhtmlTextWriter tw, bool odd)
{
if (odd) {
tw.WriteBeginTag ("tr");
tw.WriteAttribute ("class", "odd");
tw.Write (HtmlTextWriter.TagRightChar);
}
else
tw.WriteFullBeginTag ("tr");
tw.WriteFullBeginTag ("td");
tw.WriteEncodedText (caller.ToString ());
tw.WriteEndTag ("td");
tw.WriteFullBeginTag ("td");
tw.WriteEncodedText (callee.ToStringWithClass ());
tw.WriteEndTag ("td");
tw.WriteFullBeginTag ("td");
tw.WriteEncodedText (callee.Data.Trim ().Length > 0 ? callee.Data : "Not Specified");
tw.WriteEndTag ("td");
tw.WriteEndTag ("tr");
}
public override void WriteText (System.IO.StreamWriter results)
{
results.WriteLine (callee.RawMethod);
}
}
}

Просмотреть файл

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
namespace MoMA.Analyzer
{
class NotImplementedExceptionError : BaseError
{
public NotImplementedExceptionError (Method caller, Method callee)
{
this.caller = caller;
this.callee = callee;
}
public override void WriteHtml (System.Web.UI.XhtmlTextWriter tw, bool odd)
{
if (odd) {
tw.WriteBeginTag ("tr");
tw.WriteAttribute ("class", "odd");
tw.Write (HtmlTextWriter.TagRightChar);
}
else
tw.WriteFullBeginTag ("tr");
tw.WriteFullBeginTag ("td");
tw.WriteEncodedText (caller.ToString ());
tw.WriteEndTag ("td");
tw.WriteFullBeginTag ("td");
tw.WriteEncodedText (callee.ToStringWithClass ());
tw.WriteEndTag ("td");
tw.WriteEndTag ("tr");
}
public override void WriteText (System.IO.StreamWriter results)
{
results.WriteLine (callee.RawMethod);
}
}
}

Просмотреть файл

@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
namespace MoMA.Analyzer
{
class PInvokeError : BaseError
{
public PInvokeError (Method caller, Method callee)
{
this.caller = caller;
this.callee = callee;
}
public override void WriteHtml (System.Web.UI.XhtmlTextWriter tw, bool odd)
{
if (odd)
{
tw.WriteBeginTag ("tr");
tw.WriteAttribute ("class", "odd");
tw.Write (HtmlTextWriter.TagRightChar);
}
else
tw.WriteFullBeginTag ("tr");
tw.WriteFullBeginTag ("td");
tw.WriteEncodedText (caller.ToString ());
tw.WriteEndTag ("td");
tw.WriteFullBeginTag ("td");
tw.WriteEncodedText (callee.ToString ());
tw.WriteEndTag ("td");
tw.WriteFullBeginTag ("td");
tw.WriteEncodedText (callee.Data.ToString ());
tw.WriteEndTag ("td");
tw.WriteEndTag ("tr");
}
public override void WriteText (System.IO.StreamWriter results)
{
results.WriteLine ("{0}-{1}", callee.ToString (), this.callee.Data);
}
}
}

127
MoMA.csproj Normal file
Просмотреть файл

@ -0,0 +1,127 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{D7FF97F5-1029-4886-9C9D-4EE5618836BC}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MoMA</RootNamespace>
<AssemblyName>MoMA</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.EnterpriseServices" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Services" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="Web References\MoMAWebServices\Reference.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Reference.map</DependentUpon>
</Compile>
<Compile Include="WizardStep.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\monkey.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\monoback.png" />
<None Include="Resources\button_ok.png" />
<None Include="Resources\dialog-warning.png" />
<None Include="Resources\list-remove.png" />
<None Include="Resources\list-add.png" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="MoMA.Analyzer\MoMA.Analyzer.csproj">
<Project>{CC12F142-C92F-4AD0-AEA3-D94F661C557B}</Project>
<Name>MoMA.Analyzer</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<WebReferences Include="Web References\" />
</ItemGroup>
<ItemGroup>
<WebReferenceUrl Include="http://jpobst.com/moma/MoMASubmit.asmx">
<UrlBehavior>Static</UrlBehavior>
<RelPath>Web References\MoMAWebServices\</RelPath>
<UpdateFromURL>http://jpobst.com/moma/MoMASubmit.asmx</UpdateFromURL>
<ServiceLocationURL>
</ServiceLocationURL>
<CachedDynamicPropName>
</CachedDynamicPropName>
<CachedAppSettingsObjectName>Settings</CachedAppSettingsObjectName>
<CachedSettingsPropName>MoMA_MoMAWebServices_MoMASubmit</CachedSettingsPropName>
</WebReferenceUrl>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="Web References\MoMAWebServices\MoMASubmit.disco" />
<None Include="Web References\MoMAWebServices\MoMASubmit.wsdl" />
<None Include="Web References\MoMAWebServices\Reference.map">
<Generator>MSDiscoCodeGenerator</Generator>
<LastGenOutput>Reference.cs</LastGenOutput>
</None>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

5
MoMA.csproj.user Normal file
Просмотреть файл

@ -0,0 +1,5 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectView>ProjectFiles</ProjectView>
</PropertyGroup>
</Project>

32
MoMA.sln Normal file
Просмотреть файл

@ -0,0 +1,32 @@

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MoMA", "MoMA.csproj", "{D7FF97F5-1029-4886-9C9D-4EE5618836BC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MoMA.Analyzer", "MoMA.Analyzer\MoMA.Analyzer.csproj", "{CC12F142-C92F-4AD0-AEA3-D94F661C557B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MoMAExtractor", "MoMAExtractor\MoMAExtractor.csproj", "{64DE84A1-C274-4875-84F2-FCA7B24104D8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D7FF97F5-1029-4886-9C9D-4EE5618836BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D7FF97F5-1029-4886-9C9D-4EE5618836BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D7FF97F5-1029-4886-9C9D-4EE5618836BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D7FF97F5-1029-4886-9C9D-4EE5618836BC}.Release|Any CPU.Build.0 = Release|Any CPU
{CC12F142-C92F-4AD0-AEA3-D94F661C557B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CC12F142-C92F-4AD0-AEA3-D94F661C557B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CC12F142-C92F-4AD0-AEA3-D94F661C557B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC12F142-C92F-4AD0-AEA3-D94F661C557B}.Release|Any CPU.Build.0 = Release|Any CPU
{64DE84A1-C274-4875-84F2-FCA7B24104D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{64DE84A1-C274-4875-84F2-FCA7B24104D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{64DE84A1-C274-4875-84F2-FCA7B24104D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{64DE84A1-C274-4875-84F2-FCA7B24104D8}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Двоичные данные
MoMA.suo Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,54 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{64DE84A1-C274-4875-84F2-FCA7B24104D8}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MoMAExtractor</RootNamespace>
<AssemblyName>MoMAExtractor</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MoMA.Analyzer\MoMA.Analyzer.csproj">
<Project>{CC12F142-C92F-4AD0-AEA3-D94F661C557B}</Project>
<Name>MoMA.Analyzer</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

92
MoMAExtractor/Program.cs Normal file
Просмотреть файл

@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using MoMA.Analyzer;
using System.Windows.Forms;
namespace MoMAExtractor
{
class Program
{
static void Main (string[] args)
{
// I'm just interested in getting the files needed for MoMA
// right now, this may only work on my machine :)
string mono_path = @"C:\Program Files\Mono-1.2\lib\mono\2.0";
string ms_path = @"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727";
string output_path = Path.GetDirectoryName (Application.ExecutablePath);
List<string> mono_assemblies = GetMonoAssemblies (mono_path);
List<string> ms_assemblies = GetMicrosoftAssemblies (ms_path);
SortedList<string, Method> all = new SortedList<string, Method> ();
SortedList<string, Method> todo = new SortedList<string, Method> ();
SortedList<string, Method> nie = new SortedList<string, Method> ();
foreach (string assembly in mono_assemblies)
MethodExtractor.ExtractFromAssembly (assembly, all, nie, todo);
WriteListToFile (todo, Path.Combine (output_path, "monotodo.txt"), true);
WriteListToFile (nie, Path.Combine (output_path, "exception.txt"), false);
todo.Clear ();
nie.Clear ();
SortedList<string, Method> ms_all = new SortedList<string, Method> ();
SortedList<string, Method> missing = new SortedList<string, Method> ();
foreach (string assembly in ms_assemblies)
MethodExtractor.ExtractFromAssembly (assembly, ms_all, null, null);
MethodExtractor.ComputeMethodDifference (ms_all, all, missing);
WriteListToFile (missing, Path.Combine (output_path, "missing.txt"), false);
Console.WriteLine ("done");
Console.ReadLine ();
}
private static List<string> GetMonoAssemblies (string directory)
{
// Find all of Mono's assemblies
List<string> assemblies = new List<string> ();
foreach (string f in Directory.GetFiles (directory, "*.dll"))
if (f.Contains ("Accessibility") || f.Contains ("System") || f.Contains ("mscorlib") || f.Contains ("Microsoft"))
assemblies.Add (f);
return assemblies;
}
private static List<string> GetMicrosoftAssemblies (string directory)
{
// Find all of Microsoft's assemblies
List<string> assemblies = new List<string> ();
foreach (string filepath in Directory.GetFiles (directory, "*.dll")) {
string f = Path.GetFileName (filepath);
if ((f.Contains ("Accessibility") || f.Contains ("System") || f.Contains ("mscorlib") || f.Contains ("Microsoft")) && !(f.Contains ("_")) && !(f.Contains ("Thunk")) && !(f.Contains ("Wrapper")))
assemblies.Add (filepath);
}
return assemblies;
}
private static void WriteListToFile (SortedList<string, Method> list, string filename, bool writeDataField)
{
StreamWriter sw = new StreamWriter (filename);
foreach (Method m in list.Values) {
if (writeDataField)
sw.WriteLine ("{0}-{1}", m.RawMethod, m.Data);
else
sw.WriteLine (m.RawMethod);
}
sw.Close ();
}
}
}

Просмотреть файл

@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle ("MoMAExtractor")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("None")]
[assembly: AssemblyProduct ("MoMAExtractor")]
[assembly: AssemblyCopyright ("Copyright © None 2006")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible (false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid ("e83c2e8a-45dc-404f-a964-aed716c92faf")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion ("1.0.0.0")]
[assembly: AssemblyFileVersion ("1.0.0.0")]

20
Program.cs Normal file
Просмотреть файл

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace MoMA
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main ()
{
Application.EnableVisualStyles ();
Application.SetCompatibleTextRenderingDefault (false);
Application.Run (new MainForm ());
}
}
}

Просмотреть файл

@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle ("MoMA")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("None")]
[assembly: AssemblyProduct ("MoMA")]
[assembly: AssemblyCopyright ("Copyright © None 2006")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible (false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid ("e2aab240-3610-486e-a326-db7aa84f741a")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion ("1.0.0.0")]
[assembly: AssemblyFileVersion ("1.0.0.0")]

105
Properties/Resources.Designer.cs сгенерированный Normal file
Просмотреть файл

@ -0,0 +1,105 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace MoMA.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MoMA.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
internal static System.Drawing.Bitmap button_ok {
get {
object obj = ResourceManager.GetObject("button_ok", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap dialog_warning {
get {
object obj = ResourceManager.GetObject("dialog-warning", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap list_add {
get {
object obj = ResourceManager.GetObject("list-add", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap list_remove {
get {
object obj = ResourceManager.GetObject("list-remove", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap monkey {
get {
object obj = ResourceManager.GetObject("monkey", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap monoback {
get {
object obj = ResourceManager.GetObject("monoback", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

139
Properties/Resources.resx Normal file
Просмотреть файл

@ -0,0 +1,139 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="monkey" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\monkey.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="button_ok" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\button_ok.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="dialog-warning" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\dialog-warning.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="list-remove" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\list-remove.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="list-add" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\list-add.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="monoback" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\monoback.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

36
Properties/Settings.Designer.cs сгенерированный Normal file
Просмотреть файл

@ -0,0 +1,36 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace MoMA.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.WebServiceUrl)]
[global::System.Configuration.DefaultSettingValueAttribute("http://jpobst.com/pobst/moma/MoMASubmit.asmx")]
public string MoMA_MoMAWebServices_MoMASubmit {
get {
return ((string)(this["MoMA_MoMAWebServices_MoMASubmit"]));
}
}
}
}

Просмотреть файл

@ -0,0 +1,9 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="MoMA.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="MoMA_MoMAWebServices_MoMASubmit" Type="(Web Service URL)" Scope="Application">
<Value Profile="(Default)">http://jpobst.com/pobst/moma/MoMASubmit.asmx</Value>
</Setting>
</Settings>
</SettingsFile>

Двоичные данные
Resources/button_ok.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 769 B

Двоичные данные
Resources/dialog-warning.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 954 B

Двоичные данные
Resources/list-add.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 405 B

Двоичные данные
Resources/list-remove.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 292 B

Двоичные данные
Resources/monkey.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 20 KiB

Двоичные данные
Resources/monoback.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 16 KiB

Просмотреть файл

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/">
<contractRef ref="http://jpobst.com/pobst/moma/MoMASubmit.asmx?wsdl" docRef="http://jpobst.com/pobst/moma/MoMASubmit.asmx" xmlns="http://schemas.xmlsoap.org/disco/scl/" />
<soap address="http://jpobst.com/pobst/moma/MoMASubmit.asmx" xmlns:q1="http://mono-project.com/MoMASubmit/" binding="q1:MoMASubmitSoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
<soap address="http://jpobst.com/pobst/moma/MoMASubmit.asmx" xmlns:q2="http://mono-project.com/MoMASubmit/" binding="q2:MoMASubmitSoap12" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
</discovery>

Просмотреть файл

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://mono-project.com/MoMASubmit/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://mono-project.com/MoMASubmit/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://mono-project.com/MoMASubmit/">
<s:element name="SubmitResults">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="results" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="SubmitResultsResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="SubmitResultsResult" type="s:boolean" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
<wsdl:message name="SubmitResultsSoapIn">
<wsdl:part name="parameters" element="tns:SubmitResults" />
</wsdl:message>
<wsdl:message name="SubmitResultsSoapOut">
<wsdl:part name="parameters" element="tns:SubmitResultsResponse" />
</wsdl:message>
<wsdl:portType name="MoMASubmitSoap">
<wsdl:operation name="SubmitResults">
<wsdl:input message="tns:SubmitResultsSoapIn" />
<wsdl:output message="tns:SubmitResultsSoapOut" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="MoMASubmitSoap" type="tns:MoMASubmitSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="SubmitResults">
<soap:operation soapAction="http://mono-project.com/MoMASubmit/SubmitResults" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="MoMASubmitSoap12" type="tns:MoMASubmitSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="SubmitResults">
<soap12:operation soapAction="http://mono-project.com/MoMASubmit/SubmitResults" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="MoMASubmit">
<wsdl:port name="MoMASubmitSoap" binding="tns:MoMASubmitSoap">
<soap:address location="http://jpobst.com/pobst/moma/MoMASubmit.asmx" />
</wsdl:port>
<wsdl:port name="MoMASubmitSoap12" binding="tns:MoMASubmitSoap12">
<soap12:address location="http://jpobst.com/pobst/moma/MoMASubmit.asmx" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

Просмотреть файл

@ -0,0 +1,150 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
//
// This source code was auto-generated by Microsoft.VSDesigner, Version 2.0.50727.42.
//
#pragma warning disable 1591
namespace MoMA.MoMAWebServices {
using System.Diagnostics;
using System.Web.Services;
using System.ComponentModel;
using System.Web.Services.Protocols;
using System;
using System.Xml.Serialization;
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MoMASubmitSoap", Namespace="http://mono-project.com/MoMASubmit/")]
public partial class MoMASubmit : System.Web.Services.Protocols.SoapHttpClientProtocol {
private System.Threading.SendOrPostCallback SubmitResultsOperationCompleted;
private bool useDefaultCredentialsSetExplicitly;
/// <remarks/>
public MoMASubmit() {
this.Url = "http://jpobst.com/pobst/moma/MoMASubmit.asmx";
if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
this.UseDefaultCredentials = true;
this.useDefaultCredentialsSetExplicitly = false;
}
else {
this.useDefaultCredentialsSetExplicitly = true;
}
}
public new string Url {
get {
return base.Url;
}
set {
if ((((this.IsLocalFileSystemWebService(base.Url) == true)
&& (this.useDefaultCredentialsSetExplicitly == false))
&& (this.IsLocalFileSystemWebService(value) == false))) {
base.UseDefaultCredentials = false;
}
base.Url = value;
}
}
public new bool UseDefaultCredentials {
get {
return base.UseDefaultCredentials;
}
set {
base.UseDefaultCredentials = value;
this.useDefaultCredentialsSetExplicitly = true;
}
}
/// <remarks/>
public event SubmitResultsCompletedEventHandler SubmitResultsCompleted;
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://mono-project.com/MoMASubmit/SubmitResults", RequestNamespace="http://mono-project.com/MoMASubmit/", ResponseNamespace="http://mono-project.com/MoMASubmit/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public bool SubmitResults(string results) {
object[] results1 = this.Invoke("SubmitResults", new object[] {
results});
return ((bool)(results1[0]));
}
/// <remarks/>
public void SubmitResultsAsync(string results) {
this.SubmitResultsAsync(results, null);
}
/// <remarks/>
public void SubmitResultsAsync(string results, object userState) {
if ((this.SubmitResultsOperationCompleted == null)) {
this.SubmitResultsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSubmitResultsOperationCompleted);
}
this.InvokeAsync("SubmitResults", new object[] {
results}, this.SubmitResultsOperationCompleted, userState);
}
private void OnSubmitResultsOperationCompleted(object arg) {
if ((this.SubmitResultsCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.SubmitResultsCompleted(this, new SubmitResultsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
public new void CancelAsync(object userState) {
base.CancelAsync(userState);
}
private bool IsLocalFileSystemWebService(string url) {
if (((url == null)
|| (url == string.Empty))) {
return false;
}
System.Uri wsUri = new System.Uri(url);
if (((wsUri.Port >= 1024)
&& (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) {
return true;
}
return false;
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.42")]
public delegate void SubmitResultsCompletedEventHandler(object sender, SubmitResultsCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class SubmitResultsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal SubmitResultsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public bool Result {
get {
this.RaiseExceptionIfNecessary();
return ((bool)(this.results[0]));
}
}
}
}
#pragma warning restore 1591

Просмотреть файл

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<DiscoveryClientResultsFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Results>
<DiscoveryClientResult referenceType="System.Web.Services.Discovery.DiscoveryDocumentReference" url="http://jpobst.com/pobst/moma/MoMASubmit.asmx?disco" filename="MoMASubmit.disco" />
<DiscoveryClientResult referenceType="System.Web.Services.Discovery.ContractReference" url="http://jpobst.com/pobst/moma/MoMASubmit.asmx?wsdl" filename="MoMASubmit.wsdl" />
</Results>
</DiscoveryClientResultsFile>

14
WizardStep.cs Normal file
Просмотреть файл

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace MoMA
{
public enum WizardStep
{
Introduction = 1,
ChooseAssemblies = 2,
ViewResults = 3,
SubmitResults = 4
}
}

15
app.config Normal file
Просмотреть файл

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MoMA.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<MoMA.Properties.Settings>
<setting name="MoMA_MoMAWebServices_MoMASubmit" serializeAs="String">
<value>http://jpobst.com/pobst/moma/MoMASubmit.asmx</value>
</setting>
</MoMA.Properties.Settings>
</applicationSettings>
</configuration>