[groovy] drop members cache on subtreeChanged() too (IDEA-CR-15963)

This commit is contained in:
Daniil Ovchinnikov
2016-11-18 20:12:04 +03:00
parent 0512ea5241
commit ec70b47b98
2 changed files with 14 additions and 2 deletions
@@ -295,6 +295,12 @@ public abstract class GrTypeDefinitionImpl extends GrStubElementBase<GrTypeDefin
return myCache.getCodeMethods();
}
@Override
public void subtreeChanged() {
myCache.dropCaches();
super.subtreeChanged();
}
@NotNull
@Override
public PsiMethod[] getConstructors() {
@@ -15,6 +15,7 @@
*/
package org.jetbrains.plugins.groovy.lang.psi.impl.statements.typedef;
import com.intellij.openapi.util.SimpleModificationTracker;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiClassType;
import com.intellij.psi.PsiMethod;
@@ -30,16 +31,17 @@ import org.jetbrains.plugins.groovy.lang.psi.util.GrClassImplUtil;
import org.jetbrains.plugins.groovy.transformations.TransformationResult;
import org.jetbrains.plugins.groovy.transformations.TransformationUtilKt;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import static com.intellij.psi.util.PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT;
public class GrTypeDefinitionMembersCache<T extends GrTypeDefinition> {
private final SimpleModificationTracker myTreeChangeTracker = new SimpleModificationTracker();
private final T myDefinition;
private final GrCodeMembersProvider<? super T> myCodeMembersProvider;
private final Collection<?> myDependencies = Collections.singletonList(JAVA_STRUCTURE_MODIFICATION_COUNT);
private final Collection<?> myDependencies = Arrays.asList(myTreeChangeTracker, JAVA_STRUCTURE_MODIFICATION_COUNT);
public GrTypeDefinitionMembersCache(@NotNull T definition) {
this(definition, BodyCodeMembersProvider.INSTANCE);
@@ -50,6 +52,10 @@ public class GrTypeDefinitionMembersCache<T extends GrTypeDefinition> {
myCodeMembersProvider = provider;
}
public void dropCaches() {
myTreeChangeTracker.incModificationCount();
}
public GrTypeDefinition[] getCodeInnerClasses() {
return CachedValuesManager.getCachedValue(myDefinition, () -> CachedValueProvider.Result.create(
myCodeMembersProvider.getCodeInnerClasses(myDefinition), myDependencies