private void createActions(boolean isConnected) {
		String owner = plugin.getName();

		SelectAllAction selectAllAction =
			new SelectAllAction(owner, controller.getDecompilerPanel());

		DockingAction refreshAction = new DockingAction("Refresh", owner) {
			@Override
			public void actionPerformed(ActionContext context) {
				refresh();
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				DecompileData decompileData = controller.getDecompileData();
				if (decompileData == null) {
					return false;
				}
				return decompileData.hasDecompileResults();
			}
		};
		refreshAction.setToolBarData(new ToolBarData(REFRESH_ICON, "A" /* first on toolbar */));
		refreshAction.setDescription("Push at any time to trigger a re-decompile");
		refreshAction
				.setHelpLocation(new HelpLocation(HelpTopics.DECOMPILER, "ToolBarRedecompile")); // just use the default

		displayUnreachableCodeToggle = new ToggleDockingAction("Toggle Unreachable Code", owner) {
			@Override
			public void actionPerformed(ActionContext context) {
				boolean isSelected = this.isSelected();

				// Set the option based on the button state
				decompilerOptions.setEliminateUnreachable(!isSelected);

				updateOptionsAndRefresh();
			}

			@Override
			public void setSelected(boolean isSelected) {
				super.setSelected(isSelected);

				// Update the icon to have a slash or not
				if (!isSelected) {
					displayUnreachableCodeToggle
							.setToolBarData(new ToolBarData(TOGGLE_UNREACHABLE_CODE_ICON, "A"));
				}
				else {
					displayUnreachableCodeToggle.setToolBarData(
						new ToolBarData(TOGGLE_UNREACHABLE_CODE_DISABLED_ICON, "A"));
				}
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				DecompileData decompileData = controller.getDecompileData();
				if (decompileData == null) {
					return false;
				}
				return decompileData.hasDecompileResults();
			}
		};
		displayUnreachableCodeToggle.setDescription("Toggle off to eliminate unreachable code");
		displayUnreachableCodeToggle.setHelpLocation(
			new HelpLocation(HelpTopics.DECOMPILER, "ToolBarEliminateUnreachableCode"));

		respectReadOnlyFlags = new ToggleDockingAction("Toggle Respecting Read-only Flags", owner) {
			@Override
			public void actionPerformed(ActionContext context) {
				boolean isSelected = this.isSelected();

				// Set the option based on the button state
				decompilerOptions.setRespectReadOnly(!isSelected);

				updateOptionsAndRefresh();
			}

			@Override
			public void setSelected(boolean isSelected) {
				super.setSelected(isSelected);

				// Update the icon to have a slash or not
				if (!isSelected) {
					respectReadOnlyFlags
							.setToolBarData(new ToolBarData(TOGGLE_READ_ONLY_ICON, "A"));
				}
				else {
					respectReadOnlyFlags
							.setToolBarData(new ToolBarData(TOGGLE_READ_ONLY_DISABLED_ICON, "A"));
				}
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				DecompileData decompileData = controller.getDecompileData();
				if (decompileData == null) {
					return false;
				}
				return decompileData.hasDecompileResults();
			}
		};
		respectReadOnlyFlags.setDescription("Toggle off to respect readonly flags set on memory");
		respectReadOnlyFlags
				.setHelpLocation(new HelpLocation(HelpTopics.DECOMPILER, "ToolBarRespectReadOnly"));

		// Set the selected state and icon for the above two toggle icons
		refreshToggleButtons();

		//
		// Below are actions along with their groups and subgroup information.  The comments
		// for each section indicates the logical group for the actions that follow.
		// The actual group String used is for ordering the groups.  The int position is
		// used to specify a position *within* each group for each action.
		//
		// Group naming note:  We can control the ordering of our groups.  We cannot, however,
		// control the grouping of the dynamically inserted actions, such as the 'comment' actions.
		// In order to organize our groups around the comment actions, we have
		// to make our group names based upon the comment group name.
		// Below you will see group names that will trigger group sorting by number for those
		// groups before the comments group and then group sorting using the known comment group
		// name for those groups after the comments.
		//

		//
		// Function
		//
		String functionGroup = "1 - Function Group";
		int subGroupPosition = 0;

		SpecifyCPrototypeAction specifyCProtoAction = new SpecifyCPrototypeAction();
		setGroupInfo(specifyCProtoAction, functionGroup, subGroupPosition++);

		OverridePrototypeAction overrideSigAction = new OverridePrototypeAction();
		setGroupInfo(overrideSigAction, functionGroup, subGroupPosition++);

		EditPrototypeOverrideAction editOverrideSigAction = new EditPrototypeOverrideAction();
		setGroupInfo(editOverrideSigAction, functionGroup, subGroupPosition++);

		DeletePrototypeOverrideAction deleteSigAction = new DeletePrototypeOverrideAction();
		setGroupInfo(deleteSigAction, functionGroup, subGroupPosition++);

		RenameFunctionAction renameFunctionAction = new RenameFunctionAction();
		setGroupInfo(renameFunctionAction, functionGroup, subGroupPosition++);

		// not function actions, but they fit nicely in this group
		RenameLabelAction renameLabelAction = new RenameLabelAction();
		setGroupInfo(renameLabelAction, functionGroup, subGroupPosition++);

		RemoveLabelAction removeLabelAction = new RemoveLabelAction();
		setGroupInfo(removeLabelAction, functionGroup, subGroupPosition++);

		//
		// Variables
		//
		String variableGroup = "2 - Variable Group";
		subGroupPosition = 0; // reset for the next group

		RenameLocalAction renameLocalAction = new RenameLocalAction();
		setGroupInfo(renameLocalAction, variableGroup, subGroupPosition++);

		RenameGlobalAction renameGlobalAction = new RenameGlobalAction();
		setGroupInfo(renameGlobalAction, variableGroup, subGroupPosition++);

		RenameFieldAction renameFieldAction = new RenameFieldAction();
		setGroupInfo(renameFieldAction, variableGroup, subGroupPosition++);

		ForceUnionAction forceUnionAction = new ForceUnionAction();
		setGroupInfo(forceUnionAction, variableGroup, subGroupPosition++);

		RetypeLocalAction retypeLocalAction = new RetypeLocalAction();
		setGroupInfo(retypeLocalAction, variableGroup, subGroupPosition++);

		CreatePointerRelative createRelativeAction = new CreatePointerRelative();
		setGroupInfo(createRelativeAction, variableGroup, subGroupPosition++);

		RetypeGlobalAction retypeGlobalAction = new RetypeGlobalAction();
		setGroupInfo(retypeGlobalAction, variableGroup, subGroupPosition++);

		RetypeReturnAction retypeReturnAction = new RetypeReturnAction();
		setGroupInfo(retypeReturnAction, variableGroup, subGroupPosition++);

		RetypeFieldAction retypeFieldAction = new RetypeFieldAction();
		setGroupInfo(retypeFieldAction, variableGroup, subGroupPosition++);

		IsolateVariableAction isolateVarAction = new IsolateVariableAction();
		setGroupInfo(isolateVarAction, variableGroup, subGroupPosition++);

		DecompilerStructureVariableAction decompilerCreateStructureAction =
			new DecompilerStructureVariableAction(owner, tool, controller);
		setGroupInfo(decompilerCreateStructureAction, variableGroup, subGroupPosition++);

		EditDataTypeAction editDataTypeAction = new EditDataTypeAction();
		setGroupInfo(editDataTypeAction, variableGroup, subGroupPosition++);

		// shows the quick editor dialog
		EditFieldAction editFieldAction = new EditFieldAction();
		setGroupInfo(editFieldAction, variableGroup, subGroupPosition++);

		//
		// Listing action for Creating Structure on a Variable
		//
		ListingStructureVariableAction listingCreateStructureAction =
			new ListingStructureVariableAction(owner, tool, controller);

		//
		// Commit
		//
		String commitGroup = "3 - Commit Group";
		subGroupPosition = 0; // reset for the next group

		CommitParamsAction lockProtoAction = new CommitParamsAction();
		setGroupInfo(lockProtoAction, commitGroup, subGroupPosition++);

		CommitLocalsAction lockLocalAction = new CommitLocalsAction();
		setGroupInfo(lockLocalAction, commitGroup, subGroupPosition++);

		subGroupPosition = 0; // reset for the next group

		//
		// Highlight
		//
		String highlightGroup = "4a - Highlight Group";
		tool.setMenuGroup(new String[] { "Highlight" }, highlightGroup);
		HighlightDefinedUseAction defUseHighlightAction = new HighlightDefinedUseAction();
		setGroupInfo(defUseHighlightAction, highlightGroup, subGroupPosition++);

		ForwardSliceAction forwardSliceAction = new ForwardSliceAction();
		setGroupInfo(forwardSliceAction, highlightGroup, subGroupPosition++);

		BackwardsSliceAction backwardSliceAction = new BackwardsSliceAction();
		setGroupInfo(backwardSliceAction, highlightGroup, subGroupPosition++);

		ForwardSliceToPCodeOpsAction forwardSliceToOpsAction = new ForwardSliceToPCodeOpsAction();
		setGroupInfo(forwardSliceToOpsAction, highlightGroup, subGroupPosition++);

		BackwardsSliceToPCodeOpsAction backwardSliceToOpsAction =
			new BackwardsSliceToPCodeOpsAction();
		setGroupInfo(backwardSliceToOpsAction, highlightGroup, subGroupPosition++);

		tool.setMenuGroup(new String[] { "Secondary Highlight" }, highlightGroup);
		SetSecondaryHighlightAction setSecondaryHighlightAction = new SetSecondaryHighlightAction();
		setGroupInfo(setSecondaryHighlightAction, highlightGroup, subGroupPosition++);

		SetSecondaryHighlightColorChooserAction setSecondaryHighlightColorChooserAction =
			new SetSecondaryHighlightColorChooserAction();
		setGroupInfo(setSecondaryHighlightColorChooserAction, highlightGroup, subGroupPosition++);

		RemoveSecondaryHighlightAction removeSecondaryHighlightAction =
			new RemoveSecondaryHighlightAction();
		setGroupInfo(removeSecondaryHighlightAction, highlightGroup, subGroupPosition++);

		RemoveAllSecondaryHighlightsAction removeAllSecondadryHighlightsAction =
			new RemoveAllSecondaryHighlightsAction();
		setGroupInfo(removeAllSecondadryHighlightsAction, highlightGroup, subGroupPosition++);

		PreviousHighlightedTokenAction previousHighlightedTokenAction =
			new PreviousHighlightedTokenAction();
		setGroupInfo(previousHighlightedTokenAction, highlightGroup, subGroupPosition++);

		NextHighlightedTokenAction nextHighlightedTokenAction = new NextHighlightedTokenAction();
		setGroupInfo(nextHighlightedTokenAction, highlightGroup, subGroupPosition++);

		String convertGroup = "7 - Convert Group";
		subGroupPosition = 0;
		RemoveEquateAction removeEquateAction = new RemoveEquateAction();
		setGroupInfo(removeEquateAction, convertGroup, subGroupPosition++);

		SetEquateAction setEquateAction = new SetEquateAction(plugin);
		setGroupInfo(setEquateAction, convertGroup, subGroupPosition++);

		ConvertBinaryAction convertBinaryAction = new ConvertBinaryAction(plugin);
		setGroupInfo(convertBinaryAction, convertGroup, subGroupPosition++);

		ConvertDecAction convertDecAction = new ConvertDecAction(plugin);
		setGroupInfo(convertDecAction, convertGroup, subGroupPosition++);

		ConvertFloatAction convertFloatAction = new ConvertFloatAction(plugin);
		setGroupInfo(convertFloatAction, convertGroup, subGroupPosition++);

		ConvertDoubleAction convertDoubleAction = new ConvertDoubleAction(plugin);
		setGroupInfo(convertDoubleAction, convertGroup, subGroupPosition++);

		ConvertHexAction convertHexAction = new ConvertHexAction(plugin);
		setGroupInfo(convertHexAction, convertGroup, subGroupPosition++);

		ConvertOctAction convertOctAction = new ConvertOctAction(plugin);
		setGroupInfo(convertOctAction, convertGroup, subGroupPosition++);

		ConvertCharAction convertCharAction = new ConvertCharAction(plugin);
		setGroupInfo(convertCharAction, convertGroup, subGroupPosition++);

		//
		// Comments
		//
		// NOTE: this is just a placeholder to represent where the comment actions should appear
		//       in relation to our local actions.
		//

		//
		// Search
		//
		String searchGroup = "Comment2 - Search Group";
		subGroupPosition = 0; // reset for the next group

		FindAction findAction = new FindAction();
		setGroupInfo(findAction, searchGroup, subGroupPosition++);

		//
		// References
		//

		// note: set the menu group so that the 'References' group is with the 'Find' action
		String referencesParentGroup = searchGroup;

		FindReferencesToDataTypeAction findReferencesAction =
			new FindReferencesToDataTypeAction(owner, tool, controller);
		setGroupInfo(findReferencesAction, searchGroup, subGroupPosition++);
		findReferencesAction.getPopupMenuData().setParentMenuGroup(referencesParentGroup);

		FindReferencesToHighSymbolAction findReferencesToSymbolAction =
			new FindReferencesToHighSymbolAction();
		setGroupInfo(findReferencesToSymbolAction, searchGroup, subGroupPosition++);
		findReferencesToSymbolAction.getPopupMenuData().setParentMenuGroup(referencesParentGroup);
		addLocalAction(findReferencesToSymbolAction);

		FindReferencesToAddressAction findReferencesToAddressAction =
			new FindReferencesToAddressAction(tool, owner);
		setGroupInfo(findReferencesToAddressAction, searchGroup, subGroupPosition++);
		findReferencesToAddressAction.getPopupMenuData().setParentMenuGroup(referencesParentGroup);
		addLocalAction(findReferencesToAddressAction);

		//
		// Options
		//
		String optionsGroup = "comment6 - Options Group";
		subGroupPosition = 0; // reset for the next group

		EditPropertiesAction propertiesAction = new EditPropertiesAction(owner, tool);
		setGroupInfo(propertiesAction, optionsGroup, subGroupPosition++);

		//
		// These actions are not in the popup menu
		//
		DebugDecompilerAction debugFunctionAction = new DebugDecompilerAction(controller);
		ExportToCAction convertAction = new ExportToCAction();
		CloneDecompilerAction cloneDecompilerAction = new CloneDecompilerAction();
		GoToNextBraceAction goToNextBraceAction = new GoToNextBraceAction();
		GoToPreviousBraceAction goToPreviousBraceAction = new GoToPreviousBraceAction();

		addLocalAction(refreshAction);
		addLocalAction(displayUnreachableCodeToggle);
		addLocalAction(respectReadOnlyFlags);
		addLocalAction(selectAllAction);
		addLocalAction(defUseHighlightAction);
		addLocalAction(forwardSliceAction);
		addLocalAction(backwardSliceAction);
		addLocalAction(forwardSliceToOpsAction);
		addLocalAction(backwardSliceToOpsAction);
		addLocalAction(lockProtoAction);
		addLocalAction(lockLocalAction);
		addLocalAction(renameLocalAction);
		addLocalAction(renameGlobalAction);
		addLocalAction(renameFieldAction);
		addLocalAction(forceUnionAction);
		addLocalAction(setSecondaryHighlightAction);
		addLocalAction(setSecondaryHighlightColorChooserAction);
		addLocalAction(removeSecondaryHighlightAction);
		addLocalAction(removeAllSecondadryHighlightsAction);
		addLocalAction(nextHighlightedTokenAction);
		addLocalAction(previousHighlightedTokenAction);
		addLocalAction(convertBinaryAction);
		addLocalAction(convertDecAction);
		addLocalAction(convertFloatAction);
		addLocalAction(convertDoubleAction);
		addLocalAction(convertHexAction);
		addLocalAction(convertOctAction);
		addLocalAction(convertCharAction);
		addLocalAction(setEquateAction);
		addLocalAction(removeEquateAction);
		addLocalAction(retypeLocalAction);
		addLocalAction(createRelativeAction);
		addLocalAction(retypeGlobalAction);
		addLocalAction(retypeReturnAction);
		addLocalAction(retypeFieldAction);
		addLocalAction(isolateVarAction);
		addLocalAction(decompilerCreateStructureAction);
		tool.addAction(listingCreateStructureAction);
		addLocalAction(editDataTypeAction);
		addLocalAction(editFieldAction);
		addLocalAction(specifyCProtoAction);
		addLocalAction(overrideSigAction);
		addLocalAction(editOverrideSigAction);
		addLocalAction(deleteSigAction);
		addLocalAction(renameFunctionAction);
		addLocalAction(renameLabelAction);
		addLocalAction(removeLabelAction);
		addLocalAction(debugFunctionAction);
		addLocalAction(convertAction);
		addLocalAction(findAction);
		addLocalAction(findReferencesAction);
		addLocalAction(propertiesAction);
		addLocalAction(cloneDecompilerAction);
		addLocalAction(goToNextBraceAction);
		addLocalAction(goToPreviousBraceAction);

		graphServiceAdded();
	}
Updates the windows title and subtitle to reflect the currently decompiled function
Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/DecompilerProvider.java