diff options
| author | Pierre-Charles David | 2017-03-23 08:44:55 +0000 |
|---|---|---|
| committer | Pierre-Charles David | 2017-03-31 15:23:09 +0000 |
| commit | 11a08da87535d6321668a6e1365025288cb592e4 (patch) | |
| tree | 650905e9fc8a6a4dba32b10cfd11dcce10565f36 | |
| parent | b63b49030f0b3e516335a4b37526668098c38bac (diff) | |
| download | org.eclipse.sirius-11a08da87535d6321668a6e1365025288cb592e4.tar.gz org.eclipse.sirius-11a08da87535d6321668a6e1365025288cb592e4.tar.xz org.eclipse.sirius-11a08da87535d6321668a6e1365025288cb592e4.zip | |
[511763] Make PermissionService more resilient to misconfigurations
In case of a misconfigured IPermissionProvider extension, do not crash
with an NPE but provide helpful error message to help identify (and
fix) the root cause.
Bug: 511763
Change-Id: I09e97426635345aa623e88ceecb8dc02e164f73d
Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
4 files changed, 24 insertions, 8 deletions
diff --git a/plugins/org.eclipse.sirius.ecore.extender/plugin.properties b/plugins/org.eclipse.sirius.ecore.extender/plugin.properties index 887a0a2d61..c4c8c81f21 100644 --- a/plugins/org.eclipse.sirius.ecore.extender/plugin.properties +++ b/plugins/org.eclipse.sirius.ecore.extender/plugin.properties @@ -1,5 +1,5 @@ # ==================================================================== -# Copyright (c) 2013 THALES GLOBAL SERVICES +# Copyright (c) 2013, 2017 THALES GLOBAL SERVICES # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at @@ -26,4 +26,5 @@ ModelAccessorsRegistry_noResourceFound=No resource to get the ExtendedPackage ModelUtils_missingInputStream=Input Stream for the model to load cannot be null. ModelUtils_nullSerializationError=Cannot serialize null object. PermissionAuthorityRegistryImpl_noResourceMessage=No resource to get the ExtendedPackage +PermissionService_permissionProviderInstantiationError=An error occurred while trying to instantiate IPermissionProvider "{0}" from "{1}" ReferencesResolver_resolveNonContainedReferencesTask=Resolving non contained references diff --git a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/Messages.java b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/Messages.java index 22f78f5231..1848793f98 100644 --- a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/Messages.java +++ b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/Messages.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015, 2016 Obeo. + * Copyright (c) 2015, 2017 Obeo. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -57,6 +57,9 @@ public final class Messages { @TranslatableMessage public static String PermissionAuthorityRegistryImpl_noResourceMessage; + + @TranslatableMessage + public static String PermissionService_permissionProviderInstantiationError; @TranslatableMessage public static String ReferencesResolver_resolveNonContainedReferencesTask; diff --git a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/PermissionService.java b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/PermissionService.java index 4527fe1f65..c25e779d9e 100644 --- a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/PermissionService.java +++ b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/PermissionService.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2012 THALES GLOBAL SERVICES. + * Copyright (c) 2007, 2017 THALES GLOBAL SERVICES. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -86,7 +86,7 @@ public final class PermissionService { while (it.hasNext() && !foundSpecific) { PermissionProviderDescriptor permissionProviderDescriptor = it.next(); IPermissionProvider permissionProvider = permissionProviderDescriptor.getPermissionProvider(); - if (permissionProvider.provides(resourceSet)) { + if (permissionProvider != null && permissionProvider.provides(resourceSet)) { result = PermissionService.wrapPermissionAuthority(permissionProvider.getAuthority(resourceSet)); foundSpecific = true; } diff --git a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/descriptors/EclipsePermissionProviderDescriptor.java b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/descriptors/EclipsePermissionProviderDescriptor.java index 39ed278f49..da1d2b3bf7 100644 --- a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/descriptors/EclipsePermissionProviderDescriptor.java +++ b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/descriptors/EclipsePermissionProviderDescriptor.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011 THALES GLOBAL SERVICES. + * Copyright (c) 2011, 2017 THALES GLOBAL SERVICES and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -10,10 +10,16 @@ *******************************************************************************/ package org.eclipse.sirius.ecore.extender.business.internal.permission.descriptors; +import java.text.MessageFormat; + import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; - +import org.eclipse.core.runtime.IContributor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionProvider; +import org.eclipse.sirius.ecore.extender.business.internal.ExtenderPlugin; +import org.eclipse.sirius.ecore.extender.business.internal.Messages; import org.eclipse.sirius.ecore.extender.business.internal.permission.PermissionProviderDescriptor; /** @@ -23,6 +29,8 @@ import org.eclipse.sirius.ecore.extender.business.internal.permission.Permission */ public class EclipsePermissionProviderDescriptor extends AbstractPermissionProviderDescriptor implements PermissionProviderDescriptor { + private static final String PROVIDER_CLASS_ATTR = "providerClass"; //$NON-NLS-1$ + private IConfigurationElement configurationElement; /** @@ -50,9 +58,13 @@ public class EclipsePermissionProviderDescriptor extends AbstractPermissionProvi public IPermissionProvider getPermissionProvider() { if (permissionProvider == null) { try { - permissionProvider = (IPermissionProvider) configurationElement.createExecutableExtension("providerClass"); //$NON-NLS-1$ + permissionProvider = (IPermissionProvider) configurationElement.createExecutableExtension(EclipsePermissionProviderDescriptor.PROVIDER_CLASS_ATTR); } catch (final CoreException e) { - // silent catch. + String providerClassName = configurationElement.getAttribute(EclipsePermissionProviderDescriptor.PROVIDER_CLASS_ATTR); + IContributor contributor = configurationElement.getDeclaringExtension().getContributor(); + IStatus status = new Status(IStatus.ERROR, ExtenderPlugin.ID, + MessageFormat.format(Messages.PermissionService_permissionProviderInstantiationError, providerClassName, contributor.getName()), e); + ExtenderPlugin.getPlugin().getLog().log(status); } } return permissionProvider; |
