@Override
	public void insert(StringBuilder builder) {
		// Added 20170412 to try have available to get MSFT affect on this
		// "invalid" condition.
		// if (cvMod.isBasedPtrBased()) {
		// builder.setLength(0);
		// }

		// 20161011: put back in: this if-block (these are for "arguments")
		// 20161025 if (builder.length() == 0) { //20161025
		if (!cvMod.isCLIArray()) {
			// 20170505 late: add this? super.insert(builder);
			if (isVolatile) {
				dmang.insertSpacedString(builder, VOLATILE);
			}
			if (isConst) {
				dmang.insertSpacedString(builder, CONST);
			}
		}
		// //TODO: This condition is the one that is not hit in the next "if"
		// statement.
		// // it is because "insert()" is overridden in the MDAarrayType class.
		// Look into
		// // whether a complete override is needed.
		// if ((refType instanceof MDFunctionType) && cvMod.isPointerType()) {
		// int a = 0;
		// int b = a;
		// }
		// if ((refType instanceof MDFunctionType) &&
		// cvMod.isFunctionPointerType()) {
		// int a = 0;
		// int b = a;
		// }
		// if ((refType instanceof MDFunctionType) && cvMod.isReferenceType()) {
		// int a = 0;
		// int b = a;
		// }
		// if ((refType instanceof MDFunctionType) &&
		// cvMod.isFunctionReferenceType()) {
		// int a = 0;
		// int b = a;
		// }
		// if ((refType instanceof MDFunctionType) && cvMod.isArrayType()) {
		// int a = 0;
		// int b = a;
		// }
		// if ((refType instanceof MDFunctionType) && (builder.length() > 0)) {
		// int a = 0;
		// int b = a;
		// }
		if ((refType instanceof MDFunctionType) && ((cvMod.isPointerType() ||
			cvMod.isFunctionPointerType() || cvMod.isReferenceType() ||
			cvMod.isFunctionReferenceType() || cvMod.isArrayType() || (builder.length() > 0)))) {
			((MDFunctionType) refType).setFromModifier();
		}
		// if (!isArray()) { //20170523
		insertCVMod(builder);
		// }
		// Following is to clean the Based5 "bug" if seen.  See comments in MDBasedAttribute.
		// 20170714 dmang.cleanOutput(builder);
		// 20170605 insertArrayString(builder); //only available for "data"
		// refType
		// TODO 20160630: Possibly insert a space here????
		// builder.insertString(" "); //20160701
		if (refType instanceof MDArrayReferencedType) {
			// 20170714 refType.insert(builder);
			insertReferredType(builder);// 20170714
		}
		else if (cvMod.isPinPointer()) {
			StringBuilder refBuilder = new StringBuilder();
			// 20170714 refType.insert(refBuilder);
			insertReferredType(refBuilder);// 20170714
			dmang.appendString(refBuilder, " ");
			if (!(cvMod.isQuestionType() ||
				(cvMod.isPointerType() && (refType instanceof MDVoidDataType)))) {
				// if ((cvMod.isPointerType()) && !(refType instanceof
				// MDVoidDataType)) {
				cvMod.insertManagedPropertiesPrefix(refBuilder);
				// MDMANG SPECIALIZATION USED.
				dmang.insertManagedPropertiesSuffix(refBuilder, cvMod);
				// cvMod.insertManagedPropertiesSuffix(refBuilder);
				// cvMod.insertManagedProperties(refBuilder);
			}
			dmang.insertString(builder, refBuilder.toString());
		}
		else if (cvMod.isCLIArray()) {
			StringBuilder refBuilder = new StringBuilder();
			// 20170714 refType.insert(refBuilder);
			insertReferredType(refBuilder);// 20170714
			if (!(refType instanceof MDVoidDataType)) {
				cvMod.insertManagedPropertiesPrefix(refBuilder);
				// cvMod.insertManagedProperties(refBuilder);
			}
			// MSFT has this outside of the test...
			cvMod.insertManagedPropertiesSuffix(refBuilder);
			// cvMod.insertManagedProperties(refBuilder);
			// TODO: make a routine in an object dispatcher for the next line,
			// subject to
			// various output modes (ED, GHIDRA, MSDN2015, etc.).
			dmang.insertCLIArrayRefSuffix(builder, refBuilder);
		}
		else {
			// 20170523 attempt
			// if (refType instanceof MDArrayReferencedType) {
			// if (!dmang.isEffectivelyEmpty(builder)) {
			// dmang.insertString(builder, "(");
			// dmang.appendString(builder, ")");
			// }
			// }
			// //Could be function (function pointer or function) or data.
			// 20170714 refType.insert(builder);
			insertReferredType(builder);// 20170714
		}
	}
This class represents a modifier type, whether a pointer, reference, or other
 special modifier type.  This class stands on its own or is extended for one
 of the other types.
Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/modifier/MDModifierType.java