public override void doAction(CSsemi.CSemiExp semi) { TypeModel tm = new TypeModel(); FileModel fm = new FileModel(); // Console.Write("\n Entering scope: "); if (semi.Contains("class") != -1) { int index = semi.Contains("class"); // Console.Write("class: "); tm.addType(semi[index + 1], fm.CurrentFile); } else if (semi.Contains("struct") != -1) { int index = semi.Contains("struct"); //Console.Write("struct: "); tm.addType(semi[index + 1], fm.CurrentFile); } else if (semi.Contains("interface") != -1) { int index = semi.Contains("class"); //Console.Write("interface: "); tm.addType(semi[index + 1], fm.CurrentFile); } else if (semi.Contains("enum") != -1) { int index = semi.Contains("class"); //Console.Write("enum: "); tm.addType(semi[index + 1], fm.CurrentFile); } else if (semi.Contains("delegte") != -1) { int index = semi.Contains("delegate"); //Console.Write("delegate: "); tm.addType(semi[index + 2], fm.CurrentFile); } else Console.Write(""); }
public override bool test(CSsemi.CSemiExp semi) { int indexCL = semi.Contains("class"); int indexIF = semi.Contains("interface"); int indexST = semi.Contains("struct"); int index = Math.Max(indexCL, indexIF); index = Math.Max(index, indexST); if (index != -1) { CSsemi.CSemiExp local = new CSsemi.CSemiExp(); local.displayNewLines = false; local.Add(semi[index]).Add(semi[index + 1]); doActions(local); } return false; }
public override bool test(CSsemi.CSemiExp semi, string filename) { int index = semi.Contains("new"); try { if (index != -1) { List<Elem> table = RepositoryForOutput.storageForOutput_; foreach (Elem e in table) { if ((e.name.Equals(semi[index + 1])) && !(e.type.Equals("function")) && !semi[index + 1].Equals("List")) { aggregationTest(semi, index, filename,e.filename, e.namespacename); return true; } } } } catch { } return false; }
public override bool test(CSsemi.CSemiExp semi, string filename) { int indexCL = semi.Contains("class"); int indexIF = semi.Contains("interface"); int indexST = semi.Contains("struct"); int indexEN = semi.Contains("enum"); int index = Math.Max(indexCL, indexIF); index = Math.Max(index, indexST); index = Math.Max(index, indexEN); if (index != -1) { CSsemi.CSemiExp local = new CSsemi.CSemiExp(); // local semiExp with tokens for type and name local.displayNewLines = false; local.Add(semi[index]).Add(semi[index + 1]); doActions(local, filename); return true; } return false; }
public override bool test(CSsemi.CSemiExp semi, string filename) { int index = semi.Contains("}"); if (index != -1) { doActions(semi, filename); return true; } return false; }
// function detect inheritance relationship public void inheritance(CSsemi.CSemiExp semi, Elem e) { int indexCL = semi.Contains("class"); int indexIF = semi.Contains("interface"); int indexST = semi.Contains("struct"); int index = Math.Max(indexCL, indexIF); index = Math.Max(index, indexST); if (index != -1) { if (semi[index + 2] == ":") { if (semi[index + 4] != ".") // like A: B e.inheritance += semi[index + 3] + " "; else // like A: namespace.B e.inheritance += semi[index + 5] + " "; } } }
public override bool test(CSsemi.CSemiExp semi) { int index = semi.Contains("{"); if (index != -1) { CSsemi.CSemiExp local = new CSsemi.CSemiExp(); // create local semiExp with tokens for type and name local.displayNewLines = false; local.Add("control").Add("anonymous"); doActions(local); return true; } return false; }
// function to analyze inheritance relationship public void InheritanceAnalyze(CSsemi.CSemiExp local, List<Elem> TABLE) { if (local.Contains(":") != -1) { int index = local.Contains(":"); foreach (Elem e in TABLE) { if (e.name == local[index + 1] && (e.type == "class" || e.type == "struct" || e.type == "interface")) { Console.Write("\n inheritance: "); Console.Write(" {0}", local[index + 1]); } } } }
// function to analyze using relationship public void UsingAnalyze(CSsemi.CSemiExp local, List<Elem> TABLE, Elem e) { DetectFunction df = new DetectFunction(); if (df.test(local) == true && local.Contains("(") != -1 && local.Contains(")") != -1 && local.Contains("{") != -1) { foreach (Elem ele in TABLE) { if (local.Contains(ele.name) > -1 && ele.UsingFlag == false && (ele.type == "class" || ele.type == "interface" || ele.type == "enum")) { ele.UsingFlag = true; Console.Write("\n using: "); int index = local.Contains(ele.name); Console.Write(" {0}", local[index]); continue; } } } }
// function to analyze aggregation relationship public void AggregationAnalyze(CSsemi.CSemiExp local, List<Elem> TABLE) { if (local.Contains("new") != -1) { int index = local.Contains("new"); foreach (Elem e in TABLE) { if (e.name == local[index + 1] && e.AggregationFlag == false && e.type == "class") //detect B b = new B(); { e.AggregationFlag = true; Console.Write("\n aggregation: "); Console.Write(" {0}", local[index + 1]); break; } else if (e.name == local[index + 3] && e.AggregationFlag == false && e.type == "class") // detect B b = new A.B(); { e.AggregationFlag = true; Console.Write("\n aggregation: "); Console.Write(" {0}", local[index + 3]); break; } } } }
// function to analyze composition relationship public void CompositionAnalyze(CSsemi.CSemiExp local, List<Elem> TABLE) { foreach (Elem e in TABLE) { int index = local.Contains(e.name); //calculate index for class int index1 = local.Contains("="); //calculate index for "=" for comparision if (local.Contains(e.name) != -1 && local.Contains("=") != -1 && index < index1 && e.CompositionFlag == false && (e.type == "class" || e.type == "struct" || e.type == "interface" || e.type == "enum")) if (local.Contains("new") == -1 && e.name == local[index]) // detect B b = a.func() in class A { e.CompositionFlag = true; Console.Write("\n composition: "); Console.Write(" {0}", local[index]); break; } } }
public override bool test(CSsemi.CSemiExp semi) { int indexDl = semi.Contains("delegate"); if (indexDl != -1) { CSsemi.CSemiExp local = new CSsemi.CSemiExp(); // local semiExp with tokens for type and name local.displayNewLines = false; local.Add(semi[indexDl]).Add(semi[indexDl+ 2]); doActions(local); return true; } return false; }
public override bool test(CSsemi.CSemiExp semi) { if (semi.count > 0 && semi[semi.count - 1] == "}") { scope_.Pop(); semi.display(); doActions(scopeToSemi(scope_)); } else if (semi.count > 0 && semi[semi.count - 1] == "{") { int index = semi.Contains("namespace"); if (index != -1) { string temp = "namespace:" + semi[index + 1]; scope_.Push(temp); } else { index = indexOfType(semi); if (index != -1) { string temp = "type:" + semi[index + 1]; scope_.Push(temp); } else { int jndex = semi.Contains("("); if (jndex != -1 && !DetectFunction.isSpecialToken(semi[jndex - 1])) { string temp = "function:" + semi[jndex - 1]; scope_.Push(temp); } else scope_.Push("local"); } } Console.WriteLine(); semi.display(); doActions(scopeToSemi(scope_)); } return false; }
public override bool test(CSsemi.CSemiExp semi) { if(semi[semi.count-1] != "{") return false; int index = semi.Contains("("); if(index != -1 && !isSpecialToken(semi[index-1])) doActions(semi); return false; }
// function detect aggregation public void aggregation(CSsemi.CSemiExp semi, Elem e, List<Elem> fileSetInfo) { int indexNW = semi.Contains("new"); if (indexNW != -1) { if (isSelfDefine(semi[indexNW + 1], fileSetInfo)) // is class defined in other file { if (semi[indexNW + 2] != ".") // like "= new class ();" { if ((e.aggregation).IndexOf(semi[indexNW + 1]) < 0) { e.aggregation += semi[indexNW + 1] + " "; } } else // like "= new namespace.class();" { if (e.aggregation.IndexOf(semi[indexNW + 3]) < 0) { e.aggregation += semi[indexNW + 3] + " "; } } } } }
// function detect composition public static void composition(CSsemi.CSemiExp semi, Elem e, List<Elem> fileSetInfo) { foreach (Elem elem in fileSetInfo) { if (semi.Contains(elem.name) != -1 && semi.Contains("=") != -1 && elem.type == "class" && semi.Contains("=") > semi.Contains(elem.name) || semi.Contains(elem.name) != -1 && semi.Contains("=") != -1 && elem.type == "struct" && semi.Contains("=") > semi.Contains(elem.name) || semi.Contains(elem.name) != -1 && semi.Contains("=") != -1 && elem.type == "enum" && semi.Contains("=") > semi.Contains(elem.name)) if (semi.Contains("new") == -1) { if (e.dependency.IndexOf(elem.name) < 0 && e.name != elem.name) { e.dependency += elem.name + " "; } } } }
// function detect composition public void composition(CSsemi.CSemiExp semi, Elem e, List<Elem> fileSetInfo) { foreach (Elem elem in fileSetInfo) { if (semi.Contains(elem.name) != -1 && semi.Contains("=") != -1 && elem.type == "class" || semi.Contains(elem.name) != -1 && semi.Contains("=") != -1 && elem.type == "struct" || semi.Contains(elem.name) != -1 && semi.Contains("=") != -1 && elem.type == "enum") if (semi.Contains("new") == -1) { if (e.composition.IndexOf(elem.name) < 0 ) { e.composition += elem.name + " "; } } } }
public override bool test(CSsemi.CSemiExp semi) { Display.displayRules(actionDelegate, "rule DetectClass"); int indexCL = semi.Contains("class"); int indexIF = semi.Contains("interface"); int indexST = semi.Contains("struct"); int index = Math.Max(indexCL, indexIF); index = Math.Max(index, indexST); if (index != -1) { CSsemi.CSemiExp local = new CSsemi.CSemiExp(); // local semiExp with tokens for type and name local.displayNewLines = false; local.Add(semi[index]).Add(semi[index + 1]); doActions(local); return true; } return false; }
// fucntion detect using public void usingRelationship(CSsemi.CSemiExp semi, Elem e, List<Elem> fileSetInfo) { if(containFunctionName(semi)) // the semi contain name of function { foreach(Elem ele in fileSetInfo) if (semi.Contains(ele.name) > -1 && ele.name != e.name && ele.type == "class" || semi.Contains(ele.name) > -1 && ele.name != e.name && ele.type == "struct" || semi.Contains(ele.name) > -1 && ele.name != e.name && ele.type == "enum") if (e.usingrelationship.IndexOf(ele.name) < 0) { e.usingrelationship += ele.name + " "; } } }
public override bool test(CSsemi.CSemiExp semi) { Display.displayRules(actionDelegate, "rule DetectLeavingScope"); int index = semi.Contains("}"); if (index != -1) { doActions(semi); return true; } return false; }
public override bool test(CSsemi.CSemiExp semi, string filename) { string[] SpecialToken = { "try", "for", "foreach", "while", "switch", "if", "else", "catch", "using", "unsafe", "finally", "break" }; int index = -1; foreach (string stoken in SpecialToken) { index = semi.Contains(stoken); if (index != -1) { CSsemi.CSemiExp local = new CSsemi.CSemiExp(); // create local semiExp with tokens for type and name local.displayNewLines = false; local.Add("complexity"); doActions(local, filename); return false; } } return false; }
public override bool test(CSsemi.CSemiExp semi) { Display.displayRules(actionDelegate, "rule DetectNamespace"); int index = semi.Contains("namespace"); if (index != -1) { CSsemi.CSemiExp local = new CSsemi.CSemiExp(); // create local semiExp with tokens for type and name local.displayNewLines = false; local.Add(semi[index]).Add(semi[index + 1]); doActions(local); return true; } return false; }
public override bool test(CSsemi.CSemiExp semi) { if (semi.Contains("{") != -1) doActions(semi); return false; // don't stop }
public override bool test(CSsemi.CSemiExp semi) { Display.displayRules(actionDelegate, "rule DetectPublicDeclar"); int index = semi.Contains(";"); if (index != -1) { index = semi.Contains("public"); if (index == -1) return true; CSsemi.CSemiExp local = new CSsemi.CSemiExp(); // create local semiExp with tokens for type and name local.displayNewLines = false; local.Add("public "+semi[index+1]).Add(semi[index+2]); index = semi.Contains("="); if (index != -1) { doActions(local); return true; } index = semi.Contains("("); if(index == -1) { doActions(local); return true; } } return false; }
public override bool test(CSsemi.CSemiExp semi, string filename) { int index = semi.Contains("delegate"); if (index != -1) { CSsemi.CSemiExp local = new CSsemi.CSemiExp(); // create local semiExp with tokens for type and name local.displayNewLines = false; local.Add(semi[index]).Add(semi[index + 2]); doActions(local, filename); return true; } return false; }
// function detect special curly brace bool specialCB(CSsemi.CSemiExp semi) { int index = semi.Contains("{"); if (index != -1) { bool allAreNull = true; // tokens before "{" are null, say, this semi is begin with "{" for (int i = 0; i < index; i++) if (semi[i] != "\n") allAreNull = false; // some token before "{", such as "if", "for" if (allAreNull) return true; } return false; }
public override bool test(CSsemi.CSemiExp semi, string filename) { int index = semi.Contains("class"); try { if (index != -1) { foreach (Elem e in table) { if (e.name.Equals(semi[index + 1])) { inhertanceTest(semi, index, filename); return false; } } } } catch { } return false; }
public override bool test(CSsemi.CSemiExp semi) { int indexEN = semi.Contains("enum"); if (indexEN != -1) { CSsemi.CSemiExp local = new CSsemi.CSemiExp(); local.displayNewLines = false; local.Add(semi[indexEN]).Add(semi[indexEN + 1]); doActions(local); return true; } return false; }
public int indexOfType(CSsemi.CSemiExp semi) { int indexCL = semi.Contains("class"); int indexIF = semi.Contains("interface"); int indexST = semi.Contains("struct"); int indexEN = semi.Contains("enum"); int index = Math.Max(indexCL, indexIF); index = Math.Max(index, indexST); index = Math.Max(index, indexEN); return index; }
public override bool test(CSsemi.CSemiExp semi) { int index = semi.Contains("namespace"); if (index != -1) { CSsemi.CSemiExp local = new CSsemi.CSemiExp(); local.displayNewLines = false; local.Add(semi[index]).Add(semi[index + 1]); doActions(local); } return false; }