Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipse-dev] [cross-project-issues-dev] org.eclipse.equinox.common has added generics to API in org.eclipse.core.runtime package

Hi,

Coming a bit late to the party but I just saw in my code that I have
compiler errors because WorkbenchPart now has
----8<----
public <T> T getAdapter(Class<T> adapter)
----8<----

but my subclass overwrote it in 4.4 with
----8<----
@Override
public Object getAdapter(Class adapter)
----8<----

So do we really want to break ALL Views and Editors who used this - so
clearly this break source-compability?

Tom

On 20.02.15 19:20, Daniel Megert wrote:
> My advice is to go with the explicit version where one has to add the
> @SuppressWarnings("unchecked").
> 
> Dani
> 
> 
> 
> From:        Markus Keller/Zurich/IBM@IBMCH
> To:        Cross project issues <cross-project-issues-dev@xxxxxxxxxxx>,
> "General development mailing list of the Eclipse project."
> <eclipse-dev@xxxxxxxxxxx>
> Date:        20.02.2015 18:23
> Subject:        Re: [cross-project-issues-dev]
> org.eclipse.equinox.common has added generics to API in
> org.eclipse.core.runtime package
> Sent by:        cross-project-issues-dev-bounces@xxxxxxxxxxx
> ------------------------------------------------------------------------
> 
> 
> 
> Yeah, this basically hides the unsafe cast in the implementation of
> Class#cast(..). It has its advantages and disadvantages:
> 
> Pro: Performs an additional dynamic Class#isInstance(..) check that
> throws a CCE at the place where the unsafe cast happens => fail-fast is
> good (although the cast at the caller side also won't be far away; and
> that's how it used to work in the past).
> 
> Contra: Is less explicit than the SuppressWarnings version, since the
> type safety problem is not immediately visible at the code location
> where the unchecked cast happens.
> 
> => adapter.cast(..) is OK for me, but not a must.
> 
> Markus
> 
> 
> 
> From:        "Andrey Loskutov" <loskutov@xxxxxx>
> To:        cross-project-issues-dev@xxxxxxxxxxx
> Cc:        "General development mailing list of the Eclipse project."
> <eclipse-dev@xxxxxxxxxxx>, Cross project issues
> <cross-project-issues-dev@xxxxxxxxxxx>
> Date:        2015-02-20 15:35
> Subject:        Re: [cross-project-issues-dev]
> org.eclipse.equinox.common has added generics to API in
> org.eclipse.core.runtime package
> Sent by:        cross-project-issues-dev-bounces@xxxxxxxxxxx
> ------------------------------------------------------------------------
> 
> 
> 
> Hi,
> Before everyone starts to change getAdapter() implementation, please
> consider to user warning-free alternative:
>  
> Instead of writing:
>  
>        @SuppressWarnings("unchecked")
>       public <T> T getAdapter(Class<T> adapter) {
>               if (ICompilationUnit.class.equals(adapter))
>                       return (T) getCompilationUnit();
>               return null;
>       }
>  
> use Class.cast() API:
> 
>       public <T> T getAdapter(Class<T> adapter) {
>               if (ICompilationUnit.class.equals(adapter))
>                       return adapter.cast(getCompilationUnit());
>               return null;
>       }
>  
> Kind regards,
> Andrey Loskutov
> _
> __http://google.com/+AndreyLoskutov_
>  
>  *
> Gesendet:* Freitag, 20. Februar 2015 um 15:21 Uhr*
> Von:* "Thomas Watson" <tjwatson@xxxxxxxxxx>*
> An:* "Cross project issues" <cross-project-issues-dev@xxxxxxxxxxx>,
> "General development mailing list of the Eclipse project."
> <eclipse-dev@xxxxxxxxxxx>*
> Betreff:* [cross-project-issues-dev] org.eclipse.equinox.common has
> added generics to API in org.eclipse.core.runtime package
> See _https://bugs.eclipse.org/bugs/show_bug.cgi?id=442021_
> 
> Markus Keller wrote up an nice summary of what consumers should do to
> fix any warnings that may be caused by this change at
> _https://bugs.eclipse.org/bugs/show_bug.cgi?id=442021#c25_
> 
> Here is a copy of the recommendations if you are going to compile
> against the latest version of org.eclipse.equinox.common:
> 
> 1. In MANIFEST.MF, update your Require-Bundle:
>  org.eclipse.core.runtime;bundle-version="[3.11.0,4.0.0)", or
> org.eclipse.equinox.common;bundle-version="[3.7.0,4.0.0)", or update
> your Import-Package: org.eclipse.core.runtime; version="[3.5,4.0)"
> 
> 2. If your bundle re-exports one of these bundles, then you also have to
> make sure the minor version is incremented.
> 
> 3. Remove unnecessary casts (Clean Up, or Problems view > Quick Fix >
> Select All)
> 
> 4. Update implementations of IAdaptable#getAdapter(Class<T>), unless you
> override another implementation of that method that still uses the old
> signature.
> 
> Typical change:
> Old:
>       public Object getAdapter(Class adapter) {
>               if (ICompilationUnit.class.equals(adapter))
>                       return getCompilationUnit();
>               return null;
>       }
> 
> New:
>       @SuppressWarnings("unchecked")
>       public <T> T getAdapter(Class<T> adapter) {
>               if (ICompilationUnit.class.equals(adapter))
>                       return (T) getCompilationUnit();
>               return null;
>       }
> 
> 5. Update implementations of IAdapterFactory
> 
> Hint for 4. & 5.:
> - Open Type Hierarchy on IAdaptable, etc.
> - In the view menu, select a working set that contains your projects
> - In the methods list of the Type Hierarchy view, select the methods,
> and then click the first toolbar button (Lock View and Show Members in
> Hierarchy)
> 
> 
> Tom
> 
> _______________________________________________ cross-project-issues-dev
> mailing list cross-project-issues-dev@xxxxxxxxxxx To change your
> delivery options, retrieve your password, or unsubscribe from this list,
> visit
> _https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev________________________________________________
> cross-project-issues-dev mailing list
> cross-project-issues-dev@xxxxxxxxxxx
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit_
> __https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev________________________________________________
> cross-project-issues-dev mailing list
> cross-project-issues-dev@xxxxxxxxxxx
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
> https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev
> 
> 
> _______________________________________________
> eclipse-dev mailing list
> eclipse-dev@xxxxxxxxxxx
> To change your delivery options, retrieve your password, or unsubscribe from this list, visit
> https://dev.eclipse.org/mailman/listinfo/eclipse-dev
> 


-- 
Thomas Schindl, CTO
BestSolution.at EDV Systemhaus GmbH
Eduard-Bodem-Gasse 5-7, A-6020 Innsbruck
http://www.bestsolution.at/
Reg. Nr. FN 222302s am Firmenbuchgericht Innsbruck


Back to the top