#### Debugging options for org.eclipse.osgi # Turn on general debugging for org.eclipse.osgi org.eclipse.osgi/debug=false # Prints out class loading debug information org.eclipse.osgi/debug/loader=false # Prints out event (FrameworkEvent/BundleEvent/ServiceEvent) and listener debug information org.eclipse.osgi/debug/events=false # Prints out OSGi service debug information (registration/getting/ungetting etc.) org.eclipse.osgi/debug/services=false # Prints out bundle manifest parsing debug information org.eclipse.osgi/debug/manifest=false # Prints out LDAP filter debug information org.eclipse.osgi/debug/filter=false # Prints out security (PermissionAdmin service) debug information org.eclipse.osgi/debug/security=false # Prints out start level service debug information org.eclipse.osgi/debug/startlevel=false # Prints out package admin service debug information org.eclipse.osgi/debug/packageadmin=false # Prints out timing information for bundle activation org.eclipse.osgi/debug/bundleTime=false # Debug the loading of message bundles org.eclipse.osgi/debug/messageBundles=false # Debug the object pool additions org.eclipse.osgi/debug/objectPool/adds=false # Debug the object pool duplications org.eclipse.osgi/debug/objectPool/dups=false # Eclipse adaptor options org.eclipse.osgi/eclipseadaptor/debug = false org.eclipse.osgi/eclipseadaptor/debug/location = false org.eclipse.osgi/eclipseadaptor/debug/cachedmanifest = false org.eclipse.osgi/eclipseadaptor/debug/platformadmin=false org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver=false org.eclipse.osgi/eclipseadaptor/converter/debug = false ### OSGi resolver options # Turns on debugging for the resolver org.eclipse.osgi/resolver/debug = false # Prints out wiring information after the resolver has completed the resolve process org.eclipse.osgi/resolver/wiring = false # Prints out Import-Package information org.eclipse.osgi/resolver/imports = false # Prints out Require-Bundle information org.eclipse.osgi/resolver/requires = false # Prints out debug information form the "uses" clause org.eclipse.osgi/resolver/uses = false # Prints out cycle information org.eclipse.osgi/resolver/cycles = false # Prints out Eclipse-GenericRequire information org.eclipse.osgi/resolver/generics = false #### Profile settings org.eclipse.osgi/profile/startup = false org.eclipse.osgi/profile/benchmark = false org.eclipse.osgi/profile/debug = false # Override the default implemenation org.eclipse.osgi/profile/impl = org.eclipse.osgi.internal.profile.DefaultProfileLogger # Append all profile messages to the filename specified org.eclipse.osgi/defaultprofile/logfilename = # Output all profile log messages synchronously to the jvm console. # By default, all log messages are cached until the log buffer is # requested. org.eclipse.osgi/defaultprofile/logsynchronously = false # Specify the size of the default profile implementation log buffer. org.eclipse.osgi/defaultprofile/buffersize = 256 #### Monitoring settings # monitor class loading org.eclipse.osgi/monitor/classes=false # monitor bundle activation org.eclipse.osgi/monitor/activation=false # monitor resource bundle (*.properties) loading org.eclipse.osgi/monitor/resources=false #### Trace settings # trace class loading - snapshot the execution stack when a class is loaded org.eclipse.osgi/trace/classLoading=false # trace location - file in which execution traces are written org.eclipse.osgi/trace/filename=runtime.traces # trace filters - Java properties file defining which classes should # be traced (if trace/classLoading is true) # File format: # plugins=<comma separated list of plugins whose classes to trace> # packages=<comma separated list of package prefixes of classes to trace> # Note that there may be many 'plugins' and 'packages' lines in one file. org.eclipse.osgi/trace/filters=trace.properties # trace bundle activation - snapshot the execution stack when a bundle is activated org.eclipse.osgi/trace/activation=false
Java, Eclipse Plugin Development and best software development practices
Tuesday, May 16, 2017
Debugging options for org.eclipse.osgi
Wednesday, April 12, 2017
Setting TLS protocol version for HttpsURLConnection
SSLContext sc = SSLContext.getInstance("TLSv1.2"); //$NON-NLS-1$
sc.init(null, null, new java.security.SecureRandom());
HttpsURLConnection con = (HttpsURLConnection) httpsURL.openConnection();
con.setSSLSocketFactory(sc.getSocketFactory());
Other way would be setting VM arg to the Java.
-Dhttps.protocols=TLSv1.1,TLSv1.2
Wednesday, January 25, 2017
Adding filter to tree viewer
PatternFilter filter = new PatternFilter();
FilteredTree tree = new FilteredTree(sash, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, filter, true);
TreeViewer viewer = tree.getViewer();
//go on..
Tuesday, January 10, 2017
Removing unwanted preference pages from eclipse
To remove unwanted preferences from your eclipse rcp app, we can do the following.
As part of your App MyRCPWorkbenchAdvisor#postStartup() method, you need to invoke the following code with the preference page id.
private void removeUnwantedPreferences()
{
PreferenceManager pm = PlatformUI.getWorkbench().getPreferenceManager();
IPreferenceNode root = getRoot(pm);
if (root != null)
{
removePrefsPage(root, "com.windows.preference.mypage.id");
}
}
//Identify preference node
private IPreferenceNode getRoot(PreferenceManager pm)
{
try
{
Method m = PreferenceManager.class.getDeclaredMethod("getRoot", (Class[]) null);
m.setAccessible(true);
return (IPreferenceNode) m.invoke(pm);
}
catch (Exception e)
{
IdeLog.logWarning(TitaniumCorePlugin.getDefault(), e);
}
return null;
}
//remove preference id from the preference node
private void removePrefsPage(IPreferenceNode root, String id)
{
for (IPreferenceNode node : root.getSubNodes())
{
if (node.getId().equals(id))
{
root.remove(node);
}
else
{
removePrefsPage(node, id);
}
}
}
This seems to be work without any issues.
However, I could see other direct approach but that doesn't seem to work well in all scenarios.
PreferenceManager pm = PlatformUI.getWorkbench().getPreferenceManager();
pm.remove("com.windows.preference.mypage.id");
Sunday, January 8, 2017
Tip: Eclipse plugins error - prerequisite build errors
I've faced this issue many times with eclipse.
Even though we have all the plugins and their dependencies defined correctly, still eclipse shows the errors by saying the prerequisite has to be build first.
It's frustrating since I have not made any changes in the project from the last time.
Okay, so the solution for this is:
1. Identify the root prerequisite plugin which eclipse is complaining about.
2. Close that root plugin
3. Re-open it
4. Do clean build for all projects
Even though we have all the plugins and their dependencies defined correctly, still eclipse shows the errors by saying the prerequisite has to be build first.
It's frustrating since I have not made any changes in the project from the last time.
Okay, so the solution for this is:
1. Identify the root prerequisite plugin which eclipse is complaining about.
2. Close that root plugin
3. Re-open it
4. Do clean build for all projects
Thursday, September 15, 2016
How to get your colleague Pull request into your system for testing
For my own reference:
Example:
git remote add coworker https://github.com/coworker/titanium_studio.git
git fetch coworker
git checkout --track coworker/TIMOB-23628
If your co-worker has made some more changes, then you pull the latest changes in the below way.
git checkout TIMOB-23628
git pull
To push it back to your colleague branch
git puh coworker TIMOB-23628
Another way would be
To fetch a remote PR into your local repo,
git fetch origin pull/ID/head:BRANCHNAME
where ID
is the pull request id and BRANCHNAME
is the name of the new branch that you want to create. Once you have created the branch, then simply
git checkout BRANCHNAME
Reference:
https://stackoverflow.com/questions/27567846/how-can-i-check-out-a-github-pull-request-with-git
Thursday, September 8, 2016
Best Practice: Never ever execute long running operations in the Display.asyncExec() also
//The thread which calls this method is suspended until the runnable completes.
Display.getDefault().syncExec(new Runnable()
{
public void run()
{
//Do only UI operation
}
});
//The caller of this method continues to run in parallel
Display.getDefault().asyncExec(new Runnable()
{
public void run()
{
//Do only UI operation
}
});
I've seen most of the people will misuse Display.getDefault().asyncExec() by thinking that it will not impact the application performance. But the important thing to remember here is, SWT is a single threaded model - Yes, it's a single-threaded UI model. Any UI operation which you do, will happen through Display main thread.
Example:
Display.getDefault().asyncExec(new Runnable()
{
public void run()
{
//step 1: network connection involvement
//step 2: UI code to execute - example: opening a browser
}
});
From above, it has non-UI and UI code. If accessing the network takes time, UI thread will be blocked for a long time so that no other thread can able to get an access to execute other UI code.
That means, at any point of time - only one UI thread will be there i.e, Display thread.
To resolve this kind of things, we need to use jobs and invoke only necessary code in the UI thread.
new Job("Browser opening job...")
{
@Override
protected IStatus run(IProgressMonitor monitor)
{
//step 1: network connection involvement
Display.getDefault().asyncExec(new Runnable()
{
public void run()
{
//step 2: UI code to execute - example: opening a browser
}
});
return Status.OK_STATUS;
}
}.schedule();
Subscribe to:
Posts (Atom)