Eclipse:Fachpraktikum SS2010/Gruppe vonNeumann/Zu klärende Fragen

Aus Eclipse
Wechseln zu: Navigation, Suche

alle


Annika

  • wie erzeuge und konfiguriere ich eine Perspektive und erzeuge eine View?


Gabriel

wie finde ich in einem Javaprojekt bestimmte Elemente, zb. Felder, Methoden…?

dies erfolgt über den AST. Hier ein Beispiel um Felder in einem Javaprojekt zu suchen:
zunächst suche ich alle Packages innerhalb eines Projektes und lege diese in einer Liste ab (kann man natürlich auch anders lösen):

		IPackageFragment[] packages = javaProject.getPackageFragments();
		for (IPackageFragment actualPackage : packages) {
			// es sollen nur solche Packete untersucht werden die den Sourcecode des Projektes enthalten
			// diese Packete sind mit dem K_SOURCE Flag gezichnet
			if (actualPackage.getKind() == IPackageFragmentRoot.K_SOURCE) {
				sourcePackages.add(actualPackage);
			}


danach durchforste ich diese Liste nach Typen (also Klassen, Struckturen usw.), und lege die gefundenen Typen wieder in einer Liste ab:

		for (ICompilationUnit sourceFile : sourcePackage.getCompilationUnits()) {
			for (IType sourceType : sourceFile.getAllTypes()) {
				sourceTypes.add(sourceType);
			}


zum Schluss durchforste ich meine Liste mit Typen nach Feldern und lege den Namen und den Typ zu dem die Felder gehören in einer Liste ab (ist halt ein Beisiel aus unserem Projekt). hierzu prüfe ich ab das Element das gerade iteriert wird auch ein Feld ist:

		for (IType iType : sourceTypes) {
			for (IField iField : iType.getFields()) {
				listOfToRefactorElements.add(new TypeElementName(iType.getFullyQualifiedName(), iField.getElementName()));
			}
		}

Hier noch ein schönes Tuorial: [1]

wie kommuniziert der Adapter mit dem RT?

Zunächst einmal muss jeder Adapter seinen Controller von der Abstrakten Klasse de.fernuni.fapra.vonneumann.rtt.rttcore.external.RTAdapterController ableiten. Diese Klasse wird vom RTT exportiert. Diese Abhängigkeit mach deshalb Sinn, da alle Adapter die hier entwickelt werden sollen ausschließlich vom RTT aus angesprochen werden sollen. Die Kommunikation kann dann auf zwei Arten erfolgen:

  • erstellen einer AdapterController Instanz im RTT (hierfür ist der entsprechende (konkrete) Adaptercontroller im Adapterplugin exportiert worden
  • oder über den Extensionpoint des RTT


Punkt eins hat natürlich den Nachteil, dass für jeden neuen Adapter auch der Code des RTT geändert (ergänzt) werden muss. Um das zu vermeiden kann die Extensinpoint funktionalität der Eclipse Plattform genutzt werden. Hierzu definiert das RTT eine Extension von der sich jeder Adapter in Form eines Extensinpoints abhängig macht. Für diesen Extensionpoint stellt der Adapter Funktionalität bereit. Das RTT kann dann bei bedarf alle Extensionpoints im Framework suchen die der definierte Extension genügen und diese dann ansprechen.

kann ich zu einem gegebenen String herausfinden, ob es sich um ein Java-Element (Bezeichner, Methode...) handelt?

ja, siehe die Funktion IType.getType(String name) von Eclipse Help, hier dann IType.getType(String name)suchen.


Michael

  • wie starte ich aus Eclipse Aktivitäten in einem separaten Thread?
  • wie führe ich ein Change aus?
  • wie kopiert man ein Projekt in den Workspace, benennt es um, löscht es?


Sarah


Sarah o. Stephan