Eclipse

  • Eclipse path variables in window/preferences/general/workspace/linkedResources
  • Eclipse Fehlermeldung help -> about -> config details -> show error log

Eclipse Source Builds (Source from Zip)

  • eclipse-sourceBuild-srcIncluded-3.4.2.zip (included nicht fetched ZipFile! Aus http://download.eclipse.org/eclipse/downloads -> aktueller release -> source build) in leeres Directory entpacken
  • java, anthome usw. richtig setzen, siehe Instructions zum sourcebuild. Im Properties File nur das neueste jdk angeben, siehe java/ecAnt. Und dann build ausführen für das Zielsystem
  • build (sh, bzw. Build.bat für windows) compiliert zuerst den EclipseCompiler mit javac und nachher mit dem EclipseCompiler selbst, der Source wird jedesmal aus jdtcoresrc/src/ecj.zip extrahiert, Aenderungen müssen also da rein geschrieben werden. Nachher alles compiliert aus build.xml und dann features/org.eclipse.sdk/build.xml. Log in comilelog.txt
  • einige Buildfiles (u.a. das erste enthalten einen unvollständigen bootclasspath – am einfachsten passt man das im Compiler an, in jdtcoresrc/src/ecj.zip>>>org.eclipse.jdt.internal.compiler.batch/Main.java in
 handleBootclasspath(....) {
 ....:
 if (paths[0].indexOf("/rt.jar") < 0 ) { 
             paths[0] = paths[0] + ":/usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/charsets.jar:/usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/deploy.jar:/usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/javaws.jar:/usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/jce.jar:/usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/jsse.jar:/usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/management-agent.jar:/usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/plugin.jar:/usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/resources.jar:/usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/rt.jar"; 
             if (logger.err != null) 
                 logger.err.println("+++wkTest err change bootclasspath[0] to " + paths[0]); 
         }
  • die Buildfiles sind tief verschachtelt und leider mit vielem mehrfach Code, darum ist Aenderung im Compiler einfachter !!! Leider wird mit einem speziellen Target auch kein inkrementeller Build gemacht ....
  • nachher tar.gz aus result directory entpacken (normale exlipse Installation) (==> /usr/eclipseBuild)

Eclipse Compiler:

Eclipse Java

  • Scrapbook um CodeSnippets auszuprobieren: File > New > Other.... Then select Java > Java Run/Debug > Scrapbook Page
  • Debugging geht auch Remote
  • formatting auch als commandline, FormatRegeln via Preferences -> Java -> CodeStyle -> Formatter
  • Die Sources der Eclipse examples sind nicht in der Distribution, auch nicht im source zip --> aus cvs herausholen
  • in eclipse in cvs repository view dieses Module usw. suchen und dann checkout (as)
  • cvs checkout holt die Files nur in die workarea, gesperrt werden sie erst durch Watch!
  • Cvs repository in Eclipse definieren siehe http://wiki.eclipse.org/index.php/CVS_Howto unter Repository view -> new
  • Im Extension Point Schema muss man die xml Syntax für den ExtensionPoint angeben, das wird dann auch kontrolliert, fehlt das Schema, gehts ohne Kontrolle. Der Schema Editor scheint keine Unterelement hinzukriegen, Wie heisst die richtige Syntax dafür, wie flickt man den Editor – oder gibt es schon einen Patch dafür?
  • Mit Eclipse 3.0 wurde die proprietäre Eclipse Runtime wurde auf das das OSGi(Open Services Gateway Initiative)-umgestellt: OSGi-Equinox-Framework.. Das erlaubt nun auch RCP (Rich Client Platforms).
  • Eclipse error log --> besser mit window -> show view -> show error log, dort kann man's auch rausputzen etc. Errors erscheinen verzögert (bzw. Durch welche Events getriggert?)
  • Wenn man ein plugin in Eclipse definiert und die Activator class fehlt gibt's auf dem Manifest nur eine Warnung – wenn man's startet kommt das Plugin nicht hoch mit Viewclass not found, obwohl die vorhanden ist (vor her kommt auch die Activator not found Meldung) Wieso?
  • Startet man ein im Workbench ein Eclipse Application, wird ein neuer (nicht ganz vollständiger Workspace) erstellt und gestartet. System.out geht auf die Console des startenden Workspaces, Debug in die DebugPerspektive des startendenden Workspaces
  • JIT Just in Time Compiler übersetzt ByteCode o.ä. in Maschinencode, wenn es ausgeführt wird, oder zur Laufzeit als effektiktive Optimierung erscheint
  • org.eclipse.ui.viewActions: This extension point is used to add actions to the pulldown menu (Dreieck oben rechts im ViewHeader NICHT ContextMenu!)
  • Für jede View muss eine eigene extension definiert werden (z.B. org.eclipse.ui.views.ResourceNavigator für Navigator und org.eclipse.ui.navigator.ProjectExplorer für Project Explorer)
  • viewActions (wie in readme example) wurden durch org.eclipse.ui.menus ersetzt, die ein gemeinsames Handling erlauben --- aber auch nicht ganz einfach zu durchschauen sind

Internals zu org.eclipse.ui.menus:

  • org.eclipse.ui.internal.Workbench (in plugins/org.eclipse.ui.workbench/Eclipse UI)
    • initializeDefaultService: erstellt, registriert einen WorkbenchMenuService und ruft dessen readRegistry Methode auf
    • openWorkbenchWindow
  • org.eclipse.ui.internal.menus.WorkbenchMenuService (in plugins/org.eclipse.ui.workbench/Eclipse UI)
    • implementiert
    • readRegistry: registriert sich als changeListeneer auf das Platform.getExtensionRegistry() und lädt daraus die Menueinträge
  • org.eclipse.core.internal.registry.ExtensionRegistry kann entweder die Manifests und XML einlesen, oder dasselbe aus cache Files erstellen
  • org.eclipse.core.runtime.Platform enthält registry, adapterManager usw., nur statische Methoden und Felder
  • org.eclipse.core.internal.registry.osgi.Activator startet Registry
  • RegistryPersistence Verbind von Registry und StorageManager
  • org.eclipse.ui.internal.ShowInMenu#fill (in plugins/org.eclipse.ui.workbench/Eclipse UI) füllt Menu mittels Workbench#populateContriubutionManager das Menu ==> Achtung es wird der ganze riesige Menübaum beackert – nachher wird visibility über Evaluations gesteuert!, durch WorkbenchMenuService#processAdditions
  • EvaluationAuthority ist Subclass von ExpressionAuthority gibt's einmal pro EvalutationService, der von Singleton Workbench einam instanziert wird.
  • org.eclipse.ui.internal.services.EvaluationAuthority#sourceChanged (in plugins/org.eclipse.ui.workbench/Eclipse UI) : reevaluiert die Expressions der angegebenen Sources pro Expression mit #refsWithSameExpression
  • EvaluationAuthority hat ein Map über Sources auf IEvaluationReference
  • org.eclipse.ui.internal.services.EvaluationAuthority#refsWithSameExpression (in plugins/org.eclipse.ui.workbench/Eclipse UI): evaluiert einen Array von von Expressions (mit gleichen Ausdrücken) und falls geändert firePropertyChange
  • WorkbenchMenuService#processAdditions erzeugt MenüEinträge mittels MenuAdditionCacheEntry#createContributionItems
  • org.eclipse.ui.internal.menus.MenuAdditionCacheEntry#createContributionItems addiert neue Icontriubiton, holt Expression aus org.eclipse.core.runtime.IConfigurationElement (registry) und verknüpft sie mittels ContriubutionRoot#addContributionItem
  • org.eclipse.ui.internal.menus.ContriubutionRoot#addContributionItem und registerVisibilityForChild verknüpfen visibility und Expressiong mittels WorkbenchMenuService#registerVisibleWhen
  • WorkbenchMenuService#registerVisibleWhen hängt das org.eclipse.jface.action.IContributionItem mittels EvaluationService#addEvaluationListener an die Expression
  • EvaluationService#addEvaluationListener packt die Expression in eine IevaluationReference und call EvaluationAuthority#addEvaluationListener
  • EvaluationAuthority#addEvaluationListener(IEvaluationReference) registriert den listener UND wertet die IEvaluationReference aus und propagiert den berechneten Wert mit firePropertyChange
  • org.eclipse.core.internal.expressions.StandardElementHandler konvertiert ConfigurationsElemente in Expressions