samples/misuse/src/org/apidesign/misuse/projectconfig/ProjectConfigurationCorrect.java
1 package org.apidesign.misuse.projectconfig;
3 public class ProjectConfigurationCorrect {
4 // BEGIN: misuse.prjconfig.correct
5 interface ProjectConfigurationProvider<Configuration extends ProjectConfiguration> {
6 Configuration[] getConfigurations();
7 Configuration getActive();
8 void setActive(Configuration c);
10 interface ProjectConfiguration {
11 public String getDisplayName();
13 // END: misuse.prjconfig.correct
17 /* Following does not work:
19 // BEGIN: misuse.prjconfig.correct.trivial.access
20 ProjectConfigurationProvider<?> provider = null; // obtain from somewhere;
21 provider.setActive(provider.getConfigurations()[0]);
22 // END: misuse.prjconfig.correct.trivial.access
27 // BEGIN: misuse.prjconfig.correct.access
28 ProjectConfigurationProvider<?> provider = null; // obtain from somewhere;
29 resetToZero(provider);
30 // END: misuse.prjconfig.correct.access
33 // BEGIN: misuse.prjconfig.correct.openmethod
34 private static <C extends ProjectConfiguration> void resetToZero(
35 ProjectConfigurationProvider<C> provider
37 provider.setActive(provider.getConfigurations()[0]);
39 // END: misuse.prjconfig.correct.openmethod
41 // BEGIN: misuse.prjconfig.correct.openclass
42 static void workWithProjectConfigurationProvider(ProjectConfigurationProvider<?> p) {
43 ResetToZero<?> rtz = ResetToZero.create(p);
49 static class ResetToZero<C extends ProjectConfiguration> {
51 final ProjectConfigurationProvider<C> provider;
53 ResetToZero(ProjectConfigurationProvider<C> provider) {
54 this.provider = provider;
57 static <C extends ProjectConfiguration> ResetToZero<C> create(ProjectConfigurationProvider<C> p) {
58 return new ResetToZero<C>(p);
61 public void obtainFirst() {
62 active = provider.getConfigurations()[0];
66 provider.setActive(active);
69 // END: misuse.prjconfig.correct.openclass