import java.util.*;

import spoon.Launcher;
import spoon.reflect.code.*;
import spoon.reflect.declaration.*;
import spoon.reflect.visitor.CtScanner;

public class CheckAssignments
{
   public static void main(String[] args) throws Exception
   {
      Launcher launcher = new Launcher();
      launcher.addInputResource("/home/icp/projects/branches/9060a/src/com/goldencode/p2j");
      launcher.getEnvironment().setNoClasspath(true);
      launcher.getEnvironment().setAutoImports(true);
      Collection<CtType<?>> allTypes = launcher.buildModel().getAllTypes();

      List<String> mathOps = new ArrayList<>();
      List<String> textOps = new ArrayList<>();
      List<String> dynamicOps = new ArrayList<>();
      List<String> compareOps= new ArrayList<>();
      List<String> environmentOps= new ArrayList<>();

      for (CtType<?> type : allTypes)
      {
         type.accept(new CtScanner()
         {
            @Override
            public void scan(CtElement element)
            {
               if (element instanceof CtAssignment<?, ?>)
               {
                  CtAssignment<?, ?> assignment = (CtAssignment<?, ?>) element;

                  if (assignment.getAssignment() instanceof CtInvocation<?>)
                  {
                     CtInvocation<?> invocation = (CtInvocation<?>) assignment.getAssignment();
                     String position = assignment.getPosition().toString();

                     if (invocation.getTarget() != null)
                     {
                        String target = invocation.getTarget().toString();
                        if (target.equals("MathOps"))
                        {
                           mathOps.add(position);
                        }
                        else if (target.equals("TextOps"))
                        {
                           textOps.add(position);
                        }
                        else if (target.equals("DynamicOps"))
                        {
                           dynamicOps.add(position);
                        }
                        else if (target.equals("CompareOps"))
                        {
                           compareOps.add(position);
                        }
                        else if (target.equals("EnvironmentOps"))
                        {
                           environmentOps.add(position);
                        }
                     }
                  }
               }
               super.scan(element);
            }
         });
      }

      System.out.println("\n==== MathOps ====");
      for (String location : mathOps)
      {
         System.out.println(location);
      }

      System.out.println("\n==== TextOps ====");
      for (String location : textOps)
      {
         System.out.println(location);
      }

      System.out.println("\n==== DynamicOps ====");
      for (String location : dynamicOps)
      {
         System.out.println(location);
      }
      System.out.println("\n==== CompareOps ====");
      for (String location : compareOps)
      {
         System.out.println(location);
      }
      System.out.println("\n==== EnvironmentOps ====");
      for (String location : environmentOps)
      {
         System.out.println(location);
      }
   }
}
