private boolean createPointer(Program program, Address address, long maximumDataTypeSize) {

		if (maximumDataTypeSize < address.getPointerSize()) {
			return false;
		}

		PseudoDisassembler pdis = new PseudoDisassembler(program);
		Address indirectAddress = pdis.getIndirectAddr(address);
		if (indirectAddress == null) {
			return false;
		}

		if (!program.getMemory().contains(indirectAddress)) {
			return false;
		}

		SymbolTable symbolTable = program.getSymbolTable();
		Symbol primarySymbol = symbolTable.getPrimarySymbol(indirectAddress);
		if (primarySymbol != null && primarySymbol.getSource() != SourceType.DEFAULT) {
			return createPointer(program, address);
		}

		Listing listing = program.getListing();
		Data data = listing.getDataAt(indirectAddress);
		if (data != null && data.isDefined()) {
			return createPointer(program, address);
		}

		return false;
	}
Returns the data type of this variable.
@return the data type of this variable
Ghidra/Features/Base/src/main/java/ghidra/app/util/demangler/DemangledVariable.java