# Eclipse Plugin - Rückgabewert einer Methode



## Florlp (15. Dez 2009)

Hallo,

ich bin gerade dabei mein erstes Eclipse Plugin zu schreiben.
Dabei möchte ich eine (oder mehrere) Java Dateien untersuchen und daraus eine neue Java Datei erzeugen.

Eclipse bietet da ICompilationUnit an.
Damit komme ich auch soweit klar.
Besonders wichtig sind mir dabei die Methoden und deren Rückgabewert.
Ich schaffe es auch mit Hilfe von IMethod die einzelnen Methoden durchzugehen. Mit  "getSignature" bzw. "getReturnType" bekomme ich auch einen Typ zurück, aber leider nicht die komplette Bezeichung.

Beispiel:

Aus Testzwecken lasse ich mir den Typ in der Konsole ausgeben:
im Plugin Code:

```
System.out.println("#### Signature Return: "+Signature.toString(m.getReturnType()));
```
m ist eine Instanz von IMethod

eine Testdatei auf die ich mein Eclipse-Plugin anwende:

```
import java.sql.Date;

public class TestKlasse {
	
	public java.lang.String foo1(){
		return "ein String";
	}
	
	public String foo2(){
		return "ein String";
	}
	
	public Date foo3(){
		return null;
	}

}
```

mein Plugin sagt mir, dass
 foo1 vom Typ *java.lang.String* ist - soweit ok
 foo2 vom Typ *String* ist - nicht toll, aber bei String nicht weiter schlimm
 foo3 vom Typ *Date* - problematisch, wenn ich diese Methode in eine neue Datei kopieren möchte. Woher weiss ich, welcher Typ Date gemeint ist.. bei importierten und selbsterstellten Typen? 
Ich will in meiner neuen Klasse/Datei nicht jeden import kopieren müssen, sondern wünsche mir ein 
"public java.sql.Date foo3()"

Vorschläge? Ideen? Hilfe?
Ist diese Information überhaupt in ICompilationUnit drin?
(also dass die Importe drin sind, ist mir klar - man kann sich ja den ganzen Code mit getSource ausgeben lassen. Aber weiss es, dass der Rückgabewert java.sql.Date ist?)


----------



## Wildcard (15. Dez 2009)

Signature bietet doch viele Methoden um alle Arten von Repräsentationen zu bekommen:
Signature (Eclipse JDT API Specification)


----------



## Florlp (17. Dez 2009)

wenn das mit Signature geht, stehe ich irgendwie auf dem Schlauch...

IMethod ermöglicht mir:


> String 	getReturnType()
> Returns the type signature of the return value of this method.





> String 	getSignature()
> Returns the signature of this method.


(siehe Help - Eclipse SDK )

Trotzdem befürchte ich, dass ich damit nicht weiter komme.
Mit Signature kann ich dann die Strings in was für den Benutzer (und Programmierer) Lesbares umwandeln,
aber hilf mir mal auf die Sprünge, wie ich dann von

```
public Date foo3()
```
zu

```
public java.sql.Date foo3()
```
kommen kann.

edit:
Auch


> String 	toString(String methodSignature, String methodName, String[] parameterNames, boolean fullyQualifyTypeNames, boolean includeReturnType)
> Converts the given method signature to a readable string.


hilft mir nicht weiter (Signature Klasse)


```
Signature.toString(m.getSignature(), m.getElementName(), m.getParameterNames(), true, true)
```
liefert ebenfalls nur
*Date foo3()*


----------



## Wildcard (17. Dez 2009)

Hast du mal Signature#getReturnType(m.getSignature()) versucht?


----------



## Florlp (25. Feb 2010)

Hallo,

ich probiere es nochmal...
Das alte Problem besteht nach wie vor.

Ich versuche das Problem nochmal zu beschreiben, damit nicht jeder die alten Beiträge durchlesen muss:

Ich arbeite an einem Eclipse-Plugin und möchte dabei die Methoden von Java-Klassen untersuchen.
Was ich habe: IMethod (Help - Eclipse SDK)
Was ich möchte: Den Rückgabewert der Methode
Das Problem: ich brauche den vollständigen Namen (oder als IType)

[Java]
import java.sql.Date;

public interface A {

	public Date methode1 (String s);

}
[/code]

Eclipse unterstützt einem beim Programmieren und weiss an dieser Stelle, dass es sich bei Date um java.sql.Date und nicht z.B. um java.util.Date handelt... also muss ich das ja auch irgendwie auslesen können.
IMethod bietet die Methode getReturnType() an, doch hilft dir mir leider genauso wenig weiter wie Signature.getReturnType(String signature) (aber trotzdem danke Wildcard - immerhin hat einer geantwortet), da beide mir "Date" als Ergebnis liefern..


----------

