Custom Editor Content Assist

Status
Nicht offen für weitere Antworten.

StefanTmp

Mitglied
Hallo Zusammen,

ich bin gerade dabei, den Content Assist meines Editors auf Java Editor Niveau anzupassen, dazu habe ich folgendes Problem:

Wird der Content Assist betätigt, wird dem Nutzer eine Reihe von Methoden angezeigt, die via Classloader aus .class Dateien geladen werden. Der Benutzer wählt z.B. die Methode indexOf(<STRING>,<STRING>), daraufhin wird ein LikedModeModel um die Parameter "gelegt", dass dem Benutzer erlaubt, via Tab weiterzuschalten. Funktioniert soweit ganz gut. Nun möchte ich zu jedem Parameter weitere Proposals anzeigen, das funktioniert soweit auch. Jetzt fängt das eigentliche Problem an..

Man muss anfangs den Offset und die Länge der Parameter bestimmen, welche in obigem Beispiel Offset:8, Länge:8 und Offset:17, Länge:8 wären. Wählt man jetzt z.B. für den ersten Parameter erneut die Methode indexOf(...), wird <STRING> erwartungsgemäß ersetzt, bearbeitet man aber den zweiten Parameter z.B. mit "test", entsteht folgendes:

indexOf(indexOf(<"test".... -> d.h. der neue Offset bzw. die neue Länge des Parameters werden nicht beachtet.

Code wie folgt:

In der CompletionProposal:

Java:
public void apply(IDocument document) {

		try {
			document.replace(mReplacementOffset, mReplacementLength,
					mReplacementString);
			int lBaseOffset = this.mReplacementOffset; //der offset innerhalb des docs
			extractMethodLength(); //methodenlänge festlegen
			countParameterAndSetPositions(); //wie viele parameter hat das Proposal? Bestimme und setz die Positionen der Parameter (siehe Problembeschreibung)

			if (this.mPositions.length > 0) {

				LinkedModeModel lModel = new LinkedModeModel();

				// Laufvariable
				int i = 0;

				for (String lParameter : this.mParameterList) {
					LinkedPositionGroup lGroup = new LinkedPositionGroup();
					int lPositionOffset = lBaseOffset
							+ this.mPositions[i].getOffset();
					int lPositionLength = this.mPositions[i].getLength();

					ensurePositionCategoryInstalled(document, lModel);
					document.addPosition(getCategory(), this.mPositions[i]);


					lGroup.addPosition(new ProposalPosition(document,
							lPositionOffset, lPositionLength,
							LinkedPositionGroup.NO_STOP,
							getProposalListForParameter(lParameter,
									lPositionOffset, lPositionLength)));
					lModel.addGroup(lGroup);

					i++;
				}
				lModel.tryInstall();

				LinkedModeUI ui = new EditorLinkedModeUI(lModel, mViewer);
				ui.setExitPosition(mViewer, lBaseOffset
						+ this.mReplacementString.length(), 0,
						Integer.MAX_VALUE);
				ui.setExitPolicy(new ExitPolicy(')', document));
				ui.setCyclingMode(LinkedModeUI.CYCLE_WHEN_NO_PARENT);
				ui.setDoContextInfo(false);
				ui.enter();

				mSelectedRegion = ui.getSelectedRegion();
			}

		} catch (BadLocationException e) {
			e.printStackTrace();
		} catch (BadPositionCategoryException e) {
			e.printStackTrace();
		}
	}

Java:
private ICompletionProposal[] getProposalListForParameter(
			String pParameter, int pPositionOffset, int pReplacementLength) {

		ArrayList<ICompletionProposal> lResult = new ArrayList<ICompletionProposal>();
		// Without brackets
		String lPlainParameter = pParameter.substring(1,
				pParameter.length() - 1);
		//Proposals anhand des Parameters bestimmen
		for(A4LMethodInformationForContentAssist lObject : A4LModulList.getInstance().getMethodsForContentAssist()){
			if(lObject.getmReturnType().equals(lPlainParameter)){
				lResult.add(new CompletionProposal(lObject.getmReplacementString(), pPositionOffset,
						pReplacementLength, lObject.getmReplacementString().length(), null, lObject.getmDisplayString(),
						null, ""));
			}
		}

Es muss doch eine Möglichkeit geben, nach jedem apply der CompletionProposals das Linked Model anzupassen, damit das Problem nicht auftritt

Hoffe ich konnte mein Problem deutlich machen.

Danke

StefanTmp
 

Wildcard

Top Contributor
Hast du dir schon XText angeschaut? Damit wird dir der komplette Editor aus der Grammatik generiert und Code Completion ist inklusive. Mit dem Helios release gibt es auch build-in support um Java Klassen/Methoden/Typen in der eigenen Sprache zu referenzieren, aber auch im Galileo Release lässt sich das relativ einfach (wenn auch nicht ganz so mächtig) händisch nachrüsten. Habe ich auch schon gemacht.
 

StefanTmp

Mitglied
Hallo Wildcard,

leider wurde von oben festgelegt, dass der Editor mit JFace gebaut werden soll.. Mir bleibt also nichts anderes übrig :)
 

Wildcard

Top Contributor
JFace sind nur Utility Klassen auf SWT. Guess What, XText generiert dir einen JFace basierten Editor mit JFace Autocompletion ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G EMF Custom Code Plattformprogrammierung 2
astralarse Custom OSGi Launcher mit config.ini Plattformprogrammierung 6
L HTML Editor Plattformprogrammierung 2
P Artifact-Editor in RCP-Anwendung Plattformprogrammierung 14
TheWhiteShadow RCP Zustand von Editor Toolbar ToggleButton aktualisieren Plattformprogrammierung 0
D Eclipse_Visual Editor Problem Plattformprogrammierung 2
M Extension Point für Content Assist in JSP Editor gesucht Plattformprogrammierung 2
TheWhiteShadow RCP Editor Inhalt speichern Plattformprogrammierung 3
TheWhiteShadow RCP Konstrukt für Editor in Eclipse gesucht. Plattformprogrammierung 3
P RCP Text Editor Example - Missing Bundles lassen sich nicht auffinden. Plattformprogrammierung 6
3 Eclipse Editor Plugin selektiert Projekt nicht Plattformprogrammierung 10
C Java Editor funktioniert nicht Plattformprogrammierung 9
G RCP Eclipse Editor + Guice Plattformprogrammierung 8
J RCP Verhindern, dass Editor geschlossen wird Plattformprogrammierung 5
slawaweis RCP Formularbasierter XML-Editor (bzw. vorhandenen XML-Editor integrieren) Plattformprogrammierung 8
C Eclipse Plugin Entwicklung: Editor für Flussdiagramme Plattformprogrammierung 6
E Editor Schriftgröße ändern per "Java Code" Plattformprogrammierung 8
W letzte angeklickten Editor ermitteln Plattformprogrammierung 3
S GMF Editor mit einem zur Laufzeit erstellten Modell Plattformprogrammierung 4
B Eclpise Visual Editor Plattformprogrammierung 2
A RCP Editor-Reiter (FormEditor): Kann Rechtsklick-Menue überschrieben werden? Plattformprogrammierung 6
A RCP Tabs oben und unten im Editor oder mehrere Editoren? Plattformprogrammierung 7
B GMF Editor mit nur einem Connection Tool Plattformprogrammierung 5
T RCP - Scrollable Editor Plattformprogrammierung 4
T Speichern eines Objectes in einem Editor (mit isDirty) Plattformprogrammierung 6
J TableViewer aus Editor refreshen Plattformprogrammierung 5
T RCP Local History für eigenen Editor Plattformprogrammierung 9
L RCP Genmodel-Editor? Plattformprogrammierung 2
U Klassendiagramm-Editor (EMF, GMF, Ecore Tools) Plattformprogrammierung 3
M gmfgraph editor Plattformprogrammierung 6
L RCP View in einem Editor öffnen? Plattformprogrammierung 3
B Eclipse RCP: Kontextsensitive Buttons für Editor und Hilfebutton für Wizard hinzufügen Plattformprogrammierung 5
J RCP Default Editor öffnen? Plattformprogrammierung 5
J Code Editor auslesen? Plattformprogrammierung 3
C [GEF] gespeicherte Dateien des generierten Editor Plattformprogrammierung 5
G Editor undo/redo Plattformprogrammierung 9
Spot84 datei im editor öffnen(tutorial undurchsichtig) Plattformprogrammierung 5
G Editor anzeigen Plattformprogrammierung 2
T Setze Gradienten auf Elemente(GMF-Editor) Plattformprogrammierung 2
G Editor und doSave() Plattformprogrammierung 19
G WYSIWYG HTML Editor als Eclipse Plug-In Plattformprogrammierung 6
K XML Editor im Project Plattformprogrammierung 12
K Editor nicht in der 'EditorArea' öffnen, sondern in einem Folder(Layout). Plattformprogrammierung 10
S RCP Anfängerfrage - Zusammenspiel View, Editor, Model Plattformprogrammierung 4
D GEF Editor als RCP ausführen Plattformprogrammierung 10
G Editor Plattformprogrammierung 6
N GMF Editor automatisch generieren Plattformprogrammierung 2
H Visueller Editor für Eclipse RCP Anwendung Plattformprogrammierung 3
G xml-Datei im Editor importieren Plattformprogrammierung 3
dzim Editor aus View öffnen - fehler: unbekannte Editor ID Plattformprogrammierung 11
Paule EMF Editor Dateiverknüpfungen Plattformprogrammierung 9

Ähnliche Java Themen


Oben