Anmelden

View Full Version : RDi STRG+Space



Seiten : 1 2 3 [4] 5

dschroeder
13-02-19, 11:35
Ich habe das bei mit probiert. Bei mir gibt es aus meiner Sicht keine Probleme mit dem Autocomplete.

Bei mir ist es folgendenmaßen:

In den folgenden Zeilen wird beim dcl kein Inhalt beim Autocomplete vorgeschlagen:

// Datei und Host-DS einbinden
dcl-f pfa002p disk usage(*input);
dcl-ds pfa002rDS likerec(pfa002r); // "pfa002r" wird im likerec auch nicht erkannt :(

Das ist auch OK, denke ich. RDi kann ja nicht wissen, welche Datei du irgendwann mal einbinden willst. Beim Likerec wird bei mir auch nur die allgemeine Hilfe "Likerec(record-name)" vorgeschlagen. Hier könnte RDi tatsächlich intelligenter sein. Schließlich steht ja links der Dateiname.

Beim Rest des Codes (also ab //Lokale Felder) kommt beim mir überall der korrekte Autocomplete. Allerdings wird bei read der Dateiname, nicht der Recordname vorgeschlagen. Da könnte RDi vielleicht beides vorschlagen, denke ich. Es wäre ja beides zulässig.

Noch ein paar Anmerkungen zum Code:
Die Prototype-Deklaration

dcl-pr GibText char(10);
$1id zoned(2) const;
end-pr;

kannst du dir sparen, denke ich. Das macht der Compiler von selber.

Und die dcl-Reihenfolge innerhalb der Procedure finde ich ungewöhnlich (ist aber natürlich Geschmackssache): Bei mir kommt nach der declaration der Procedure immer direkt die pi-Deklaration, da dass ja die Kommunikation der Procedure nach außen beschreibt.
Erst danach kommen beim mir Dateien und lokale Variablen. Es ist jedenfalls nicht so wie früher, dass man zwingend erst die Dateien und danach den Rest deklarieren muss. Es sind ja alles dcl- Anweisungen. Und die sind (meines Wissens nach) gleichrangig.

Gruß,
Dieter

Fuerchau
13-02-19, 14:52
Ich habe nun auch schon mit ein paar Kollegen gesprochen.
RDi ist sehr empfindlich, was das Autocomplete angeht.
Da ist es unerheblich, ob ich die Definitionen in einer Copystrecke oder im Programm habe.
Hier mal eine neue dcl-ds extname() hinzugefügt und schon schweigt sich RDi wieder aus.
Gerade wenn man mit qualified und langen Namen (alias) umgeht, was die Leserlichkeit verbessert, scheitert RDi immer wieder und man muss sich mehrere Quellfenster aufmachen um die Namen per markieren->strg+c->fenster wechseln->strg+v zu verwenden.

Das Ganze passiert mit V7R2 und RDi 9.6.0.0.

Auch was die Typsicherheit des Compilers angeht, so bin ich nun mal auf die Nase gefallen:
Einer Prozedur wird eine Qualified-DS als Parameter per CONST übergeben.
Der Compiler prüft nun nicht, wie gedacht, ob die DS als Struktur korrekt angegeben wird sondern behandelt die DS als Char. Somit konnte es passieren, dass ich die falsche DS als Parameter übergeben habe und das Programm somit aus der Kurve flog.
Durch CONST gibt es ja keine Längenprüfung geschweige denn eine Struktur-Prüfung, da ja eine Kopie des Übergabewertes in ein CHAR stattfindet und weitergerouted wird.

Mit welcher Änderung ich nun allerdings RDi wieder zu Autocomplete bewegen soll, entzieht sich mir nun.

dschroeder
13-02-19, 15:14
Ich gebe dir recht, dass RDi nicht völlig stabil beim Autocomplete ist. Aber ich finde, die Stabilität ist in den letzten Versionen immer besser geworden. In den allermeisten Fällen haben wir keine Probleme damit. Wir arbeiten fast ausschließlich mit qualified und langen Feldnamen.

Aber bitte mal die neueste Version einspielen: 9.6.0.5. Das ist nur ein Update. Dauert vielleicht 10 Minuten. Man muss nichts neu einrichten, soweit ich mich erinnere.

dschroeder
13-02-19, 15:51
Noch ein Hinweis, falls jemand noch nicht so vertraut mit RDi ist:
Man kann sich auch eigene Schablonen hinterlegen, die man dann mit Strg + space per Autocomplete in seinen Code einfügen kann.

Man könnte sich also z.B. Schablonen hinterlegen, deren Name immer mit "tool" beginnt. Wenn ich dann im Code eine von meinen Schablonen benötige, tippe ich einfach tool ein und drücke Strg + space. Dann bekomme ich meine Schablonen angeboten.

Wir haben da einige Standard-Schablonen für uns definiert, die uns z. B. die Programm-Status-Datenstruktur an der Cursorposition in den Code einfügen oder Schablonen, die uns die komplette Schleifenkonstruktion eines SQL-Cursors einfügen.

Die Schablonen kann man exportieren und seinen Kollegen damit zur Verfügung stellen.

Wer es noch nicht gefunden hat: Über Fenster -> Benutzervorgaben -> Ferne Systeme -> LPEX Editor für ferne Systeme -> IBM i parser -> ILE RPG -> Schablonen
kommt man an die Definitionen der Schablonen.

Fuerchau
13-02-19, 18:04
Das Problem ist ja, dass sich bei STRG+Space gar nichts tut.

dschroeder
14-02-19, 07:49
Man kann nochmal unter Fenster -> Benutzervorgaben -> LPEX Editor -> Tastenaktionen des Benutzers
schauen, ob für Strg + Space vielleicht eine Tastenaktion festgelegt worden ist, die das Standardverhalten übersteuert.

Sonst hilft wohl nur eine Neuinstallation.

Fuerchau
14-02-19, 09:36
Auch der Update auf 9.6.0.5 hat keine Verbesserung gebracht.
Es ist ja nicht nur bei mir so, sondern auch bei den lieben Kollegen.
Die "Inhaltshilfe" ist korrekt konfiguriert.

Das seltsame ist ja, dass es innerhalb der Copystrecke einwandfrei funktioniert.
In der Quelle, die die Copystrecke einbindet, funktioniert es nicht.
Die Gliederungssicht wird einwandfrei und vollständig angezeigt.

dschroeder
14-02-19, 11:09
Unter Fenster -> Ansicht anzeigen kann man sich die Ansicht "Fehlerprotokoll" einblenden. Da stehen bei mir auch immer irgendwelche Meldungen drin. Vielleicht findet man dort etwas Verdächtiges. (Bitte nicht verwechseln mit "Fehlerliste").

Fuerchau
14-02-19, 13:27
Insoweit schon mal ein guter Hinweis. Ob allerdings ein solcher Fehlerhinweis da weiterhilft?


null
org.eclipse.ui
Fehler
Thu Feb 14 14:09:42 CET 2019
Unhandled event loop exception


org.eclipse.e4.core.di.InjectionException: org.eclipse.core.commands.ExecutionException: While executing the action, an exception occurred
at org.eclipse.e4.core.internal.di.MethodRequestor.ex ecute(MethodRequestor.java:65)
at org.eclipse.e4.core.internal.di.InjectorImpl.invok eUsingClass(InjectorImpl.java:282)
at org.eclipse.e4.core.internal.di.InjectorImpl.invok e(InjectorImpl.java:264)
at org.eclipse.e4.core.contexts.ContextInjectionFacto ry.invoke(ContextInjectionFactory.java:132)
at org.eclipse.e4.core.commands.internal.HandlerServi ceHandler.execute(HandlerServiceHandler.java:152)
at org.eclipse.core.commands.Command.executeWithCheck s(Command.java:494)
at org.eclipse.core.commands.ParameterizedCommand.exe cuteWithChecks(ParameterizedCommand.java:488)
at org.eclipse.e4.core.commands.internal.HandlerServi ceImpl.executeHandler(HandlerServiceImpl.java:210)
at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatch er.executeCommand(KeyBindingDispatcher.java:286)
at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatch er.press(KeyBindingDispatcher.java:507)
at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatch er.processKeyEvent(KeyBindingDispatcher.java:558)
at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatch er.filterKeySequenceBindings(KeyBindingDispatcher. java:378)
at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatch er.access$0(KeyBindingDispatcher.java:324)
at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatch er$KeyDownFilter.handleEvent(KeyBindingDispatcher. java:86)
at org.eclipse.swt.widgets.EventTable.sendEvent(Event Table.java:84)
at org.eclipse.swt.widgets.Display.filterEvent(Displa y.java:1270)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.ja va:1078)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.ja va:1103)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.ja va:1088)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget .java:1130)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget .java:1126)
at org.eclipse.swt.widgets.Widget.wmChar(Widget.java: 1547)
at org.eclipse.swt.widgets.Control.WM_CHAR(Control.ja va:4918)
at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java :364)
at org.eclipse.swt.widgets.Control.windowProc(Control .java:4799)
at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.j ava:359)
at org.eclipse.swt.widgets.Display.windowProc(Display .java:5110)
at org.eclipse.swt.internal.win32.OS.DispatchMessageW (Native Method)
at org.eclipse.swt.internal.win32.OS.DispatchMessage( OS.java:2552)
at org.eclipse.swt.widgets.Display.readAndDispatch(Di splay.java:3822)
at org.eclipse.e4.ui.internal.workbench.swt.PartRende ringEngine$4.run(PartRenderingEngine.java:1121)
at org.eclipse.core.databinding.observable.Realm.runW ithDefault(Realm.java:336)
at org.eclipse.e4.ui.internal.workbench.swt.PartRende ringEngine.run(PartRenderingEngine.java:1022)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.c reateAndRunUI(E4Workbench.java:150)
at org.eclipse.ui.internal.Workbench$5.run(Workbench. java:693)
at org.eclipse.core.databinding.observable.Realm.runW ithDefault(Realm.java:336)
at org.eclipse.ui.internal.Workbench.createAndRunWork bench(Workbench.java:610)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(Pl atformUI.java:148)
at org.eclipse.ui.internal.ide.application.IDEApplica tion.start(IDEApplication.java:138)
at org.eclipse.equinox.internal.app.EclipseAppHandle. run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseA ppLauncher.runApplication(EclipseAppLauncher.java: 134)
at org.eclipse.core.runtime.internal.adaptor.EclipseA ppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.ru n(EclipseStarter.java:388)
at org.eclipse.core.runtime.adaptor.EclipseStarter.ru n(EclipseStarter.java:243)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:90)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:508)
at org.eclipse.equinox.launcher.Main.invokeFramework( Main.java:673)
at org.eclipse.equinox.launcher.Main.basicRun(Main.ja va:610)
at org.eclipse.equinox.launcher.Main.run(Main.java:15 19)
at org.eclipse.equinox.launcher.Main.main(Main.java:1 492)
Caused by: org.eclipse.core.commands.ExecutionException: While executing the action, an exception occurred
at org.eclipse.jface.commands.ActionHandler.execute(A ctionHandler.java:123)
at org.eclipse.ui.internal.handlers.E4HandlerProxy.ex ecute(E4HandlerProxy.java:90)
at sun.reflect.GeneratedMethodAccessor44.invoke(Unkno wn Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:508)
at org.eclipse.e4.core.internal.di.MethodRequestor.ex ecute(MethodRequestor.java:55)
... 51 more
Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:788)
at java.util.TimSort.mergeAt(TimSort.java:525)
at java.util.TimSort.mergeForceCollapse(TimSort.java: 468)
at java.util.TimSort.sort(TimSort.java:265)
at java.util.Arrays.sort(Arrays.java:1856)
at java.util.ArrayList.sort(ArrayList.java:1473)
at java.util.Collections.sort(Collections.java:186)
at com.ibm.etools.iseries.edit.codeassist.rpgle.ISeri esEditorRPGILERichCodeAssistProcessor.addVariables AndFiles(ISeriesEditorRPGILERichCodeAssistProcesso r.java:295)
at com.ibm.etools.iseries.edit.codeassist.rpgle.ISeri esEditorRPGILERichCodeAssistProcessor.addVariables AndFiles(ISeriesEditorRPGILERichCodeAssistProcesso r.java:258)
at com.ibm.etools.iseries.edit.codeassist.rpgle.ISeri esEditorRPGILERichCodeAssistProcessor.getParseXML( ISeriesEditorRPGILERichCodeAssistProcessor.java:16 1)
at com.ibm.etools.iseries.edit.codeassist.rpgle.ISeri esEditorRPGILECodeAssistProcessor.getSubprocedures (ISeriesEditorRPGILECodeAssistProcessor.java:5146)
at com.ibm.etools.iseries.edit.codeassist.rpgle.ISeri esEditorRPGILECodeAssistProcessor.getCSpecContext( ISeriesEditorRPGILECodeAssistProcessor.java:7161)
at com.ibm.etools.iseries.edit.codeassist.rpgle.ISeri esEditorRPGILECodeAssistProcessor.processFreeForm( ISeriesEditorRPGILECodeAssistProcessor.java:2184)
at com.ibm.etools.iseries.edit.codeassist.rpgle.ISeri esEditorRPGILESQLCodeAssistProcessor.processFreeFo rm(ISeriesEditorRPGILESQLCodeAssistProcessor.java: 130)
at com.ibm.etools.iseries.edit.codeassist.rpgle.ISeri esEditorRPGILECodeAssistProcessor.getProposalMatch es(ISeriesEditorRPGILECodeAssistProcessor.java:449 )
at com.ibm.etools.iseries.edit.codeassist.rpgle.ISeri esEditorRPGILERichCodeAssistProcessor.getProposalM atches(ISeriesEditorRPGILERichCodeAssistProcessor. java:108)
at com.ibm.etools.iseries.edit.codeassist.rpgle.ISeri esEditorRPGILESQLCodeAssistProcessor.getProposalMa tches(ISeriesEditorRPGILESQLCodeAssistProcessor.ja va:71)
at com.ibm.etools.iseries.edit.codeassist.base.ISerie sEditorCodeAssistProcessor.computeCompletionPropos als(ISeriesEditorCodeAssistProcessor.java:201)
at com.ibm.lpex.alef.contentassist.ContentAssistant.c omputeCompletionProposals(ContentAssistant.java:14 14)
at com.ibm.lpex.alef.contentassist.CompletionProposal Popup.computeProposals(CompletionProposalPopup.jav a:184)
at com.ibm.lpex.alef.contentassist.CompletionProposal Popup.access$4(CompletionProposalPopup.java:182)
at com.ibm.lpex.alef.contentassist.CompletionProposal Popup$1.run(CompletionProposalPopup.java:154)
at org.eclipse.swt.custom.BusyIndicator.showWhile(Bus yIndicator.java:70)
at com.ibm.lpex.alef.contentassist.CompletionProposal Popup.showProposals(CompletionProposalPopup.java:1 49)
at com.ibm.lpex.alef.contentassist.ContentAssistant.s howProposals(ContentAssistant.java:1313)
at com.ibm.lpex.alef.contentassist.ContentAssistant.s howPossibleCompletions(ContentAssistant.java:1291)
at com.ibm.etools.iseries.edit.codeassist.base.ISerie sEditorContentAssistant.showPossibleCompletions(IS eriesEditorContentAssistant.java:47)
at com.ibm.lpex.alef.LpexSourceViewer.doOperation(Lpe xSourceViewer.java:1043)
at org.eclipse.ui.texteditor.TextOperationAction$1.ru n(TextOperationAction.java:130)
at org.eclipse.swt.custom.BusyIndicator.showWhile(Bus yIndicator.java:70)
at org.eclipse.ui.texteditor.TextOperationAction.run( TextOperationAction.java:127)
at org.eclipse.jface.action.Action.runWithEvent(Actio n.java:473)
at org.eclipse.jface.commands.ActionHandler.execute(A ctionHandler.java:118)
... 56 more

An wen meldet man dann den Fehler?
Zumindestens: Ab dann funktioniert Content Assist nicht mehr.
Selbst wenn man RDi dann beendet und neu startet, wird der obige Fehler dann immer wiederholt.

dschroeder
14-02-19, 16:38
Ich habe zuletzt im Mai 2018 einen Fehler im RDi an IBM gemeldet. "Ganz normal" über die Telefonnummer, über die ich auch sonstige IBM i Softwareprobleme melde. Allerdings haben wir einen Wartungsvertrag explizit auch für RDi.

Wenn du keinen Wartungsvertrag hast, dein RDi aber noch relativ neu ist, müsste man das Problem im Rahmen der Gewährleistung auch melden können, denke ich.