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
public boolean shouldChangeModificationCount(PsiElement place) {
return JetModifiableBlockHelper.shouldChangeModificationCount(place);
// To prent OutOfBlockModification increase from JavaCodeBlockModificationListener
return false;
}
@Override
@@ -20,6 +20,7 @@ import com.intellij.lang.ASTNode;
import com.intellij.navigation.ItemPresentation;
import com.intellij.navigation.ItemPresentationProviders;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiModifiableCodeBlock;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
@@ -32,7 +33,8 @@ import org.jetbrains.jet.lexer.JetTokens;
import java.util.Collections;
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) {
super(node);
}
@@ -189,4 +191,10 @@ public class JetNamedFunction extends JetTypeParameterListOwnerStub<PsiJetFuncti
PsiElement parent = getParent();
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.openapi.diagnostic.Logger;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiModifiableCodeBlock;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
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.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);
@@ -263,4 +265,10 @@ public class JetProperty extends JetTypeParameterListOwnerStub<PsiJetPropertyStu
public ItemPresentation getPresentation() {
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.JetClass;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetModifiableBlockHelper;
public class JetCodeBlockModificationListener implements PsiTreeChangePreprocessor {
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) {
try {
if (!isInsideCodeBlock(parent)) {
if (parent != null && parent.getContainingFile() instanceof JetFile) {
if (parent.getContainingFile() instanceof JetFile) {
myModificationTracker.incCounter();
}
else {
@@ -84,7 +85,7 @@ public class JetCodeBlockModificationListener implements PsiTreeChangePreprocess
return;
}
if (containsClassesInside(child1) || child2 != child1 && containsClassesInside(child2)) {
if (containsClassesInside(child1) || (child2 != child1 && containsClassesInside(child2))) {
myModificationTracker.incCounter();
}
} 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 JetBlockExpression) {
return true;
if (!JetModifiableBlockHelper.shouldChangeModificationCount(element)) {
return true;
}
}
parent = parent.getParent();
}