test_class.file: php-frontend/src/test/java/org/sonar/php/symbols/ClassSymbolIndexTest.java
test_class.identifier: ClassSymbolIndexTest
test_case.body: @Test
    public void superclass_in_current_file() {
      ClassSymbolData a = data("ns1\\a");
      ClassSymbolData b = data("ns1\\b", "ns1\\a");
      ClassSymbolIndex symbols = createSymbols(a, b);
      assertThat(symbols.get(a).superClass()).isEmpty();
      assertThat(symbols.get(b).superClass()).containsSame(symbols.get(a));
    }
test_case.class_method_signature: ClassSymbolIndexTest.superclass_in_current_file()
test_case.full_signature: @Test public void superclass_in_current_file()
test_case.identifier: superclass_in_current_file
test_case.invocations: data data createSymbols isEmpty assertThat superClass get containsSame assertThat superClass get get
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void superclass_in_current_file()
focal_class.declarator: symbolsByQualifiedName = new HashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<QualifiedName, ClassSymbol> symbolsByQualifiedName = new HashMap<>();
focal_class.type: Map<QualifiedName, ClassSymbol>
focal_class.var_name: symbolsByQualifiedName
focal_class.declarator: symbolsByData = new HashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<ClassSymbolData, ClassSymbolImpl> symbolsByData = new HashMap<>();
focal_class.type: Map<ClassSymbolData, ClassSymbolImpl>
focal_class.var_name: symbolsByData
focal_class.declarator: projectSymbolData
focal_class.modifier: private final
focal_class.original_string: private final ProjectSymbolData projectSymbolData;
focal_class.type: ProjectSymbolData
focal_class.var_name: projectSymbolData
focal_class.file: php-frontend/src/main/java/org/sonar/php/symbols/ClassSymbolIndex.java
focal_class.identifier: ClassSymbolIndex
focal_class.class_method_signature: ClassSymbolIndex.ClassSymbolIndex(ProjectSymbolData projectSymbolData)
focal_class.full_signature: private  ClassSymbolIndex(ProjectSymbolData projectSymbolData)
focal_class.identifier: ClassSymbolIndex
focal_class.modifiers: private
focal_class.parameters: (ProjectSymbolData projectSymbolData)
focal_class.signature:  ClassSymbolIndex(ProjectSymbolData projectSymbolData)
focal_class.class_method_signature: ClassSymbolIndex.create(Set<ClassSymbolData> fileDeclarations, ProjectSymbolData projectSymbolData)
focal_class.full_signature: public static ClassSymbolIndex create(Set<ClassSymbolData> fileDeclarations, ProjectSymbolData projectSymbolData)
focal_class.identifier: create
focal_class.modifiers: public static
focal_class.parameters: (Set<ClassSymbolData> fileDeclarations, ProjectSymbolData projectSymbolData)
focal_class.return: ClassSymbolIndex
focal_class.signature: ClassSymbolIndex create(Set<ClassSymbolData> fileDeclarations, ProjectSymbolData projectSymbolData)
focal_class.class_method_signature: ClassSymbolIndex.get(QualifiedName qualifiedName)
focal_class.full_signature: public ClassSymbol get(QualifiedName qualifiedName)
focal_class.identifier: get
focal_class.modifiers: public
focal_class.parameters: (QualifiedName qualifiedName)
focal_class.return: ClassSymbol
focal_class.signature: ClassSymbol get(QualifiedName qualifiedName)
focal_class.class_method_signature: ClassSymbolIndex.get(ClassSymbolData classSymbolData)
focal_class.full_signature: public ClassSymbol get(ClassSymbolData classSymbolData)
focal_class.identifier: get
focal_class.modifiers: public
focal_class.parameters: (ClassSymbolData classSymbolData)
focal_class.return: ClassSymbol
focal_class.signature: ClassSymbol get(ClassSymbolData classSymbolData)
focal_class.class_method_signature: ClassSymbolIndex.init(Set<ClassSymbolData> fileDeclarations)
focal_class.full_signature: private void init(Set<ClassSymbolData> fileDeclarations)
focal_class.identifier: init
focal_class.modifiers: private
focal_class.parameters: (Set<ClassSymbolData> fileDeclarations)
focal_class.return: void
focal_class.signature: void init(Set<ClassSymbolData> fileDeclarations)
focal_method.body: public ClassSymbol get(QualifiedName qualifiedName) {
      return symbolsByQualifiedName.computeIfAbsent(qualifiedName, qn ->
        projectSymbolData.classSymbolData(qn)
          .<ClassSymbol>map(ClassSymbolImpl::new)
          .orElse(new UnknownClassSymbol(qualifiedName)));
    }
focal_method.class_method_signature: ClassSymbolIndex.get(QualifiedName qualifiedName)
focal_method.full_signature: public ClassSymbol get(QualifiedName qualifiedName)
focal_method.identifier: get
focal_method.invocations: computeIfAbsent orElse map classSymbolData
focal_method.modifiers: public
focal_method.parameters: (QualifiedName qualifiedName)
focal_method.return: ClassSymbol
focal_method.signature: ClassSymbol get(QualifiedName qualifiedName)