private Symbol createSymbolInternal(Address address, SymbolPath symbolPath,
			boolean isNewFunctionSignature, String plateAddition) {

		Symbol existingSymbol = program.getSymbolTable().getPrimarySymbol(address);
		if (existingSymbol == null || isNewFunctionSignature) {
			return doCreateSymbol(address, symbolPath, true, plateAddition);
		}
		if (existingSymbol.getSymbolType() == SymbolType.FUNCTION &&
			existingSymbol.getSource() == SourceType.DEFAULT) {
			return doCreateSymbol(address, symbolPath, true, plateAddition);
		}

		Function existingFunction = program.getListing().getFunctionAt(address);
		if (existingFunction != null) { // Maybe I should care if there is a data type there too.
			if (existingFunction.getSignatureSource().isHigherPriorityThan(SourceType.ANALYSIS)) {
				// Existing is USER or IMPORTED
				return doCreateSymbol(address, symbolPath, false, plateAddition);
			}
		}

		if (!existingSymbol.getParentNamespace().equals(program.getGlobalNamespace())) {
			// Existing symbol has a non-global namespace
			if (!preferNewSymbolOverExistingNamespacedSymbol(symbolPath)) {
				return doCreateSymbol(address, symbolPath, false, plateAddition);
			}
		}

		boolean existingIsMangled = isMangled(existingSymbol.getName());
		if (existingIsMangled && !isNewFunctionSignature) {
			// we don't have a new signature, but the existing symbol is mangled, and thus can
			// possibly provide it... so do not make new symbol primary
			return doCreateSymbol(address, symbolPath, false, plateAddition);
		}

		if (symbolPath.getParent() != null) {
			// new symbol has non-global namespace
			return doCreateSymbol(address, symbolPath, true, plateAddition);
		}

		// Both existing and new symbols are in global namespace at this point
		if (isMangled(symbolPath.getName()) && !existingIsMangled) {
			// new symbol is mangled, but don't override existing one if it is mangled
			return doCreateSymbol(address, symbolPath, true, plateAddition);
		}

		return doCreateSymbol(address, symbolPath, false, plateAddition);
	}
Processing non-public, non-global symbols.  User should not then call
{@link #processAllSymbols()}; but has these other methods available to supplement this one:
{@link #processGlobalSymbolsNoTypedefs()} and (@link #processPublicSymbols()}
@throws CancelledException upon user cancellation
@throws PdbException upon issue processing the request
Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/DefaultPdbApplicator.java