test_class.file: php-frontend/src/test/java/org/sonar/php/symbols/ClassSymbolIndexTest.java
test_class.identifier: ClassSymbolIndexTest
test_case.body: @Test
    public void get_by_qualified_name() {
      ClassSymbolData a = data("ns1\\a", "ns1\\c");
      ClassSymbolData b = data("ns1\\b", "ns1\\c");
      ClassSymbolData c = data("ns1\\c");
      ClassSymbolIndex symbols = createSymbols(projectData(a), b, c);
      assertThat(symbols.get(a)).isNull();
      assertThat(symbols.get(b.qualifiedName())).isSameAs(symbols.get(b));
      assertThat(symbols.get(a.qualifiedName()).superClass()).containsSame(symbols.get(c));
  
      assertThat(symbols.get(qualifiedName("unknown")).isUnknownSymbol()).isTrue();
      assertThat(symbols.get(qualifiedName("unknown"))).isSameAs(symbols.get(qualifiedName("unknown")));
      assertThat(symbols.get(qualifiedName("unknown"))).isNotEqualTo(symbols.get(qualifiedName("otherunknown")));
    }
test_case.class_method_signature: ClassSymbolIndexTest.get_by_qualified_name()
test_case.full_signature: @Test public void get_by_qualified_name()
test_case.identifier: get_by_qualified_name
test_case.invocations: data data data createSymbols projectData isNull assertThat get isSameAs assertThat get qualifiedName get containsSame assertThat superClass get qualifiedName get isTrue assertThat isUnknownSymbol get qualifiedName isSameAs assertThat get qualifiedName get qualifiedName isNotEqualTo assertThat get qualifiedName get qualifiedName
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void get_by_qualified_name()
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)