Fix rule not being added to newly-created package
Need to refresh the VFS prior to retrieving the
VirtualFile.
BUG=30085970
Change-Id: Idf220fafe52c1f855209bb25e66b7edac1b9d607
diff --git a/blaze-base/src/com/google/idea/blaze/base/lang/buildfile/actions/BuildFileModifierImpl.java b/blaze-base/src/com/google/idea/blaze/base/lang/buildfile/actions/BuildFileModifierImpl.java
index b8b7d36..e455a6e 100644
--- a/blaze-base/src/com/google/idea/blaze/base/lang/buildfile/actions/BuildFileModifierImpl.java
+++ b/blaze-base/src/com/google/idea/blaze/base/lang/buildfile/actions/BuildFileModifierImpl.java
@@ -16,6 +16,7 @@
package com.google.idea.blaze.base.lang.buildfile.actions;
import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableList;
import com.google.idea.blaze.base.buildmodifier.BuildFileModifier;
import com.google.idea.blaze.base.lang.buildfile.psi.BuildFile;
import com.google.idea.blaze.base.lang.buildfile.psi.Expression;
@@ -28,8 +29,12 @@
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Computable;
+import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.psi.PsiElement;
+import java.io.File;
+
/**
* Implementation of BuildFileModifier. Modifies the PSI tree directly.
*/
@@ -42,15 +47,21 @@
BlazeContext context,
Label newRule,
Kind ruleKind) {
- BuildFile buildFile = BuildReferenceManager.getInstance(project).resolveBlazePackage(newRule.blazePackage());
- if (buildFile == null) {
- LOG.error("No BUILD file found at location: " + newRule.blazePackage());
- return false;
- }
- WriteCommandAction.runWriteCommandAction(project, () -> {
+ return WriteCommandAction.runWriteCommandAction(project, (Computable<Boolean>) () -> {
+ BuildReferenceManager manager = BuildReferenceManager.getInstance(project);
+ File file = manager.resolvePackage(newRule.blazePackage());
+ if (file == null) {
+ return null;
+ }
+ LocalFileSystem.getInstance().refreshIoFiles(ImmutableList.of(file));
+ BuildFile buildFile = manager.resolveBlazePackage(newRule.blazePackage());
+ if (buildFile == null) {
+ LOG.error("No BUILD file found at location: " + newRule.blazePackage());
+ return false;
+ }
buildFile.add(createRule(project, ruleKind, newRule.ruleName().toString()));
+ return true;
});
- return true;
}
private PsiElement createRule(Project project, Kind ruleKind, String ruleName) {