Take all responsibility for updating trackers, stop delegating it to Java-plugin code

This commit is contained in:
Nikolay Krasko
2014-10-20 20:35:47 +04:00
parent a988415e22
commit 565612bc19
4 changed files with 26 additions and 6 deletions
@@ -35,7 +35,8 @@ public class JetBlockExpression extends JetExpressionImpl implements JetStatemen
@Override @Override
public boolean shouldChangeModificationCount(PsiElement place) { public boolean shouldChangeModificationCount(PsiElement place) {
return JetModifiableBlockHelper.shouldChangeModificationCount(place); // To prent OutOfBlockModification increase from JavaCodeBlockModificationListener
return false;
} }
@Override @Override
@@ -20,6 +20,7 @@ import com.intellij.lang.ASTNode;
import com.intellij.navigation.ItemPresentation; import com.intellij.navigation.ItemPresentation;
import com.intellij.navigation.ItemPresentationProviders; import com.intellij.navigation.ItemPresentationProviders;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiModifiableCodeBlock;
import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -32,7 +33,8 @@ import org.jetbrains.jet.lexer.JetTokens;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
public class JetNamedFunction extends JetTypeParameterListOwnerStub<PsiJetFunctionStub> implements JetFunction, JetWithExpressionInitializer { public class JetNamedFunction extends JetTypeParameterListOwnerStub<PsiJetFunctionStub>
implements JetFunction, JetWithExpressionInitializer, PsiModifiableCodeBlock {
public JetNamedFunction(@NotNull ASTNode node) { public JetNamedFunction(@NotNull ASTNode node) {
super(node); super(node);
} }
@@ -189,4 +191,10 @@ public class JetNamedFunction extends JetTypeParameterListOwnerStub<PsiJetFuncti
PsiElement parent = getParent(); PsiElement parent = getParent();
return !(parent instanceof JetFile || parent instanceof JetClassBody); return !(parent instanceof JetFile || parent instanceof JetClassBody);
} }
@Override
public boolean shouldChangeModificationCount(PsiElement place) {
// Suppress Java check for out-of-block
return false;
}
} }
@@ -21,6 +21,7 @@ import com.intellij.navigation.ItemPresentation;
import com.intellij.navigation.ItemPresentationProviders; import com.intellij.navigation.ItemPresentationProviders;
import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiModifiableCodeBlock;
import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet; import com.intellij.psi.tree.TokenSet;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
@@ -37,7 +38,8 @@ import java.util.List;
import static org.jetbrains.jet.JetNodeTypes.PROPERTY_DELEGATE; import static org.jetbrains.jet.JetNodeTypes.PROPERTY_DELEGATE;
import static org.jetbrains.jet.lexer.JetTokens.*; import static org.jetbrains.jet.lexer.JetTokens.*;
public class JetProperty extends JetTypeParameterListOwnerStub<PsiJetPropertyStub> implements JetVariableDeclaration { public class JetProperty extends JetTypeParameterListOwnerStub<PsiJetPropertyStub>
implements JetVariableDeclaration, PsiModifiableCodeBlock {
private static final Logger LOG = Logger.getInstance(JetProperty.class); private static final Logger LOG = Logger.getInstance(JetProperty.class);
@@ -263,4 +265,10 @@ public class JetProperty extends JetTypeParameterListOwnerStub<PsiJetPropertyStu
public ItemPresentation getPresentation() { public ItemPresentation getPresentation() {
return ItemPresentationProviders.getItemPresentation(this); return ItemPresentationProviders.getItemPresentation(this);
} }
@Override
public boolean shouldChangeModificationCount(PsiElement place) {
// Suppress Java check for out-of-block
return false;
}
} }
@@ -26,6 +26,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetBlockExpression; import org.jetbrains.jet.lang.psi.JetBlockExpression;
import org.jetbrains.jet.lang.psi.JetClass; import org.jetbrains.jet.lang.psi.JetClass;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetModifiableBlockHelper;
public class JetCodeBlockModificationListener implements PsiTreeChangePreprocessor { public class JetCodeBlockModificationListener implements PsiTreeChangePreprocessor {
private static final Logger LOG = Logger.getInstance("#org.jetbrains.jet.asJava.JetCodeBlockModificationListener"); private static final Logger LOG = Logger.getInstance("#org.jetbrains.jet.asJava.JetCodeBlockModificationListener");
@@ -75,7 +76,7 @@ public class JetCodeBlockModificationListener implements PsiTreeChangePreprocess
private void processChange(PsiElement parent, PsiElement child1, PsiElement child2) { private void processChange(PsiElement parent, PsiElement child1, PsiElement child2) {
try { try {
if (!isInsideCodeBlock(parent)) { if (!isInsideCodeBlock(parent)) {
if (parent != null && parent.getContainingFile() instanceof JetFile) { if (parent.getContainingFile() instanceof JetFile) {
myModificationTracker.incCounter(); myModificationTracker.incCounter();
} }
else { else {
@@ -84,7 +85,7 @@ public class JetCodeBlockModificationListener implements PsiTreeChangePreprocess
return; return;
} }
if (containsClassesInside(child1) || child2 != child1 && containsClassesInside(child2)) { if (containsClassesInside(child1) || (child2 != child1 && containsClassesInside(child2))) {
myModificationTracker.incCounter(); myModificationTracker.incCounter();
} }
} catch (PsiInvalidElementAccessException e) { } catch (PsiInvalidElementAccessException e) {
@@ -119,7 +120,9 @@ public class JetCodeBlockModificationListener implements PsiTreeChangePreprocess
} }
if (parent instanceof JetClass) return false; // anonymous or local class if (parent instanceof JetClass) return false; // anonymous or local class
if (parent instanceof JetBlockExpression) { if (parent instanceof JetBlockExpression) {
return true; if (!JetModifiableBlockHelper.shouldChangeModificationCount(element)) {
return true;
}
} }
parent = parent.getParent(); parent = parent.getParent();
} }