Enum reverse lookup thread safety
Description
Activity
Show:
Edoardo Beutler 21 February 2017 at 16:37
Bad merge:
Code did not compile!
This merge removed a requiredimport com.google.common.base.Strings;
in MetaTagScriptService which lead to compile errors and failing Jenkins builds.
After fixing that, code still does not compile, since 10 tests are failing:
Failed tests: ECharsetTest.testGetCharset:22 EHttpEquivTest.testGetHttpEquiv:22 expected:<CONTENT_SECURITY_POLICY> but was:<Optional.of(CONTENT_SECURITY_POLICY)> ENameNonStandardTest.testGetName:24 expected:<CREATOR> but was:<Optional.of(CREATOR)> ENameStandardTest.testGetName:24 expected:<APPLICATION_NAME> but was:<Optional.of(APPLICATION_NAME)> EReferrerTest.testGetReferrer:17 expected:<NO_REFFERER> but was:<Optional.of(NO_REFFERER)> ERobotTest.testGetRobot:21 expected:<INDEX> but was:<Optional.of(INDEX)> EViewportTest.testGetViewport:18 expected:<HEIGHT> but was:<Optional.of(HEIGHT)> EOpenGraphTest.testGetOpenGraph:30 expected:<OPENGRAPH_TITLE> but was:<Optional.of(OPENGRAPH_TITLE)> ETwitterCardTypeTest.testGetTwitterCardType:16 expected:<SUMMARY> but was:<Optional.of(SUMMARY)> ETwitterTest.testGetTwitter:28 expected:<TWITTER_CARD> but was:<Optional.of(TWITTER_CARD)>
Marc Sladek 14 February 2017 at 10:36
PR reviewed, changes requested
Marc Sladek 7 February 2017 at 18:18Edited
@UNKNOWN_USER in the future please add pull request to jira issue and start testing with reviewer assigned
Done
Details
Priority
HighestAssignee
Nora DergutiNora Derguti(Deactivated)Reporter
Marc SladekMarc SladekStory Points
5Sprint
NoneFix versions
Details
Details
Priority
Assignee
Nora Derguti
Nora Derguti(Deactivated)Reporter
Marc Sladek
Marc SladekStory Points
5
Sprint
None
Fix versions
Clockify
Start / Stop
Clockify
Start / Stop
Clockify

Start / Stop
Created 7 February 2017 at 13:05
Updated 29 March 2017 at 16:47
Resolved 9 March 2017 at 14:49
Enums with a reverse value lookup are not thread safe, e.g. EAccessLevel:
private final static Map<String, EAccessLevel> ID_MAP = new HashMap<>(); @Nullable public static EAccessLevel getAccessLevel(@Nullable String identifier) { if (ID_MAP.isEmpty()) { for (EAccessLevel accessLevel : values()) { ID_MAP.put(accessLevel.getIdentifier(), accessLevel); } } return ID_MAP.get(identifier); }
could return null for existing identifier with multiple threads accessing it. Replace with a ReverseMap like in HtmlDoctype