Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 195949 Details for
Bug 346089
Consider to bypass AdapterManager in Widget#getAdapter for Widget LCA
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Patch
clipboard.txt (text/plain), 17.16 KB, created by
RĂ¼diger Herrmann
on 2011-05-18 07:14:52 EDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
RĂ¼diger Herrmann
Created:
2011-05-18 07:14:52 EDT
Size:
17.16 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.rap.rwt >Index: src/org/eclipse/rwt/internal/engine/ApplicationContextUtil.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/rwt/internal/engine/ApplicationContextUtil.java,v >retrieving revision 1.17 >diff -u -r1.17 ApplicationContextUtil.java >--- src/org/eclipse/rwt/internal/engine/ApplicationContextUtil.java 4 May 2011 16:46:56 -0000 1.17 >+++ src/org/eclipse/rwt/internal/engine/ApplicationContextUtil.java 18 May 2011 11:10:21 -0000 >@@ -59,6 +59,7 @@ > JSLibraryConcatenator.class, > TextSizeStorage.class, > ProbeStore.class, >+ LifeCycleAdapterFactory.class > }; > > public static ApplicationContext registerDefaultApplicationContext( ServletContext context ) { >Index: src/org/eclipse/rwt/internal/engine/RWTFactory.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/rwt/internal/engine/RWTFactory.java,v >retrieving revision 1.16 >diff -u -r1.16 RWTFactory.java >--- src/org/eclipse/rwt/internal/engine/RWTFactory.java 4 May 2011 16:46:56 -0000 1.16 >+++ src/org/eclipse/rwt/internal/engine/RWTFactory.java 18 May 2011 11:10:21 -0000 >@@ -125,6 +125,10 @@ > return ( ResourceManagerProvider )getApplicationSingleton( ResourceManagerProvider.class ); > } > >+ public static LifeCycleAdapterFactory getLifeCycleAdapterFactory() { >+ return ( LifeCycleAdapterFactory )getApplicationSingleton( LifeCycleAdapterFactory.class ); >+ } >+ > private static Object getApplicationSingleton( Class type ) { > return ApplicationContextUtil.getInstance().getInstance( type ); > } >Index: src/org/eclipse/rwt/internal/engine/RWTServletContextListener.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/rwt/internal/engine/RWTServletContextListener.java,v >retrieving revision 1.36 >diff -u -r1.36 RWTServletContextListener.java >--- src/org/eclipse/rwt/internal/engine/RWTServletContextListener.java 4 May 2011 11:09:07 -0000 1.36 >+++ src/org/eclipse/rwt/internal/engine/RWTServletContextListener.java 18 May 2011 11:10:21 -0000 >@@ -21,9 +21,11 @@ > > import org.eclipse.rwt.AdapterFactory; > import org.eclipse.rwt.branding.AbstractBranding; >-import org.eclipse.rwt.internal.*; >+import org.eclipse.rwt.internal.AdapterManager; >+import org.eclipse.rwt.internal.EngineConfig; > import org.eclipse.rwt.internal.lifecycle.*; >-import org.eclipse.rwt.internal.resources.*; >+import org.eclipse.rwt.internal.resources.DefaultResourceManagerFactory; >+import org.eclipse.rwt.internal.resources.JSLibraryServiceHandler; > import org.eclipse.rwt.internal.service.SettingStoreManager; > import org.eclipse.rwt.internal.textsize.MeasurementListener; > import org.eclipse.rwt.internal.theme.*; >@@ -36,8 +38,6 @@ > import org.eclipse.rwt.resources.IResourceManagerFactory; > import org.eclipse.rwt.service.ISettingStoreFactory; > import org.eclipse.rwt.service.RWTFileSettingStoreFactory; >-import org.eclipse.swt.widgets.Display; >-import org.eclipse.swt.widgets.Widget; > > > public final class RWTServletContextListener implements ServletContextListener { >@@ -267,10 +267,6 @@ > } > } > } >- } else { >- LifeCycleAdapterFactory lifeCycleAdapterFactory = new LifeCycleAdapterFactory(); >- adapterManager.registerAdapters( Widget.class, lifeCycleAdapterFactory ); >- adapterManager.registerAdapters( Display.class, lifeCycleAdapterFactory ); > } > } > >Index: src/org/eclipse/rwt/internal/lifecycle/DisplayUtil.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/rwt/internal/lifecycle/DisplayUtil.java,v >retrieving revision 1.8 >diff -u -r1.8 DisplayUtil.java >--- src/org/eclipse/rwt/internal/lifecycle/DisplayUtil.java 25 Apr 2011 11:32:35 -0000 1.8 >+++ src/org/eclipse/rwt/internal/lifecycle/DisplayUtil.java 18 May 2011 11:10:21 -0000 >@@ -11,8 +11,6 @@ > ******************************************************************************/ > package org.eclipse.rwt.internal.lifecycle; > >-import java.text.MessageFormat; >- > import org.eclipse.rwt.lifecycle.ILifeCycleAdapter; > import org.eclipse.rwt.lifecycle.IWidgetAdapter; > import org.eclipse.swt.widgets.Display; >@@ -47,11 +45,7 @@ > return getAdapter( display ).getId(); > } > >- private static void throwAdapterException( final Class clazz ) { >- String text = "Could not retrieve an instance of ''{0}''. Probably the " >- + "AdapterFactory was not properly registered."; >- Object[] param = new Object[]{ clazz.getName() }; >- String msg = MessageFormat.format( text, param ); >- throw new IllegalStateException( msg ); >+ private static void throwAdapterException( Class clazz ) { >+ throw new IllegalStateException( "Failed to obtain adapter: " + clazz.getName() ); > } > } >Index: src/org/eclipse/rwt/internal/lifecycle/LifeCycleAdapterFactory.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/rwt/internal/lifecycle/LifeCycleAdapterFactory.java,v >retrieving revision 1.12 >diff -u -r1.12 LifeCycleAdapterFactory.java >--- src/org/eclipse/rwt/internal/lifecycle/LifeCycleAdapterFactory.java 2 May 2011 17:55:10 -0000 1.12 >+++ src/org/eclipse/rwt/internal/lifecycle/LifeCycleAdapterFactory.java 18 May 2011 11:10:21 -0000 >@@ -14,7 +14,6 @@ > import java.util.HashMap; > import java.util.Map; > >-import org.eclipse.rwt.AdapterFactory; > import org.eclipse.rwt.internal.util.ClassInstantiationException; > import org.eclipse.rwt.internal.util.ClassUtil; > import org.eclipse.rwt.lifecycle.ILifeCycleAdapter; >@@ -24,61 +23,34 @@ > import org.eclipse.swt.widgets.Widget; > > >-public final class LifeCycleAdapterFactory implements AdapterFactory { >+public final class LifeCycleAdapterFactory { > >- private static final Class[] ADAPTER_LIST = new Class[] { >- ILifeCycleAdapter.class >- }; >- >- private final Object displayAdapterLock; > private final Object widgetAdaptersLock; >- // Holds the single display life cycle adapter. MUST be created lazily because its constructor >- // needs a resource manager to be in place >- private IDisplayLifeCycleAdapter displayAdapter; >+ private final IDisplayLifeCycleAdapter displayAdapter; > // Maps widget classes to their respective life cycle adapters > // Key: Class<Widget>, value: IWidgetLifeCycleAdapter > private final Map widgetAdapters; > >- > public LifeCycleAdapterFactory() { >- displayAdapterLock = new Object(); > widgetAdaptersLock = new Object(); > widgetAdapters = new HashMap(); >+ displayAdapter = DisplayLCAFacade.getDisplayLCA(); > } > > public Object getAdapter( Object adaptable, Class adapter ) { > Object result = null; > if( isDisplayLCA( adaptable, adapter ) ) { >- result = getDisplayLCA(); >+ result = displayAdapter; > } else if( isWidgetLCA( adaptable, adapter ) ) { > result = getWidgetLCA( adaptable.getClass() ); > } > return result; > } > >- public Class[] getAdapterList() { >- return ADAPTER_LIST; >- } >- >- /////////////////////////////////////////////////////////// >- // Helping methods to obtain life cycle adapter for display >- > private static boolean isDisplayLCA( Object adaptable, Class adapter ) { > return adaptable instanceof Display && adapter == ILifeCycleAdapter.class; > } > >- private synchronized ILifeCycleAdapter getDisplayLCA() { >- synchronized( displayAdapterLock ) { >- if( displayAdapter == null ) { >- displayAdapter = DisplayLCAFacade.getDisplayLCA(); >- } >- return displayAdapter; >- } >- } >- >- //////////////////////////////////////////////////////////// >- // Helping methods to obtain life cycle adapters for widgets >- > private static boolean isWidgetLCA( Object adaptable, Class adapter ) { > return adaptable instanceof Widget && adapter == ILifeCycleAdapter.class; > } >Index: src/org/eclipse/rwt/lifecycle/WidgetUtil.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/rwt/lifecycle/WidgetUtil.java,v >retrieving revision 1.26 >diff -u -r1.26 WidgetUtil.java >--- src/org/eclipse/rwt/lifecycle/WidgetUtil.java 18 May 2011 08:21:35 -0000 1.26 >+++ src/org/eclipse/rwt/lifecycle/WidgetUtil.java 18 May 2011 11:10:21 -0000 >@@ -205,11 +205,7 @@ > } > > private static void throwAdapterException( Class clazz ) { >- String text = "Could not retrieve an instance of ''{0}''. Probably the " >- + "AdapterFactory was not properly registered."; >- Object[] param = new Object[]{ clazz.getName() }; >- String msg = MessageFormat.format( text, param ); >- throw new IllegalStateException( msg ); >+ throw new IllegalStateException( "Failed to obtain adapter: " + clazz.getName() ); > } > > private static boolean validateVariantString( String variant ) { >Index: src/org/eclipse/swt/widgets/Display.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java,v >retrieving revision 1.130 >diff -u -r1.130 Display.java >--- src/org/eclipse/swt/widgets/Display.java 4 May 2011 11:23:39 -0000 1.130 >+++ src/org/eclipse/swt/widgets/Display.java 18 May 2011 11:10:22 -0000 >@@ -190,6 +190,7 @@ > private Control focusControl; > private final Monitor monitor; > private IDisplayAdapter displayAdapter; >+ private IDisplayLifeCycleAdapter displayLCA; > private WidgetAdapter widgetAdapter; > private Set closeListeners; > private Set disposeListeners; >@@ -749,21 +750,40 @@ > public Object getAdapter( final Class adapter ) { > Object result = null; > if( adapter == IDisplayAdapter.class ) { >- if( displayAdapter == null ) { >- displayAdapter = new DisplayAdapter(); >- } >- result = displayAdapter; >+ result = getDisplayAdapter(); > } else if( adapter == IWidgetAdapter.class ) { >- if( widgetAdapter == null ) { >- widgetAdapter = new WidgetAdapter( "w1" ); >- } >- result = widgetAdapter; >+ result = getWidgetAdapter(); >+ } else if( adapter == ILifeCycleAdapter.class ) { >+ result = getDisplayLifeCycleAdapter(); > } else { > result = RWTFactory.getAdapterManager().getAdapter( this, adapter ); > } > return result; > } > >+ private Object getDisplayAdapter() { >+ if( displayAdapter == null ) { >+ displayAdapter = new DisplayAdapter(); >+ } >+ return displayAdapter; >+ } >+ >+ private Object getWidgetAdapter() { >+ if( widgetAdapter == null ) { >+ widgetAdapter = new WidgetAdapter( "w1" ); >+ } >+ return widgetAdapter; >+ } >+ >+ private Object getDisplayLifeCycleAdapter() { >+ if( displayLCA == null ) { >+ LifeCycleAdapterFactory factory = RWTFactory.getLifeCycleAdapterFactory(); >+ Object adapter = factory.getAdapter( this, ILifeCycleAdapter.class ); >+ displayLCA = ( IDisplayLifeCycleAdapter )adapter; >+ } >+ return displayLCA; >+ } >+ > /////////////////// > // Shell management > >Index: src/org/eclipse/swt/widgets/Widget.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Widget.java,v >retrieving revision 1.51 >diff -u -r1.51 Widget.java >--- src/org/eclipse/swt/widgets/Widget.java 2 May 2011 15:15:31 -0000 1.51 >+++ src/org/eclipse/swt/widgets/Widget.java 18 May 2011 11:10:22 -0000 >@@ -12,12 +12,12 @@ > package org.eclipse.swt.widgets; > > import org.eclipse.rwt.Adaptable; >-import org.eclipse.rwt.internal.AdapterManager; > import org.eclipse.rwt.internal.engine.RWTFactory; > import org.eclipse.rwt.internal.events.EventAdapter; > import org.eclipse.rwt.internal.events.IEventAdapter; >+import org.eclipse.rwt.internal.lifecycle.LifeCycleAdapterFactory; > import org.eclipse.rwt.internal.theme.IThemeAdapter; >-import org.eclipse.rwt.lifecycle.IWidgetAdapter; >+import org.eclipse.rwt.lifecycle.*; > import org.eclipse.swt.SWT; > import org.eclipse.swt.SWTException; > import org.eclipse.swt.events.DisposeEvent; >@@ -94,13 +94,12 @@ > int state; > Display display; > private Object data; >- private AdapterManager adapterManager; >+ private AbstractWidgetLCA widgetLCA; > private IWidgetAdapter widgetAdapter; > private IEventAdapter eventAdapter; > private UntypedEventAdapter untypedAdapter; > private IWidgetGraphicsAdapter widgetGraphicsAdapter; > >- > Widget() { > // prevent instantiation from outside this package > } >@@ -152,39 +151,36 @@ > * from application code. > * </p> > */ >- public Object getAdapter( final Class adapter ) { >+ public Object getAdapter( Class adapter ) { >+ // The AdapterManager is bypassed for the sake of performance. > Object result; > if( adapter == IEventAdapter.class ) { >- // Note: This is not implemented via the AdapterManager, since the >- // manager's mapping mechanism prevents the component being released >- // unless the session is invalidated. >+ // Note: This is not implemented via the AdapterManager since the manager's mapping mechanism >+ // prevents the component being released unless the session is invalidated. > if( eventAdapter == null ) { > eventAdapter = new EventAdapter(); > } > result = eventAdapter; > } else if( adapter == IWidgetAdapter.class ) { >- // [fappel] Directly return the WidgetAdapter instead of consulting the >- // adapter factory. This is done for performance reasons and must not >- // be changed without good reason. > if( widgetAdapter == null ) { > widgetAdapter = new WidgetAdapter(); > } > result = widgetAdapter; > } else if( adapter == IThemeAdapter.class ) { >- // This also bypasses the AdapterManager for the sake of performance. >- // ThemeAdapters are requested frequently during size computations. > result = RWTFactory.getThemeAdapterManager().getThemeAdapter( this ); > } else if( adapter == IWidgetGraphicsAdapter.class ) { > if( widgetGraphicsAdapter == null ) { > widgetGraphicsAdapter = new WidgetGraphicsAdapter(); > } > result = widgetGraphicsAdapter; >- } else { >- // [fappel] Buffer the adapterManager to improve performance >- if( adapterManager == null ) { >- adapterManager = RWTFactory.getAdapterManager(); >+ } else if( adapter == ILifeCycleAdapter.class ) { >+ if( widgetLCA == null ) { >+ LifeCycleAdapterFactory factory = RWTFactory.getLifeCycleAdapterFactory(); >+ widgetLCA = ( AbstractWidgetLCA )factory.getAdapter( this, ILifeCycleAdapter.class ); > } >- result = adapterManager.getAdapter( this, adapter ); >+ result = widgetLCA; >+ } else { >+ result = RWTFactory.getAdapterManager().getAdapter( this, adapter ); > } > return result; > } >@@ -811,7 +807,6 @@ > } > > void releaseWidget() { >- adapterManager = null; > untypedAdapter = null; > state |= DISPOSED; > } >#P org.eclipse.rap.rwt.test >Index: src/org/eclipse/rwt/internal/engine/RWTFactory_Test.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt.test/org.eclipse.rap.rwt.test/src/org/eclipse/rwt/internal/engine/RWTFactory_Test.java,v >retrieving revision 1.3 >diff -u -r1.3 RWTFactory_Test.java >--- src/org/eclipse/rwt/internal/engine/RWTFactory_Test.java 4 May 2011 16:46:55 -0000 1.3 >+++ src/org/eclipse/rwt/internal/engine/RWTFactory_Test.java 18 May 2011 11:10:23 -0000 >@@ -86,6 +86,9 @@ > > assertNotNull( RWTFactory.getProbeStore() ); > assertSame( RWTFactory.getProbeStore(), RWTFactory.getProbeStore() ); >+ >+ assertNotNull( RWTFactory.getLifeCycleAdapterFactory() ); >+ assertSame( RWTFactory.getLifeCycleAdapterFactory(), RWTFactory.getLifeCycleAdapterFactory() ); > } > > protected void setUp() throws Exception { >#P org.eclipse.rap.ui >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.ui/org.eclipse.rap.ui/plugin.xml,v >retrieving revision 1.38 >diff -u -r1.38 plugin.xml >--- plugin.xml 18 May 2011 07:31:04 -0000 1.38 >+++ plugin.xml 18 May 2011 11:10:25 -0000 >@@ -2384,17 +2384,6 @@ > </extension> > > <!-- RAP specific --> >- <extension >- id="org.eclipse.ui.workbench.adapterfactories" >- point="org.eclipse.rap.ui.adapterfactory"> >- <factory >- factoryClass="org.eclipse.rwt.internal.lifecycle.LifeCycleAdapterFactory" >- adaptableClass="org.eclipse.swt.widgets.Widget"/> >- <factory >- factoryClass="org.eclipse.rwt.internal.lifecycle.LifeCycleAdapterFactory" >- adaptableClass="org.eclipse.swt.widgets.Display"/> >- </extension> >- > <extension > id="org.eclipse.ui.workbench.currentPhase" > point="org.eclipse.rap.ui.phaselistener">
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 346089
:
195949
|
196083