@Override public void visitElement(@NotNull PsiElement o) { for (PsiReference reference : o.getReferences()) { reference.resolve(); } } });
@Nullable @Override public PsiElement resolveInner() { if (reference != null) { try { // This try catch is added to handle any issues which occur due to user repo changes. return reference.resolve(); } catch (Exception e) { LOGGER.debug(e.getMessage(), e); } } return null; }
@Nullable public static PsiElement resolve(@NotNull GoTypeReferenceExpression o) { // todo: replace with default method in GoReferenceExpressionBase return o.getReference().resolve(); }
@Nullable public static PsiElement resolve(@NotNull GoFieldName o) { // todo: replace with default method in GoReferenceExpressionBase return o.getReference().resolve(); }
private boolean slowExecute(@NotNull AtNonNumericOperation atNonNumericOperation, @NotNull PsiReference reference) { PsiElement target = reference.resolve(); boolean keepProcessing = true; if (target != null) { keepProcessing = slowExecute(atNonNumericOperation, target); } return keepProcessing; }
public static boolean hasNonNewVariables(@NotNull List<GoVarDefinition> list) { if (list.isEmpty()) return false; for (GoVarDefinition def : list) { if (def.isBlank()) continue; PsiReference reference = def.getReference(); if (reference == null || reference.resolve() == null) return false; } return true; }
@Nullable public static PsiElement getBreakStatementOwnerOrResolve(@NotNull GoBreakStatement breakStatement) { GoLabelRef label = breakStatement.getLabelRef(); if (label != null) { return label.getReference().resolve(); } return GoPsiImplUtil.getBreakStatementOwner(breakStatement); }
@Override public boolean isAvailable(@NotNull Project project, @NotNull PsiFile file, @NotNull PsiElement startElement, @NotNull PsiElement endElement) { PsiReference reference = getReference(startElement); return file instanceof GoFile && file.getManager().isInProject(file) && reference != null && reference.resolve() == null && !getImportPathVariantsToImport(startElement).isEmpty() && notQualified(startElement); }
@Override public void visitLabelRef(@NotNull GoLabelRef o) { PsiReference reference = o.getReference(); String name = o.getText(); if (reference.resolve() == null) { holder.registerProblem(o, "Unresolved label " + "'" + name + "'", LIKE_UNKNOWN_SYMBOL); } }
private boolean processSelector(@NotNull GoSelectorExpr parent, @NotNull GoScopeProcessor processor, @NotNull ResolveState state, @Nullable PsiElement another) { List<GoExpression> list = parent.getExpressionList(); if (list.size() > 1 && list.get(1).isEquivalentTo(another)) { GoExpression e = list.get(0); List<GoReferenceExpression> refs = ContainerUtil.newArrayList(PsiTreeUtil.findChildrenOfType(e, GoReferenceExpression.class)); GoExpression o = refs.size() > 1 ? refs.get(refs.size() - 1) : e; PsiReference ref = o.getReference(); PsiElement resolve = ref != null ? ref.resolve() : null; if (resolve == o) return processor.execute(myElement, state); // var c = C.call(); c.a.b.d; GoType type = e.getGoType(createContextOnElement(myElement)); if (type != null && !processGoType(type, processor, state)) return false; } return true; }
private static boolean stdLibCall(@NotNull GoCallExpr o, @NotNull String name) { GoExpression e = o.getExpression(); if (e.textMatches(name) && e instanceof GoReferenceExpression) { PsiReference reference = e.getReference(); PsiElement resolve = reference != null ? reference.resolve() : null; if (!(resolve instanceof GoFunctionDeclaration)) return false; return isBuiltinFile(resolve.getContainingFile()); } return false; }
@Nullable public static PsiElement resolveTypeToDefinition(@NotNull BallerinaTypeName typeName) { return CachedValuesManager.getCachedValue(typeName, () -> { PsiReference reference = typeName.findReferenceAt(typeName.getTextLength()); if (reference == null) { return CachedValueProvider.Result.create(null, typeName); } return CachedValueProvider.Result.create(reference.resolve(), typeName); }); }
@Nullable private static String resolve(@NotNull GoExpression argument) { String argumentValue = getValue(argument); if (argumentValue != null) { return argumentValue; } PsiReference reference = argument.getReference(); PsiElement resolved = reference != null ? reference.resolve() : null; String value = null; if (resolved instanceof GoVarDefinition) { value = getValue(((GoVarDefinition)resolved).getValue()); } else if (resolved instanceof GoConstDefinition) { value = getValue(((GoConstDefinition)resolved).getValue()); } return value; }
@Override public void visitElement(@NotNull PsiElement o) { for (PsiReference reference : o.getReferences()) { reference.resolve(); } super.visitElement(o); } });
@Override public void visitCallExpr(@NotNull GoCallExpr o) { PsiReference psiReference = o.getExpression().getReference(); PsiElement resolved = psiReference != null ? psiReference.resolve() : null; if (!(resolved instanceof GoFunctionOrMethodDeclaration)) return; String functionName = StringUtil.toLowerCase(((GoFunctionOrMethodDeclaration)resolved).getName()); if (functionName == null) return; if (GoPlaceholderChecker.isFormattingFunction(functionName)) { checkPrintf(holder, o, (GoFunctionOrMethodDeclaration)resolved); } else if (GoPlaceholderChecker.isPrintingFunction(functionName)) { checkPrint(holder, o, (GoFunctionOrMethodDeclaration)resolved); } } };
private void assertResolvedNameArityRange(@NotNull PsiElement element, @NotNull String name, int arity) { PsiReference reference = element.getReference(); assertNotNull(reference); PsiElement resolved = reference.resolve(); assertNotNull(resolved); assertInstanceOf(resolved, Call.class); Call maybeDefCall = (Call) resolved; assertTrue(CallDefinitionClause.is(maybeDefCall)); assertEquals(new NameArityRange(name, new IntRange(arity, arity)), nameArityRange(maybeDefCall)); } }
private void doResolveTest() { if (myReference == null) fail("no reference defined in test case"); if (myShouldBeResolved && !allowNullDefinition() && myDefinition == null) fail("no definition defined in test case"); PsiElement resolve = myReference.resolve(); if (myShouldBeResolved) { assertNotNull("cannot resolve reference " + myReference.getCanonicalText(), resolve); if (myDefinition != null) { PsiElement def = PsiTreeUtil.getParentOfType(myDefinition, resolve.getClass(), false); assertSame("element resolved in non-expected element from " + getFileName(resolve) + ":\n" + resolve.getText(), def, resolve); } } else if (resolve != null) { fail("element is resolved but it wasn't should. resolved to element from " + getFileName(resolve) + ":\n" + resolve.getText()); } }
public void testSdkTestDataDirectory() { myFixture.configureByText("a.go", "package a; import `doc/testdata`; func _() { println(pkg.ExportedConst<caret>ant) } "); PsiReference reference = myFixture.getFile().findReferenceAt(myFixture.getCaretOffset()); PsiElement resolve = reference != null ? reference.resolve() : null; assertNotNull(resolve); assertEquals("pkg.go", resolve.getContainingFile().getName()); assertEmpty(myFixture.findUsages(resolve)); }
public void testFieldInInitializer() { myFixture.configureByText("a.go", "package main\n" + "type aStruct struct {\n" + "\taField string\n" + "}\n" + "func newStruct() aStruct {\n" + "\treturn aStruct{\n" + "\t\taFie<caret>ld: \"a value\",\n" + "\t}\n" + "}"); PsiElement element = myFixture.getFile().findElementAt(myFixture.getCaretOffset()); GoFieldName goFieldName = PsiTreeUtil.getNonStrictParentOfType(element, GoFieldName.class); assertNotNull(goFieldName); //noinspection ConstantConditions assertEquals(Write, ReadWriteAccessDetector.findDetector(goFieldName.getReference().resolve()).getExpressionAccess(goFieldName)); }
@SuppressWarnings("ConstantConditions") public void testDoNotReportNonLastMultiResolvedImport() { myFixture.addFileToProject("root1/src/to_import/unique/foo.go", "package unique; func Foo() {}"); myFixture.addFileToProject("root1/src/to_import/shared/a.go", "package shared"); myFixture.addFileToProject("root2/src/to_import/shared/a.go", "package shared"); GoModuleLibrariesService.getInstance(myFixture.getModule()).setLibraryRootUrls(myFixture.findFileInTempDir("root1").getUrl(), myFixture.findFileInTempDir("root2").getUrl()); doTest(); PsiReference reference = myFixture.getFile().findReferenceAt(myFixture.getCaretOffset()); PsiElement resolve = reference.resolve(); assertInstanceOf(resolve, PsiDirectory.class); assertTrue(((PsiDirectory)resolve).getVirtualFile().getPath().endsWith("root1/src/to_import/shared")); GoModuleLibrariesService.getInstance(myFixture.getModule()).setLibraryRootUrls(myFixture.findFileInTempDir("root2").getUrl(), myFixture.findFileInTempDir("root1").getUrl()); reference = myFixture.getFile().findReferenceAt(myFixture.getCaretOffset()); resolve = reference.resolve(); assertInstanceOf(resolve, PsiDirectory.class); assertTrue(((PsiDirectory)resolve).getVirtualFile().getPath().endsWith("root2/src/to_import/shared")); }