5656 * @author Radek Matous
5757 */
5858public final class FileObjectFactory {
59- public static final Map <File , FileObjectFactory > AllFactories = new HashMap <File , FileObjectFactory >();
59+ public static final Map <File , FileObjectFactory > AllFactories = new HashMap <>();
6060 public static boolean WARNINGS = true ;
61+
62+ /// identity object used as key in WeakHashMap
63+ private record Key (int id ) {}
64+
6165 //@GuardedBy("allIBaseLock")
62- final Map <Integer , Object > allIBaseFileObjects = new WeakHashMap <Integer , Object >();
66+ final Map <Key , Object > allIBaseFileObjects = new WeakHashMap <>();
67+
6368 final ReadWriteLock allIBaseLock = new ReentrantReadWriteLock ();
6469 private BaseFileObj root ;
6570 private static final Logger LOG_REFRESH = Logger .getLogger ("org.netbeans.modules.masterfs.REFRESH" ); // NOI18N
@@ -604,14 +609,14 @@ public static boolean isParentOf(final File dir, final File file) {
604609 }
605610
606611 public final void rename (Set <BaseFileObj > changeId ) {
607- final Map <Integer , Object > toRename = new HashMap <Integer , Object >();
612+ final Map <Key , Object > toRename = new HashMap <>();
608613 allIBaseLock .writeLock ().lock ();
609614 try {
610- final Iterator <Map .Entry <Integer , Object >> it = allIBaseFileObjects .entrySet ().iterator ();
615+ final Iterator <Map .Entry <Key , Object >> it = allIBaseFileObjects .entrySet ().iterator ();
611616 while (it .hasNext ()) {
612- Map .Entry <Integer , Object > entry = it .next ();
617+ Map .Entry <Key , Object > entry = it .next ();
613618 final Object obj = entry .getValue ();
614- final Integer key = entry .getKey ();
619+ final Key key = entry .getKey ();
615620 if (!(obj instanceof List <?>)) {
616621 @ SuppressWarnings ("unchecked" )
617622 final WeakReference <BaseFileObj > ref = (WeakReference <BaseFileObj >) obj ;
@@ -633,8 +638,8 @@ public final void rename(Set<BaseFileObj> changeId) {
633638 }
634639 }
635640
636- for (Map .Entry <Integer , Object > entry : toRename .entrySet ()) {
637- Integer key = entry .getKey ();
641+ for (Map .Entry <Key , Object > entry : toRename .entrySet ()) {
642+ Key key = entry .getKey ();
638643 Object previous = allIBaseFileObjects .remove (key );
639644 if (previous instanceof List <?>) {
640645 List <?> list = (List <?>) previous ;
@@ -655,7 +660,7 @@ public final BaseFileObj getCachedOnly(final File file) {
655660 }
656661 public final BaseFileObj getCachedOnly (final File file , boolean checkExtension ) {
657662 BaseFileObj retval ;
658- final Integer id = NamingFactory .createID (file );
663+ final Key id = new Key ( NamingFactory .createID (file ) );
659664 allIBaseLock .readLock ().lock ();
660665 try {
661666 final Object value = allIBaseFileObjects .get (id );
@@ -701,15 +706,16 @@ private static BaseFileObj getReference(final List<?> list, final File file) {
701706 private BaseFileObj putInCache (final BaseFileObj newValue , final Integer id ) {
702707 allIBaseLock .writeLock ().lock ();
703708 try {
709+ Key key = new Key (id );
704710 final WeakReference <BaseFileObj > newRef = new WeakReference <BaseFileObj >(newValue );
705- final Object listOrReference = allIBaseFileObjects .put (id , newRef );
711+ final Object listOrReference = allIBaseFileObjects .put (key , newRef );
706712
707713 if (listOrReference != null ) {
708714 if (listOrReference instanceof List <?>) {
709715 @ SuppressWarnings ("unchecked" )
710716 List <Reference <BaseFileObj >> list = (List <Reference <BaseFileObj >>) listOrReference ;
711717 list .add (newRef );
712- allIBaseFileObjects .put (id , listOrReference );
718+ allIBaseFileObjects .put (key , listOrReference );
713719 } else {
714720 assert (listOrReference instanceof WeakReference <?>);
715721 @ SuppressWarnings ("unchecked" )
@@ -720,7 +726,7 @@ private BaseFileObj putInCache(final BaseFileObj newValue, final Integer id) {
720726 final List <Reference <BaseFileObj >> l = new ArrayList <Reference <BaseFileObj >>();
721727 l .add (oldRef );
722728 l .add (newRef );
723- allIBaseFileObjects .put (id , l );
729+ allIBaseFileObjects .put (key , l );
724730 }
725731 }
726732 }
0 commit comments