diff options
author | Nicolas FAUVERGUE | 2019-01-18 17:25:10 +0000 |
---|---|---|
committer | vincent lorenzo | 2019-01-21 09:00:15 +0000 |
commit | c022864a86c36b495cf76c2f67eb165464b46720 (patch) | |
tree | 31c6381832df53d77dc2fce8487e3428588e67c0 | |
parent | 5e61a5490724d2ddf52caf45af21744482e8ada8 (diff) | |
download | org.eclipse.papyrus-c022864a86c36b495cf76c2f67eb165464b46720.tar.gz org.eclipse.papyrus-c022864a86c36b495cf76c2f67eb165464b46720.tar.xz org.eclipse.papyrus-c022864a86c36b495cf76c2f67eb165464b46720.zip |
Bug 543494 - InternationalizationUMLItemProviderAdapterFactory fails to
find existing adapters
To avoid possible performance issues, we implement an
internationalization condition in the adapt method.
+ Test for the fix
NB: An error with the MANIFEST version was detected, but i cannot do
something nowadays. I enter a bug for the next release.
Change-Id: I1044139e40b0b45d57c18be4821a6486df7e9aec
Signed-off-by: Nicolas FAUVERGUE <nicolas.fauvergue@cea.fr>
5 files changed, 105 insertions, 19 deletions
diff --git a/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.edit/META-INF/MANIFEST.MF b/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.edit/META-INF/MANIFEST.MF index 1cc4255dd14..6268ae158c9 100644 --- a/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.edit/META-INF/MANIFEST.MF +++ b/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.edit/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.papyrus.uml.internationalization.edit;singleton:=true -Bundle-Version: 1.100.0.qualifier +Bundle-Version: 1.100.100.qualifier Bundle-ClassPath: . Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.edit/pom.xml b/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.edit/pom.xml index 1184e521ed7..0a3350579ba 100644 --- a/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.edit/pom.xml +++ b/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.edit/pom.xml @@ -8,6 +8,6 @@ <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>org.eclipse.papyrus.uml.internationalization.edit</artifactId> - <version>1.100.0-SNAPSHOT</version> + <version>1.100.100-SNAPSHOT</version> <packaging>eclipse-plugin</packaging> </project>
\ No newline at end of file diff --git a/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.edit/src/org/eclipse/papyrus/uml/internationalization/edit/providers/InternationalizationUMLItemProviderAdapterFactory.java b/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.edit/src/org/eclipse/papyrus/uml/internationalization/edit/providers/InternationalizationUMLItemProviderAdapterFactory.java index 7288dfa0e55..564300fe087 100644 --- a/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.edit/src/org/eclipse/papyrus/uml/internationalization/edit/providers/InternationalizationUMLItemProviderAdapterFactory.java +++ b/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.edit/src/org/eclipse/papyrus/uml/internationalization/edit/providers/InternationalizationUMLItemProviderAdapterFactory.java @@ -1,6 +1,6 @@ /***************************************************************************** - * Copyright (c) 2017 Christian W. Damus and others. - * + * Copyright (c) 2017, 2019 CEA LIST, Christian W. Damus and others. + * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -10,7 +10,8 @@ * * Contributors: * Christian W. Damus - Initial API and implementation - * + * Nicolas FAUVERGUE (CEA LIST) - Bug 543494 + * *****************************************************************************/ package org.eclipse.papyrus.uml.internationalization.edit.providers; @@ -82,7 +83,7 @@ public class InternationalizationUMLItemProviderAdapterFactory /** * Creates a listener on the internationalization preferences utility that will * be notified when the settings for any resource change. - * + * * @return the preference listener */ private InternationalizationPreferenceListener createPreferenceListener() { @@ -120,7 +121,7 @@ public class InternationalizationUMLItemProviderAdapterFactory /** * Create an adapter that will check the internationalization status of * resources as they are added to any of my contextual resource sets. - * + * * @return the resource-set adapter */ private Adapter createResourceSetAdapter() { @@ -172,7 +173,7 @@ public class InternationalizationUMLItemProviderAdapterFactory /** * Queries whether an {@code object} requires i18n support. - * + * * @param object * an object * @return whether it needs i18n @@ -193,7 +194,7 @@ public class InternationalizationUMLItemProviderAdapterFactory /** * Discover the internationalization status of a newly encountered resource set. - * + * * @param resourceSet * a resource set now encountered */ @@ -213,7 +214,7 @@ public class InternationalizationUMLItemProviderAdapterFactory /** * Discover the internationalization status of a newly encountered resource. - * + * * @param resource * a resource now encountered */ @@ -251,4 +252,18 @@ public class InternationalizationUMLItemProviderAdapterFactory uml.setParentAdapterFactory(parentAdapterFactory); } + /** + * We implement this method to avoid possible performance issues to adapt elements when it is not needed. + * {@inheritDoc} + * + * @see org.eclipse.uml2.uml.edit.providers.UMLItemProviderAdapterFactory#adapt(org.eclipse.emf.common.notify.Notifier, java.lang.Object) + */ + @Override + public Adapter adapt(final Notifier notifier, final Object type) { + if (notifier instanceof EObject && !needsInterationalization((EObject) notifier)) { + return uml.adapt(notifier, type); + } + return super.adapt(notifier, this); + } + } diff --git a/tests/junit/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.tests/src/org/eclipse/papyrus/uml/internationalization/tests/tests/AllTests.java b/tests/junit/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.tests/src/org/eclipse/papyrus/uml/internationalization/tests/tests/AllTests.java index 6229677c149..39fcb40abb1 100644 --- a/tests/junit/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.tests/src/org/eclipse/papyrus/uml/internationalization/tests/tests/AllTests.java +++ b/tests/junit/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.tests/src/org/eclipse/papyrus/uml/internationalization/tests/tests/AllTests.java @@ -1,6 +1,6 @@ /***************************************************************************** - * Copyright (c) 2016, 2017 CEA LIST, Christian W. Damus, and others. - * + * Copyright (c) 2016-2017, 2019 CEA LIST, Christian W. Damus, and others. + * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -11,21 +11,23 @@ * Contributors: * Nicolas FAUVERGUE (CEA LIST) nicolas.fauvergue@cea.fr - Initial API and implementation * Christian W. Damus - bug 528343 - * + * Nicolas FAUVERGUE (CEA LIST) nicolas.fauvergue@cea.fr - Bug 543494 + * *****************************************************************************/ package org.eclipse.papyrus.uml.internationalization.tests.tests; -import org.junit.runner.RunWith; import org.eclipse.papyrus.junit.framework.classification.ClassificationSuite; +import org.junit.runner.RunWith; import org.junit.runners.Suite.SuiteClasses; @RunWith(ClassificationSuite.class) -@SuiteClasses({ - UMLInternationalizationChangePreferencesTest.class, - UMLInternationalizationChangeLanguageTest.class, - InternationalizationUMLItemProviderAdapterFactoryTest.class, +@SuiteClasses({ + UMLInternationalizationChangePreferencesTest.class, + UMLInternationalizationChangeLanguageTest.class, + InternationalizationUMLItemProviderAdapterFactoryTest.class, + InternationalizationAdapterTest.class, }) public class AllTests { - + } diff --git a/tests/junit/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.tests/src/org/eclipse/papyrus/uml/internationalization/tests/tests/InternationalizationAdapterTest.java b/tests/junit/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.tests/src/org/eclipse/papyrus/uml/internationalization/tests/tests/InternationalizationAdapterTest.java new file mode 100644 index 00000000000..5361cf3de18 --- /dev/null +++ b/tests/junit/plugins/uml/internationalization/org.eclipse.papyrus.uml.internationalization.tests/src/org/eclipse/papyrus/uml/internationalization/tests/tests/InternationalizationAdapterTest.java @@ -0,0 +1,69 @@ +/***************************************************************************** + * Copyright (c) 2019 CEA LIST, and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Nicolas FAUVERGUE (CEA LIST) nicolas.fauvergue@cea.fr - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.uml.internationalization.tests.tests; + +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceImpl; +import org.eclipse.emf.edit.provider.ComposedAdapterFactory; +import org.eclipse.emf.edit.provider.IItemLabelProvider; +import org.eclipse.papyrus.infra.core.resource.ModelSet; +import org.eclipse.papyrus.uml.internationalization.edit.providers.InternationalizationUMLItemProviderAdapterFactory; +import org.eclipse.uml2.uml.Abstraction; +import org.eclipse.uml2.uml.UMLFactory; +import org.junit.Assert; +import org.junit.Test; + +/** + * This class allows to test the uml internationalization adapter validation. + */ +public class InternationalizationAdapterTest { + + /** + * This test allows to test the label provider adapter for UML element (here abstraction for example). + */ + @Test + public void testLabelProviderAdapter() { + + final Abstraction abstraction = UMLFactory.eINSTANCE.createAbstraction(); + + // Add abstraction to a resource and a resourceSet. By default this configuration leads to not needsInterationalization + final Resource resource = new ResourceImpl(); + resource.getContents().add(abstraction); + + final ResourceSet resourceSet = new ModelSet(); + resourceSet.getResources().add(resource); + + // There should be a CacheAdapter + Assert.assertEquals(1, abstraction.eAdapters().size()); + + final ComposedAdapterFactory composedAdapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); + composedAdapterFactory.insertAdapterFactory(new InternationalizationUMLItemProviderAdapterFactory()); + + // Successive adaptations to IItemLabelProvider should always reveal the same provider + Adapter labelProviderAdapter1 = composedAdapterFactory.adapt(abstraction, IItemLabelProvider.class); + Assert.assertTrue(labelProviderAdapter1 instanceof IItemLabelProvider); + Assert.assertEquals(2, abstraction.eAdapters().size()); + Adapter labelProviderAdapter2 = composedAdapterFactory.adapt(abstraction, IItemLabelProvider.class); + Assert.assertTrue(labelProviderAdapter2 instanceof IItemLabelProvider); + Assert.assertEquals(labelProviderAdapter1, labelProviderAdapter2); + + Assert.assertEquals(2, abstraction.eAdapters().size()); + + } + +}
\ No newline at end of file |