{"record":{"id":"98bba3dcda0e0a37","repo":"JetBrains/intellij-community","slug":"reference-is-qualified","errorCode":null,"errorMessage":"Reference is qualified: ","messagePattern":"Reference is qualified: ","errorType":"exception","errorClass":"IncorrectOperationException","httpStatus":null,"severity":"error","filePath":"java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiReferenceExpressionImpl.java","lineNumber":137,"sourceCode":"  private volatile String myCachedQName;\n  private volatile String myCachedNormalizedText;\n\n  public PsiReferenceExpressionImpl() {\n    super(JavaElementType.REFERENCE_EXPRESSION);\n  }\n\n  @Override\n  public PsiExpression getQualifierExpression() {\n    return (PsiExpression)findChildByRoleAsPsiElement(ChildRole.QUALIFIER);\n  }\n\n  @Override\n  public PsiElement bindToElementViaStaticImport(@NotNull PsiClass qualifierClass) throws IncorrectOperationException {\n    String qualifiedName = qualifierClass.getQualifiedName();\n    if (qualifiedName == null) throw new IncorrectOperationException();\n\n    if (getQualifierExpression() != null) {\n      throw new IncorrectOperationException(\"Reference is qualified: \"+getText());\n    }\n    String staticName = getReferenceName();\n    PsiFile containingFile = getContainingFile();\n    PsiImportList importList = null;\n    boolean doImportStatic;\n    if (containingFile instanceof PsiJavaFile) {\n      importList = ((PsiJavaFile)containingFile).getImportList();\n      assert importList != null : containingFile;\n      PsiImportStatementBase singleImportStatement = importList.findSingleImportStatement(staticName);\n      doImportStatic = singleImportStatement == null;\n      if (singleImportStatement instanceof PsiImportStaticStatement) {\n        String qName = qualifierClass.getQualifiedName() + \".\" + staticName;\n        if (qName.equals(singleImportStatement.getImportReference().getQualifiedName())) return this;\n      }\n    }\n    else {\n      doImportStatic = false;\n    }","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/JetBrains/intellij-community/blob/be881553f2a76ac8b4ea53950d93f0de78295c19/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiReferenceExpressionImpl.java#L119-L155","documentation":"PsiReferenceExpressionImpl.bindToElementViaStaticImport rewrites an unqualified static reference (e.g. assertThat(...)) by adding a static import of the member's class and dropping the qualifier. If the reference expression already has a qualifier (FOO.bar), there is nothing meaningful to import — the call throws IncorrectOperationException(\"Reference is qualified: \"+getText()). A null qualifiedName on the class also throws (message-less IncorrectOperationException).","triggerScenarios":"Calling refExpr.bindToElementViaStaticImport(clazz) when refExpr.getQualifierExpression() != null, or when qualifierClass.getQualifiedName() == null (local/anonymous class).","commonSituations":"Java refactoring 'add static import' / migrate qualifier to static import; plugins that auto-static-import assertions and accidentally process already-qualified calls or references resolved to anonymous classes.","solutions":["Guard the call: only invoke when refExpr.getQualifierExpression() == null and qualifierClass.getQualifiedName() != null.","For qualified references, first remove the qualifier (or replace the whole expression with the unqualified name), then bind via static import.","Skip local/anonymous classes — they cannot be static-imported; qualify explicitly instead."],"exampleFix":"// before\nrefExpr.bindToElementViaStaticImport(clazz); // refExpr is 'Assertions.assertEquals' -> throws\n\n// after\nif (refExpr.getQualifierExpression() == null && clazz.getQualifiedName() != null) {\n  refExpr.bindToElementViaStaticImport(clazz);\n} else {\n  // remove qualifier or use fully-qualified name directly\n}","handlingStrategy":"validation","validationCode":"if (refExpr.getQualifierExpression() != null) return; // qualified: cannot static-import\nif (qualifierClass.getQualifiedName() == null) return; // local/anonymous class","typeGuard":"static boolean canBindViaStaticImport(PsiReferenceExpression r, PsiClass c) {\n  return r.getQualifierExpression() == null && c.getQualifiedName() != null;\n}","tryCatchPattern":"try { refExpr.bindToElementViaStaticImport(c); } catch (IncorrectOperationException e) { /* strip qualifier first, then retry */ }","preventionTips":["Only static-import unqualified references.","Skip anonymous/local classes for static imports."],"tags":["java","psi","static-import","references","refactoring"],"backgroundTag":null,"analyzedSha":"be881553f2a76ac8b4ea53950d93f0de78295c19","analyzedAt":"2026-08-14T14:13:06.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}