# HG changeset patch # User Jaroslav Tulach # Date 1422296898 -3600 # Node ID 3eb54c43c5c3beda5c4f1b4379b12692318f5430 # Parent e5fab231bc1bd86c9bff53a67515ddfaef7d2ca6 #249545: Only call fillContext once per registered implementation class diff -r e5fab231bc1b -r 3eb54c43c5c3 context/pom.xml --- a/context/pom.xml Tue Jan 13 16:41:10 2015 +0100 +++ b/context/pom.xml Mon Jan 26 19:28:18 2015 +0100 @@ -33,9 +33,14 @@ org.testng testng - 6.8.1 test + + org.netbeans.api + org-openide-util-lookup + test + jar + Representation of an HTML page context a Java program operates in. diff -r e5fab231bc1b -r 3eb54c43c5c3 context/src/main/java/org/netbeans/html/context/spi/Contexts.java --- a/context/src/main/java/org/netbeans/html/context/spi/Contexts.java Tue Jan 13 16:41:10 2015 +0100 +++ b/context/src/main/java/org/netbeans/html/context/spi/Contexts.java Mon Jan 26 19:28:18 2015 +0100 @@ -46,7 +46,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import java.util.HashSet; import java.util.ServiceLoader; +import java.util.Set; import net.java.html.BrwsrCtx; import org.netbeans.html.context.impl.CtxImpl; @@ -112,12 +114,19 @@ } catch (SecurityException ex) { l = null; } + Set> classes = new HashSet>(); for (Provider cp : ServiceLoader.load(Provider.class, l)) { + if (!classes.add(cp.getClass())) { + continue; + } cp.fillContext(cb, requestor); found = true; } try { for (Provider cp : ServiceLoader.load(Provider.class, Provider.class.getClassLoader())) { + if (!classes.add(cp.getClass())) { + continue; + } cp.fillContext(cb, requestor); found = true; } @@ -128,6 +137,9 @@ } if (!found) { for (Provider cp : ServiceLoader.load(Provider.class)) { + if (!classes.add(cp.getClass())) { + continue; + } cp.fillContext(cb, requestor); found = true; }