#vulnerable code 
                              public static Map<ClassSymbolData, ClassSymbol> createSymbols(Set<ClassSymbolData> fileDeclarations, ProjectSymbolData projectSymbolData) {
    Map<ClassSymbolData, ClassSymbolImpl> symbolsByData = new HashMap<>();
    Map<ClassSymbolData, ClassSymbol> result = new HashMap<>();
    Deque<ClassSymbolData> toComplete = new ArrayDeque<>();
    Map<QualifiedName, ClassSymbolImpl> symbolsByQualifiedName = new HashMap<>();
    fileDeclarations.forEach(data -> {
      ClassSymbolImpl symbol = new ClassSymbolImpl(data.qualifiedName());
      result.put(data, symbol);
      toComplete.push(data);
      symbolsByQualifiedName.put(symbol.qualifiedName, symbol);
      symbolsByData.put(data, symbol);
    });

    while (!toComplete.isEmpty()) {
      ClassSymbolData data = toComplete.pop();
      Optional<QualifiedName> superClassName = data.superClass();
      if (superClassName.isPresent()) {
        ClassSymbolImpl superClass = symbolsByQualifiedName.get(superClassName.get());
        if (superClass == null) {
          Optional<ClassSymbolData> superClassData = projectSymbolData.classSymbolData(superClassName.get());
          if (superClassData.isPresent()) {
            superClass = new ClassSymbolImpl(superClassName.get());
            toComplete.push(superClassData.get());
            symbolsByQualifiedName.put(superClassName.get(), superClass);
            symbolsByData.put(superClassData.get(), superClass);
          }
        }
        symbolsByData.get(data).superClass = superClass == null ? UnknownClassSymbol.UNKNOWN : superClass;
      }
    }

    return result;
  } 
                            #location 28 
                            #vulnerability type NULL_DEREFERENCE
#fixed code
                              public static Map<ClassSymbolData, ClassSymbol> createSymbols(Set<ClassSymbolData> fileDeclarations, ProjectSymbolData projectSymbolData) {
    Map<ClassSymbolData, ClassSymbolImpl> symbolsByData = new HashMap<>();
    Map<ClassSymbolData, ClassSymbol> result = new HashMap<>();
    Deque<ClassSymbolData> toComplete = new ArrayDeque<>();
    Map<QualifiedName, ClassSymbolImpl> symbolsByQualifiedName = new HashMap<>();
    fileDeclarations.forEach(data -> {
      ClassSymbolImpl symbol = new ClassSymbolImpl(data.location(), data.qualifiedName());
      result.put(data, symbol);
      toComplete.push(data);
      symbolsByQualifiedName.put(symbol.qualifiedName, symbol);
      symbolsByData.put(data, symbol);
    });

    while (!toComplete.isEmpty()) {
      ClassSymbolData data = toComplete.pop();
      Optional<QualifiedName> superClassName = data.superClass();
      if (superClassName.isPresent()) {
        ClassSymbolImpl superClass = symbolsByQualifiedName.get(superClassName.get());
        if (superClass == null) {
          Optional<ClassSymbolData> superClassData = projectSymbolData.classSymbolData(superClassName.get());
          if (superClassData.isPresent()) {
            superClass = new ClassSymbolImpl(superClassData.get().location(), superClassName.get());
            toComplete.push(superClassData.get());
            symbolsByQualifiedName.put(superClassName.get(), superClass);
            symbolsByData.put(superClassData.get(), superClass);
          }
        }
        symbolsByData.get(data).superClass = superClass == null ? UnknownClassSymbol.UNKNOWN : superClass;
      }
    }

    return result;
  }