/*
 * Copyright 2000-2009 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.intellij.testIntegration;

import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.testIntegration.createTest.CreateTestAction;
import com.intellij.util.IncorrectOperationException;

public class JavaTestCreator implements TestCreator {
  private static final Logger LOG = Logger.getInstance("com.intellij.testIntegration.JavaTestCreator");


  @Override
  public boolean isAvailable(Project project, Editor editor, PsiFile file) {
    CreateTestAction action = new CreateTestAction();
    PsiElement element = file.findElementAt(editor.getCaretModel().getOffset());

    return CreateTestAction.isAvailableForElement(element);
  }

  public void createTest(Project project, Editor editor, PsiFile file) {
    try {
      CreateTestAction action = new CreateTestAction();
      PsiElement element = file.findElementAt(editor.getCaretModel().getOffset());
      if (CreateTestAction.isAvailableForElement(element)) {
        action.invoke(project, editor, file.getContainingFile());
      }
    }
    catch (IncorrectOperationException e) {
      LOG.warn(e);
    }
  }
}

@@ -1214,54 +1214,59 @@
     
-CreateTestAction action = new CreateTestAction
+final int offset = editor.getCaretModel().getOffset
 ();%0A
@@ -1282,37 +1282,32 @@
 ement element = 
-file.
 findElementAt(ed
@@ -1305,49 +1305,24 @@
 ment
-At(editor.getCaretModel().getO
+(file, o
 ffset
-()
 );%0A
-%0A
     
@@ -1548,21 +1548,16 @@
 ement = 
-file.
 findElem
@@ -1563,11 +1563,15 @@
 ment
-At(
+(file, 
 edit
@@ -1707,32 +1707,15 @@
 or, 
-file.getContainingFile()
+element
 );%0A 
@@ -1799,11 +1799,272 @@
    %7D%0A  %7D
+%0A%0A  private static PsiElement findElement(PsiFile file, int offset) %7B%0A    PsiElement element = file.findElementAt(offset);%0A    if (element == null && offset == file.getTextLength()) %7B%0A      element = file.findElementAt(offset - 1);%0A    %7D%0A    return element;%0A  %7D
 %0A%7D%0A

create test: fix at last position (IDEA-154055)