use of com.google.idea.blaze.base.lang.buildfile.psi.FuncallExpression in project intellij by bazelbuild.
the class BuildFileModifierImpl method createRule.
private PsiElement createRule(Project project, Kind ruleKind, String ruleName) {
String text = Joiner.on("\n").join(ruleKind.toString() + "(", " name = \"" + ruleName + "\"", ")");
Expression expr = BuildElementGenerator.getInstance(project).createExpressionFromText(text);
assert (expr instanceof FuncallExpression);
return expr;
}
use of com.google.idea.blaze.base.lang.buildfile.psi.FuncallExpression in project intellij by bazelbuild.
the class BlazeGoGotoDeclarationHandlerTest method testResolveGoDirectories.
@Test
public void testResolveGoDirectories() {
TargetMap targetMap = TargetMapBuilder.builder().addTarget(TargetIdeInfo.builder().setBuildFile(src("foo/bar/BUILD")).setLabel("//foo/bar:binary").setKind("go_binary").addSource(src("foo/bar/binary.go")).addDependency("//one/two:library").setGoInfo(GoIdeInfo.builder().addSources(ImmutableList.of(src("foo/bar/binary.go"))).setImportPath("prefix/foo/bar/binary"))).addTarget(TargetIdeInfo.builder().setBuildFile(src("one/two/BUILD")).setLabel("//one/two:library").setKind("go_library").addSource(src("one/two/library.go")).setGoInfo(GoIdeInfo.builder().addSources(ImmutableList.of(src("one/two/library.go"))).setImportPath("prefix/one/two/library"))).build();
BlazeProjectData projectData = new BlazeProjectData(0L, targetMap, null, null, new WorkspacePathResolverImpl(workspaceRoot), location -> workspaceRoot.fileForPath(new WorkspacePath(location.getRelativePath())), new WorkspaceLanguageSettings(WorkspaceType.GO, ImmutableSet.of(LanguageClass.GO)), null, null);
registerProjectService(BlazeProjectDataManager.class, new MockBlazeProjectDataManager(projectData));
GoFile fooBarBinary = (GoFile) workspace.createPsiFile(new WorkspacePath("foo/bar/binary.go"), "package main", "import \"p<caret>refix/one<caret>/<caret>two/lib<caret>rary\"", "func foo(a library.One<caret>Two) {}", "func main() {}");
GoFile oneTwoLibrary = (GoFile) workspace.createPsiFile(new WorkspacePath("one/two/library.go"), "package library", "type OneTwo struct {}");
GoTypeSpec oneTwoStruct = PsiTreeUtil.findChildOfType(oneTwoLibrary, GoTypeSpec.class);
PsiDirectory oneTwoDirectory = oneTwoLibrary.getParent();
assertThat(oneTwoDirectory).isNotNull();
PsiDirectory oneDirectory = oneTwoDirectory.getParent();
assertThat(oneDirectory).isNotNull();
BuildFile oneTwoBUILD = (BuildFile) workspace.createPsiFile(new WorkspacePath("one/two/BUILD"), "go_library(", " name = 'library',", " srcs = ['library.go'],", ")");
FuncallExpression oneTwoLibraryRule = PsiUtils.findFirstChildOfClassRecursive(oneTwoBUILD, FuncallExpression.class);
BlazeGoRootsProvider.createGoPathSourceRoot(getProject(), projectData);
testFixture.configureFromExistingVirtualFile(fooBarBinary.getVirtualFile());
List<Caret> carets = testFixture.getEditor().getCaretModel().getAllCarets();
assertThat(carets).hasSize(5);
PsiElement gotoPrefix = GotoDeclarationAction.findTargetElement(getProject(), testFixture.getEditor(), carets.get(0).getOffset());
assertThat(gotoPrefix).isEqualTo(oneTwoLibraryRule);
PsiElement gotoOne = GotoDeclarationAction.findTargetElement(getProject(), testFixture.getEditor(), carets.get(1).getOffset());
assertThat(gotoOne).isEqualTo(oneDirectory);
PsiElement gotoTwo = GotoDeclarationAction.findTargetElement(getProject(), testFixture.getEditor(), carets.get(2).getOffset());
assertThat(gotoTwo).isEqualTo(oneTwoDirectory);
PsiElement gotoLibrary = GotoDeclarationAction.findTargetElement(getProject(), testFixture.getEditor(), carets.get(3).getOffset());
assertThat(gotoLibrary).isEqualTo(oneTwoLibraryRule);
PsiElement gotoOneTwoType = GotoDeclarationAction.findTargetElement(getProject(), testFixture.getEditor(), carets.get(4).getOffset());
assertThat(gotoOneTwoType).isEqualTo(oneTwoStruct);
}
use of com.google.idea.blaze.base.lang.buildfile.psi.FuncallExpression in project intellij by bazelbuild.
the class BlazeGoTestEventsHandlerTest method testSuiteLocationResolvesToBuildRule.
@Test
public void testSuiteLocationResolvesToBuildRule() {
TargetMap targetMap = TargetMapBuilder.builder().addTarget(TargetIdeInfo.builder().setLabel("//foo/bar:foo_test").setKind("go_test").setBuildFile(src("foo/bar/BUILD")).addSource(src("foo/bar/foo_test.go")).addSource(src("foo/bar/bar_test.go")).setGoInfo(GoIdeInfo.builder().addSources(ImmutableList.of(src("foo/bar/foo_test.go"))).addSources(ImmutableList.of(src("foo/bar/bar_test.go"))).setImportPath("google3/foo/bar/foo"))).build();
registerProjectService(BlazeProjectDataManager.class, new MockBlazeProjectDataManager(new BlazeProjectData(0L, targetMap, null, null, new WorkspacePathResolverImpl(workspaceRoot), location -> workspaceRoot.fileForPath(new WorkspacePath(location.getRelativePath())), new WorkspaceLanguageSettings(WorkspaceType.GO, ImmutableSet.of(LanguageClass.GO)), null, null)));
workspace.createFile(new WorkspacePath("foo/bar/foo_test.go"), "package foo", "import \"testing\"", "func TestFoo(t *testing.T) {}");
workspace.createFile(new WorkspacePath("foo/bar/bar_test.go"), "package foo", "import \"testing\"", "func TestBar(t *testing.T) {}");
BuildFile buildFile = (BuildFile) workspace.createPsiFile(new WorkspacePath("foo/bar/BUILD"), "go_test(", " name = 'foo_test',", " srcs = [", " 'foo_test.go',", " 'bar_test.go',", " ],", ")");
FuncallExpression buildRule = PsiUtils.findFirstChildOfClassRecursive(buildFile, FuncallExpression.class);
assertThat(buildRule).isNotNull();
String url = handler.suiteLocationUrl(null, "foo/bar/foo_test");
Location<?> location = getLocation(url);
assertThat(location).isNotNull();
assertThat(location.getPsiElement()).isEqualTo(buildRule);
}
use of com.google.idea.blaze.base.lang.buildfile.psi.FuncallExpression in project intellij by bazelbuild.
the class BlazeGoTestLocator method findTestPackage.
/**
* @param path for "//foo/bar:baz" would be "foo/bar/baz".
*/
@SuppressWarnings("rawtypes")
private static List<Location> findTestPackage(Project project, String path) {
TargetIdeInfo target = getGoTestTarget(project, path);
if (target == null) {
return ImmutableList.of();
}
// Exactly one source file, we'll go to the file.
if (target.sources.size() == 1) {
List<VirtualFile> goFiles = getGoFiles(project, target);
if (!goFiles.isEmpty()) {
PsiFile psiFile = PsiManager.getInstance(project).findFile(goFiles.get(0));
if (psiFile != null) {
return ImmutableList.of(new PsiLocation<>(psiFile));
}
}
}
// More than one source file or we failed to get one source file, we'll point to the rule.
PsiElement rule = BuildReferenceManager.getInstance(project).resolveLabel(target.key.label);
if (!(rule instanceof FuncallExpression)) {
return ImmutableList.of();
}
Kind kind = ((FuncallExpression) rule).getRuleKind();
if (kind != null && kind.languageClass.equals(LanguageClass.GO) && kind.ruleType.equals(RuleType.TEST)) {
return ImmutableList.of(new PsiLocation<>(rule));
}
return ImmutableList.of();
}
Aggregations