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
6 <Configuration extends ProjectConfiguration> {
7 Configuration[] getConfigurations();
8 Configuration getActive();
9 void setActive(Configuration c);
11 interface ProjectConfiguration {
12 public String getDisplayName();
14 // END: misuse.prjconfig.correct
18 /* Following does not work:
20 // BEGIN: misuse.prjconfig.correct.trivial.access
21 ProjectConfigurationProvider<?> provider = null; // obtain elsewhere;
22 provider.setActive(provider.getConfigurations()[0]);
23 // END: misuse.prjconfig.correct.trivial.access
28 // BEGIN: misuse.prjconfig.correct.access
29 ProjectConfigurationProvider<?> provider = null; // obtain elsewhere;
30 resetToZero(provider);
31 // END: misuse.prjconfig.correct.access
34 // BEGIN: misuse.prjconfig.correct.openmethod
35 private static <C extends ProjectConfiguration> void resetToZero(
36 ProjectConfigurationProvider<C> provider
38 provider.setActive(provider.getConfigurations()[0]);
40 // END: misuse.prjconfig.correct.openmethod
42 // BEGIN: misuse.prjconfig.correct.openclass
43 static void workWithProjectConfigurationProvider(
44 ProjectConfigurationProvider<?> p
46 ResetToZero<?> rtz = ResetToZero.create(p);
52 static class ResetToZero<C extends ProjectConfiguration> {
54 final ProjectConfigurationProvider<C> provider;
56 ResetToZero(ProjectConfigurationProvider<C> provider) {
57 this.provider = provider;
60 static <C extends ProjectConfiguration> ResetToZero<C> create(
61 ProjectConfigurationProvider<C> p
63 return new ResetToZero<C>(p);
66 public void obtainFirst() {
67 active = provider.getConfigurations()[0];
71 provider.setActive(active);
74 // END: misuse.prjconfig.correct.openclass