don't allow clients to modify cached extensions (IDEA-155455)

This commit is contained in:
peter
2016-09-14 14:07:03 +02:00
parent e90880ab54
commit cc66feac51
2 changed files with 16 additions and 1 deletions
@@ -197,7 +197,7 @@ public class ExtensionPointImpl<T> implements ExtensionPoint<T> {
}
}
}
return result;
return result.length == 0 ? result : result.clone();
}
@Override
@@ -24,6 +24,7 @@ import org.junit.After;
import org.junit.Test;
import org.picocontainer.defaults.DefaultPicoContainer;
import java.util.Arrays;
import java.util.List;
import static org.hamcrest.Matchers.*;
@@ -248,6 +249,20 @@ public class ExtensionPointImplTest {
assertThat(ourTestLog.errors(), empty());
}
@Test
public void clientsCannotModifyCachedExtensions() {
ExtensionPoint<Integer> extensionPoint = buildExtensionPoint(Integer.class);
extensionPoint.registerExtension(4);
extensionPoint.registerExtension(2);
Integer[] extensions = extensionPoint.getExtensions();
assertEquals(ContainerUtil.newArrayList(4, 2), Arrays.asList(extensions));
Arrays.sort(extensions);
assertEquals(ContainerUtil.newArrayList(2, 4), Arrays.asList(extensions));
assertEquals(ContainerUtil.newArrayList(4, 2), Arrays.asList(extensionPoint.getExtensions()));
}
private static <T> ExtensionPoint<T> buildExtensionPoint(Class<T> aClass) {
return new ExtensionPointImpl<T>(
ExtensionsImplTest.EXTENSION_POINT_NAME_1, aClass.getName(), ExtensionPoint.Kind.INTERFACE,