[groovy] do not increment Java Structure modification count in method
[idea/community.git] / plugins / groovy / groovy-psi / src / org / jetbrains / plugins / groovy / lang / psi / impl / GroovyFileImpl.java
index 70ac76f3210dd17a6734bb610ce2f2720a32a044..39a7cbce58fba34e07b5fdd8d144603d0f38483e 100644 (file)
@@ -70,7 +70,8 @@ import java.util.concurrent.ConcurrentMap;
  *
  * @author ilyas
  */
-public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
+public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile, PsiModifiableCodeBlock {
+
   private static final Logger LOG = Logger.getInstance("org.jetbrains.plugins.groovy.lang.psi.impl.GroovyFileImpl");
 
   private static final String SYNTHETIC_PARAMETER_NAME = "args";
@@ -439,7 +440,8 @@ public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
     if (currentPackage != null) {
       final ASTNode currNode = currentPackage.getNode();
       fileNode.replaceChild(currNode, newNode);
-    } else {
+    }
+    else {
       ASTNode anchor = fileNode.getFirstChildNode();
       if (anchor != null && anchor.getElementType() == GroovyTokenTypes.mSH_COMMENT) {
         anchor = anchor.getTreeNext();
@@ -541,9 +543,18 @@ public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
     return PsiImplUtilKt.getScriptDeclarations(this, topLevelOnly);
   }
 
+  @Override
+  public boolean shouldChangeModificationCount(PsiElement place) {
+    // 1. We actually should never get GrTypeDefinion as a parent, because it is a PsiClass,
+    //    and PsiClasses prevent to go up in a tree any further
+    // 2. If place is under a variable then @BaseScript or @Field may be changed,
+    //    which actually is a change in Java Structure
+    return !isScript() || PsiTreeUtil.getParentOfType(place, GrTypeDefinition.class, GrVariableDeclaration.class) != null;
+  }
+
   @Override
   public String toString() {
-    if (ApplicationManager.getApplication().isUnitTestMode()){
+    if (ApplicationManager.getApplication().isUnitTestMode()) {
       return super.toString();
     }
     return "GroovyFileImpl:" + getName();