test_class.file: php-frontend/src/test/java/org/sonar/php/symbols/FunctionSymbolIndexTest.java
test_class.identifier: FunctionSymbolIndexTest
test_case.body: @Test
    public void global_and_namespace_function() {
      FunctionSymbolData globalA = data("a");
      FunctionSymbolData namespaceA = data("\\namespace\\a");
      FunctionSymbolIndex index = index(globalA, namespaceA);
  
      FunctionSymbol namespaceResult = index.get(qualifiedName("\\namespace\\a"));
      assertThat(namespaceResult.isUnknownSymbol()).isFalse();
  
      FunctionSymbol globalResult = index.get(qualifiedName("a"));
      assertThat(globalResult.isUnknownSymbol()).isFalse();
  
      assertThat(namespaceResult).isNotEqualTo(globalResult);
    }
test_case.class_method_signature: FunctionSymbolIndexTest.global_and_namespace_function()
test_case.full_signature: @Test public void global_and_namespace_function()
test_case.identifier: global_and_namespace_function
test_case.invocations: data data index get qualifiedName isFalse assertThat isUnknownSymbol get qualifiedName isFalse assertThat isUnknownSymbol isNotEqualTo assertThat
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void global_and_namespace_function()
focal_class.declarator: symbolsByQualifiedName = new HashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<QualifiedName, FunctionSymbol> symbolsByQualifiedName = new HashMap<>();
focal_class.type: Map<QualifiedName, FunctionSymbol>
focal_class.var_name: symbolsByQualifiedName
focal_class.declarator: symbolsByData = new HashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<FunctionSymbolData, FunctionSymbol> symbolsByData = new HashMap<>();
focal_class.type: Map<FunctionSymbolData, FunctionSymbol>
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/FunctionSymbolIndex.java
focal_class.identifier: FunctionSymbolIndex
focal_class.class_method_signature: FunctionSymbolIndex.FunctionSymbolIndex(ProjectSymbolData projectSymbolData)
focal_class.full_signature: public  FunctionSymbolIndex(ProjectSymbolData projectSymbolData)
focal_class.identifier: FunctionSymbolIndex
focal_class.modifiers: public
focal_class.parameters: (ProjectSymbolData projectSymbolData)
focal_class.signature:  FunctionSymbolIndex(ProjectSymbolData projectSymbolData)
focal_class.class_method_signature: FunctionSymbolIndex.create(Set<FunctionSymbolData> fileDeclarations, ProjectSymbolData projectSymbolData)
focal_class.full_signature: public static FunctionSymbolIndex create(Set<FunctionSymbolData> fileDeclarations, ProjectSymbolData projectSymbolData)
focal_class.identifier: create
focal_class.modifiers: public static
focal_class.parameters: (Set<FunctionSymbolData> fileDeclarations, ProjectSymbolData projectSymbolData)
focal_class.return: FunctionSymbolIndex
focal_class.signature: FunctionSymbolIndex create(Set<FunctionSymbolData> fileDeclarations, ProjectSymbolData projectSymbolData)
focal_class.class_method_signature: FunctionSymbolIndex.init(Set<FunctionSymbolData> fileDeclarations)
focal_class.full_signature: private void init(Set<FunctionSymbolData> fileDeclarations)
focal_class.identifier: init
focal_class.modifiers: private
focal_class.parameters: (Set<FunctionSymbolData> fileDeclarations)
focal_class.return: void
focal_class.signature: void init(Set<FunctionSymbolData> fileDeclarations)
focal_class.class_method_signature: FunctionSymbolIndex.get(QualifiedName qualifiedName)
focal_class.full_signature: public FunctionSymbol get(QualifiedName qualifiedName)
focal_class.identifier: get
focal_class.modifiers: public
focal_class.parameters: (QualifiedName qualifiedName)
focal_class.return: FunctionSymbol
focal_class.signature: FunctionSymbol get(QualifiedName qualifiedName)
focal_class.class_method_signature: FunctionSymbolIndex.get(FunctionSymbolData symbolData)
focal_class.full_signature: public FunctionSymbol get(FunctionSymbolData symbolData)
focal_class.identifier: get
focal_class.modifiers: public
focal_class.parameters: (FunctionSymbolData symbolData)
focal_class.return: FunctionSymbol
focal_class.signature: FunctionSymbol get(FunctionSymbolData symbolData)
focal_method.body: public FunctionSymbol get(QualifiedName qualifiedName) {
      return symbolsByQualifiedName.computeIfAbsent(qualifiedName, qn -> {
        List<FunctionSymbolData> all = projectSymbolData.functionSymbolData(qn);
        if (all.size() == 1) {
          return new FunctionSymbolImpl(all.get(0));
        } else {
          return new UnknownFunctionSymbol(qualifiedName);
        }
      });
    }
focal_method.class_method_signature: FunctionSymbolIndex.get(QualifiedName qualifiedName)
focal_method.full_signature: public FunctionSymbol get(QualifiedName qualifiedName)
focal_method.identifier: get
focal_method.invocations: computeIfAbsent functionSymbolData size get
focal_method.modifiers: public
focal_method.parameters: (QualifiedName qualifiedName)
focal_method.return: FunctionSymbol
focal_method.signature: FunctionSymbol get(QualifiedName qualifiedName)