JetBrains/intellij-community · error · ConfigurationException

''{0}'' does not exist

Error message

''{0}'' does not exist

What it means

Thrown by IntroduceParameterObjectDialog.canRun() (IntroduceParameterObjectDialog.java:507) in the 'Use existing class' branch when the qualified name is syntactically valid but JavaPsiFacade.findClass(name, GlobalSearchScope.allScope(project)) returns null — no such class resolvable on the project classpath (production + library sources). The refactoring needs a real class to add fields/setters to, so an unresolvable target aborts.

Source

Thrown at java/java-impl-refactorings/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectDialog.java:507

      if (className.isEmpty() || !nameHelper.isIdentifier(className)) {
        throw new ConfigurationException(
          JavaRefactoringBundle.message("introduce.parameter.object.error.invalid.parameter.class.name", className));
      }
      final String packageName = getPackageName();

      if (packageName.isEmpty() || !nameHelper.isQualifiedName(packageName)) {
        throw new ConfigurationException(
          JavaRefactoringBundle.message("introduce.parameter.object.error.invalid.parameter.class.package.name", packageName));
      }
    }
    else {
      final String className = getExistingClassName();
      if (className.isEmpty() || !nameHelper.isQualifiedName(className)) {
        throw new ConfigurationException(
          JavaRefactoringBundle.message("introduce.parameter.object.error.invalid.qualified.parameter.class.name", className));
      }
      if (JavaPsiFacade.getInstance(getProject()).findClass(className, GlobalSearchScope.allScope(getProject())) == null) {
        throw new ConfigurationException(JavaRefactoringBundle.message("introduce.parameter.object.error.class.does.not.exist", className));
      }
    }
  }

  private @NotNull String getInnerClassName() {
    return myInnerClassNameTextField.getText().trim();
  }

  public @NotNull String getPackageName() {
    return packageTextField.getText().trim();
  }

  public @NotNull String getExistingClassName() {
    return existingClassField.getText().trim();
  }

  public @NotNull String getClassName() {
    return classNameField.getText().trim();

View on GitHub (pinned to be881553f2)

Solutions

  1. Fix the name/package typo — use the class browser (...) to pick the class instead of typing.
  2. Add the module/library containing the class to the current module's dependencies (File | Project Structure | Modules | Dependencies).
  3. If the class was just created or pulled, wait for indexing to finish or File | Invalidate Caches and restart to refresh the index.
  4. Verify with JavaPsiFacade.getInstance(project).findClass(fqn, GlobalSearchScope.allScope(project)) != null before confirming.

Example fix

// before
JavaPsiFacade.getInstance(project)
  .findClass("com.acme.paramz.RequestParams", GlobalSearchScope.allScope(project)); // null -> error

// after
PsiClass cls = JavaPsiFacade.getInstance(project)
  .findClass("com.acme.params.RequestParams", GlobalSearchScope.allScope(project));
if (cls == null) { /* fix dependency or name before running refactoring */ }
Defensive patterns

Strategy: validation

Validate before calling

String fqn = getExistingClassName().trim();
PsiClass existing = JavaPsiFacade.getInstance(project)
    .findClass(fqn, GlobalSearchScope.allScope(project));
if (existing == null) {
  // resolve failure: fix dependencies/index before running Introduce Parameter Object
}

Type guard

boolean resolves(String fqn, Project project) {
  if (fqn == null || fqn.isEmpty()) return false;
  if (!PsiNameHelper.getInstance(project).isQualifiedName(fqn)) return false;
  return JavaPsiFacade.getInstance(project)
      .findClass(fqn, GlobalSearchScope.allScope(project)) != null;
}

Prevention

When it happens

Trigger: Typing a qualified name of a class that is not on the module dependency graph: wrong package prefix, class lives in a module not a dependency of the current one, a library without sources resolved only in a narrower scope, or a simple typo.

Common situations: Splitting a multi-module project and the parameter-object class sits in another module; class exists only in test sources while searched scope resolves production; third-party class whose artifact was removed after a dependency cleanup; stale index after big VCS updates.

Related errors


AI-assisted analysis of JetBrains/intellij-community@be881553f2 (2026-08-14). Data as JSON: /api/errors/6cafbc428723dcbc. Report an issue: GitHub.