jtulach@101: package org.apidesign.misuse.projectconfig; jtulach@101: jtulach@101: public class ProjectConfigurationCorrect { jtulach@101: // BEGIN: misuse.prjconfig.correct jtulach@154: interface ProjectConfigurationProvider jtulach@154: { jtulach@210: public Configuration[] getConfigurations(); jtulach@210: public Configuration getActive(); jtulach@210: public void setActive(Configuration c); jtulach@101: } jtulach@101: interface ProjectConfiguration { jtulach@101: public String getDisplayName(); jtulach@101: } jtulach@101: // END: misuse.prjconfig.correct jtulach@101: jtulach@101: jtulach@101: jtulach@101: /* Following does not work: jtulach@101: static { jtulach@101: // BEGIN: misuse.prjconfig.correct.trivial.access jtulach@154: ProjectConfigurationProvider provider = null; // obtain elsewhere; jtulach@101: provider.setActive(provider.getConfigurations()[0]); jtulach@101: // END: misuse.prjconfig.correct.trivial.access jtulach@101: } jtulach@101: */ jtulach@101: jtulach@210: static jtulach@210: // BEGIN: misuse.prjconfig.correct.access jtulach@210: { jtulach@154: ProjectConfigurationProvider provider = null; // obtain elsewhere; jtulach@101: resetToZero(provider); jtulach@101: } jtulach@210: // END: misuse.prjconfig.correct.access jtulach@101: jtulach@101: // BEGIN: misuse.prjconfig.correct.openmethod jtulach@101: private static void resetToZero( jtulach@101: ProjectConfigurationProvider provider jtulach@101: ) { jtulach@101: provider.setActive(provider.getConfigurations()[0]); jtulach@101: } jtulach@101: // END: misuse.prjconfig.correct.openmethod jtulach@101: jtulach@101: // BEGIN: misuse.prjconfig.correct.openclass jtulach@154: static void workWithProjectConfigurationProvider( jtulach@154: ProjectConfigurationProvider p jtulach@154: ) { jtulach@101: ResetToZero rtz = ResetToZero.create(p); jtulach@101: rtz.obtainFirst(); jtulach@101: // after a while jtulach@101: rtz.apply(); jtulach@101: } jtulach@101: jtulach@101: static class ResetToZero { jtulach@101: C active; jtulach@101: final ProjectConfigurationProvider provider; jtulach@101: jtulach@101: ResetToZero(ProjectConfigurationProvider provider) { jtulach@101: this.provider = provider; jtulach@101: } jtulach@101: jtulach@154: static ResetToZero create( jtulach@154: ProjectConfigurationProvider p jtulach@154: ) { jtulach@101: return new ResetToZero(p); jtulach@101: } jtulach@101: jtulach@101: public void obtainFirst() { jtulach@101: active = provider.getConfigurations()[0]; jtulach@101: } jtulach@101: jtulach@101: public void apply() { jtulach@101: provider.setActive(active); jtulach@101: } jtulach@101: } jtulach@101: // END: misuse.prjconfig.correct.openclass jtulach@101: jtulach@101: }