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("");

        }
Exemple #2
0
    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;
        }
Exemple #13
0
 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;
   }
Exemple #14
0
 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;
        }
Exemple #30
0
 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;
 }