Access Modifier vor Kompilierung ändern

Status
Nicht offen für weitere Antworten.

timomeinen

Aktives Mitglied
Hallo zusammen,

ich suche nach einer Möglichkeit das Sichtbarkeitsattribut vor der Kompilierung zu ändern. Beispiel:

Aus:
Code:
@ChangeModifier
private int temp;

soll werden:
Code:
@IsChanged
public int temp;

Zunächst fällt mir ein Preprocessor ein. Gibt es andere Möglichkeiten? Mit dem AnnotationProcessingTool kann ich ja 'nur' neue Dateien erzeugen. Ich würde aber gerne den Code geändert an den Compiler übergeben. Der Source-Code soll jedoch erhalten bleiben?

Könnte ich auf dem abstrakten Syntaxbaum zugreifen und dort Änderungen machen?

Gibt es eine Möglichkeit über Aspektorientere Programmierung und Reflections so ein Verhalten zu erzeugen?

Vielen Dank für Ideen.

Glück Auf
Timo
 
M

maki

Gast
Darf man fragen wozu?

Wenn im Quellcode "private" steht, sollte auch im Kompilat "privat" drinne sein, oder?
 

tfa

Top Contributor
Es gibt java.lang.reflect.AccessibleObject.setAccessible(boolean), wenn Dir das hilft.
Die Frage nach dem Wozu ist allerdings berechtigt.
 

timomeinen

Aktives Mitglied
tfa hat gesagt.:
Es gibt java.lang.reflect.AccessibleObject.setAccessible(boolean), wenn Dir das hilft.
Die Frage nach dem Wozu ist allerdings berechtigt.

Die Methode kenne ich und macht ein privat deklariertes Attribut per Reflection veränderbar. Das ist aber nicht, was ich brauche.

Ich arbeite an einem speziellen Programmierkonzept für meine Masterarbeit. Dabei gibt es die Möglichkeit unter ganz bestimmten Vorraussetzungen auf private Attribute zuzugreifen. Der Compiler streikt allerdings beim Versuch das Programm zu kompilieren, wenn man von einer Klasse auf private Attribute einer anderen Klasse zuzugreifen.

Damit ich das neue Programmierkonzept umsetzen kann, MUSS daher das Attribut private bleiben. Damit der Compiler das Programm kompiliert, möchte ich daher das Attribut public machen. Da dann sämtliche Klassen Zugriff haben, wird ein Zugriff von unberechtigten Klassen durch ein Programm (mittels AOP) unterbunden.

Die Frage ist also, wie ich Source-Code "on the fly" auf dem Weg von der .java Datei zum Compiler verändern kann.

Vielen Dank und Gruß
Timo
 

timomeinen

Aktives Mitglied
tfa hat gesagt.:
Dann musst Du Dir wohl einen Präprozessor basteln...
Keine Möglichkeit das für den Entwickler transparent zu machen? Gibt es einen Workaround mit XDoclet oder APT oder ähnlichem? Zur Konfiguration verwende ich bereits Annotationen.
 
M

maki

Gast
Ich arbeite an einem speziellen Programmierkonzept für meine Masterarbeit. Dabei gibt es die Möglichkeit unter ganz bestimmten Vorraussetzungen auf private Attribute zuzugreifen. Der Compiler streikt allerdings beim Versuch das Programm zu kompilieren, wenn man von einer Klasse auf private Attribute einer anderen Klasse zuzugreifen.
Wie du schon gemerkt hast, unterstützt Java das absichtlich nicht.

Wie wär's mit gettern und settern?

In C++ wären das wahrscheinlich "friends".
 

timomeinen

Aktives Mitglied
maki hat gesagt.:
In C++ wären das wahrscheinlich "friends".
Tatsächlich lässt sich mit diesem Framework das "friends"-Konzept umsetzen. Daher soll es auch keine getter/setter geben, denn dann hätte man wieder das Problem, öffentliche Methoden anzuieten, mit denen der Zustand eines Objektes verändert werden kann.

Byte-Code Manipulation fälllt wohl auch weg, oder? Schliesslich kompiliert der Compiler erst gar nicht. Oder kann man den Compiler dazu bringen trotzdem durchzulaufen? Vermutlich nicht...

Hat jemand mal auf dem AST gearbeitet? Ist damit was zu reißen?

Danke
Timo
 

timomeinen

Aktives Mitglied
Hallo zusammen,

ich habe die Modifikatoren jetzt durch Modifizierung des AST verändert. Dazu zwei Möglichkeiten:

Der neue Java-Compiler ab Version 6 bietet die Möglichkeit an mit Prozessoren auf dem AST zu arbeiten.

Ich habe dazu Spoon verwendet, eine Bibliothek, die ein Metamodel seines Sourcecodes anbietet. Dies ist praktisch ein AST, der verändert werden kann.

spoon.gforge.inria.fr

Noch Fragen? Dann mailt mir an: timomeinen (at) gmail (dot) com

Viele Grüße
Timo
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Stärkerer access-modifier als "private"? Allgemeine Java-Themen 17
J WARNING: An illegal reflective access operation has occurred, beim Compilieren von JasperReports, was bedeutet das ? Allgemeine Java-Themen 23
Bluedaishi Access violation error Allgemeine Java-Themen 2
T Frage zu Access Modifiers Allgemeine Java-Themen 6
E To count password and username access possibility Allgemeine Java-Themen 10
F Alternative sun.jdbc.odbc.JdbcOdbcDriver (Access Datenbank) Allgemeine Java-Themen 2
B Load Library and use JNA to access Allgemeine Java-Themen 3
S Access Restrictions in Eclipse auf Code beschraenken (und nicht fuer Comments) Allgemeine Java-Themen 2
J Access restriction Allgemeine Java-Themen 5
C Klassen Warning "synthetic access" bei innerer Klasse Allgemeine Java-Themen 15
T access$800 Allgemeine Java-Themen 8
J Nice Office Access und Mac Allgemeine Java-Themen 6
S Concurrency access auf eine Map Allgemeine Java-Themen 6
M Access Frontend als Webanwendung Allgemeine Java-Themen 8
S Innere Klassen und die statische Methode access$x Allgemeine Java-Themen 5
B Access-Befehle werden in der falschen Reiehnfolge ausgeführt Allgemeine Java-Themen 4
P access denied / policy problem Allgemeine Java-Themen 4
W Daten in Access einfügen über Java Allgemeine Java-Themen 21
H Applet - java.security.AccessControlException: access. Allgemeine Java-Themen 6
D Mit Java Daten aus Access holen und als VCard versenden Allgemeine Java-Themen 3
W Sonderzeichen in Access 97 schreiben Allgemeine Java-Themen 2
J MS Access mit Java ansprechen Allgemeine Java-Themen 3
T Word, Excel u. Access API Allgemeine Java-Themen 2
M Access lässt sich nicht über "exec(command)" start Allgemeine Java-Themen 3
J MS Access-Reports steuerung mit Java Allgemeine Java-Themen 6
G JComboBox mit Werten aus einer Access Datenbank füllen Allgemeine Java-Themen 18
C access control list in java Allgemeine Java-Themen 7
M Sinn von Kompilierung zur Laufzeit Allgemeine Java-Themen 3
loadbrain Tutorial zur Kompilierung Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben