Merge "Add more complex Analyser test" into studio-1.3-dev automerge: 8fac81b
automerge: 5cd7f77

* commit '5cd7f77700a1ed1abe1e0d3fad1f6f2bfee6c06a':
  Add more complex Analyser test
diff --git a/android/testSrc/com/android/tools/idea/editors/navigation/AnalyserTest.java b/android/testSrc/com/android/tools/idea/editors/navigation/AnalyserTest.java
index 66fc057..cf75e39 100644
--- a/android/testSrc/com/android/tools/idea/editors/navigation/AnalyserTest.java
+++ b/android/testSrc/com/android/tools/idea/editors/navigation/AnalyserTest.java
@@ -31,6 +31,26 @@
     "  $builder.append($obj);" +
     "}";
 
+  public static final String TEMPLATE_INNER_CLASS =
+    "void macro(Method $method, Object $obj, Argument $arg) {" +
+    "  new Runnable() {" +
+    "    @Override public void run() {" +
+    "      $obj.$method($arg);" +
+    "    }" +
+    "  };" +
+    "}";
+
+  public static final String INNER_CLASS_EXAMPLE =
+    "public static void main() {" +
+    "  new Thread(" +
+    "    new Runnable() {" +
+    "      @Override public void run() {" +
+    "        System.out.println(\"Hello from separate thread\");" +
+    "      }" +
+    "    }" +
+    "  ).start();" +
+    "}";
+
   private PsiElementFactory myElementFactory = null;
 
   @Override
@@ -49,7 +69,8 @@
 
     final PsiMethod template = myElementFactory.createMethodFromText(TEMPLATE, null);
 
-    final List<MultiMatch.Bindings<PsiElement>> bindingsList = Analyser.search(method, new MultiMatch(CodeTemplate.fromMethod(template)));
+    final List<MultiMatch.Bindings<PsiElement>> bindingsList =
+      Analyser.search(method, new MultiMatch(CodeTemplate.fromMethod(template)));
     assertEquals(bindingsList.size(), 2);
 
     final List expectedMatches = Arrays.asList("a string", 20);
@@ -66,6 +87,27 @@
     }
   }
 
+  public void testInnerClass() {
+    final PsiMethod method = myElementFactory.createMethodFromText(INNER_CLASS_EXAMPLE, null);
+
+    final PsiMethod template = myElementFactory.createMethodFromText(TEMPLATE_INNER_CLASS, null);
+
+    final List<MultiMatch.Bindings<PsiElement>> bindingsList =
+      Analyser.search(method, new MultiMatch(CodeTemplate.fromMethod(template)));
+    assertEquals(1, bindingsList.size());
+
+    final MultiMatch.Bindings<PsiElement> bindings = bindingsList.get(0);
+
+    final PsiReferenceExpression object = assertInstanceOf(bindings.get("$obj"), PsiReferenceExpression.class);
+    assertEquals("System.out", object.getText());
+
+    final PsiLiteralExpression argument = assertInstanceOf(bindings.get("$arg"), PsiLiteralExpression.class);
+    assertEquals("Hello from separate thread", argument.getValue());
+
+    final PsiIdentifier methodName = assertInstanceOf(bindings.get("$method"), PsiIdentifier.class);
+    assertEquals("println", methodName.getText());
+  }
+
   @Override
   public void tearDown() throws Exception {
     super.tearDown();
diff --git a/android/testSrc/com/android/tools/idea/editors/navigation/UnifierTest.java b/android/testSrc/com/android/tools/idea/editors/navigation/UnifierTest.java
index 8e248ef..bad554b 100644
--- a/android/testSrc/com/android/tools/idea/editors/navigation/UnifierTest.java
+++ b/android/testSrc/com/android/tools/idea/editors/navigation/UnifierTest.java
@@ -24,18 +24,20 @@
 import java.util.Map;
 
 public class UnifierTest extends AndroidTestCase {
+  private PsiElementFactory myElementFactory;
 
-  public void testUnifier() throws Exception {
-    final Project project = this.getProject();
-    final JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
-    final PsiElementFactory elementFactory = facade.getElementFactory();
+  @Override
+  public void setUp() throws Exception {
+    super.setUp();
+    myElementFactory = JavaPsiFacade.getInstance(this.getProject()).getElementFactory();
+  }
 
-    final PsiClass psiClass = elementFactory.createClass("Dummy");
-    final PsiExpression expression = elementFactory.createExpressionFromText("20 + 22", psiClass);
-    final PsiMethod template = elementFactory.createMethodFromText(
+  public void testUnifierSimple() throws Exception {
+    final PsiExpression expression = myElementFactory.createExpressionFromText("20 + 22", null);
+    final PsiMethod template = myElementFactory.createMethodFromText(
       "void macro(int $x, int $y) {" +
       "    $x + $y;" +
-      "}", psiClass);
+      "}", null);
 
     final Map<String, PsiElement> result = Unifier.match(CodeTemplate.fromMethod(template), expression);
     assertNotNull(result);
@@ -49,4 +51,10 @@
     assertEquals(xValue, Integer.valueOf(20));
     assertEquals(yValue, Integer.valueOf(22));
   }
+
+  @Override
+  public void tearDown() throws Exception {
+    super.tearDown();
+    myElementFactory = null;
+  }
 }