Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Fixed
-
5.0
-
None
Description
I'm thinking this is a bug inside Javassist, something about how it deals with synthetic accessors (used with inner classes). It doesn't happen all the time.
When it does occur, I create a package private accessor method, and make use of that instead of a direct field access. The compiler generates different code that doesn't trigger this bug.
java.lang.VerifyError
(class: org/apache/tapestry/corelib/components/Select, method: access$1 signature: (Lorg/apache/tapestry/corelib/components/Select;)Ljava/lang/Object Unable to pop operand off an empty stack
Stack trace
- java.lang.Class.getDeclaredConstructors0(Native Method)
- java.lang.Class.privateGetDeclaredConstructors(Class.java:2328)
- java.lang.Class.getConstructors(Class.java:1446)
- org.apache.tapestry.internal.services.ReflectiveInstantiator.findConstructor(ReflectiveInstantiator.java:65)
- org.apache.tapestry.internal.services.ReflectiveInstantiator.<init>(ReflectiveInstantiator.java:53)
- org.apache.tapestry.internal.services.InternalClassTransformationImpl.createInstantiator(InternalClassTransformationImpl.java:1227)
- org.apache.tapestry.internal.services.ComponentClassTransformerImpl.createInstantiator(ComponentClassTransformerImpl.java:151)
- org.apache.tapestry.internal.services.ComponentInstantiatorSourceImpl.findInstantiator(ComponentInstantiatorSourceImpl.java:242)
- org.apache.tapestry.internal.services.PageElementFactoryImpl.newComponentElement(PageElementFactoryImpl.java:269)
- org.apache.tapestry.internal.services.PageLoaderProcessor.startComponent(PageLoaderProcessor.java:624)
- org.apache.tapestry.internal.services.PageLoaderProcessor.loadTemplateForComponent(PageLoaderProcessor.java:496)
$ javap -c -classpath bin -verbose -private org.apache.tapestry.corelib.components.Select
Compiled from "Select.java"
public final class org.apache.tapestry.corelib.components.Select extends org.apache.tapestry.corelib.base.AbstractField
SourceFile: "Select.java"
InnerClass:
#221= #195 of #1; //Renderer=class org/apache/tapestry/corelib/components/Select$Renderer of class org/apache/tapestry/corelib/components/Select
#39; //class org/apache/tapestry/corelib/components/Select$1
minor version: 0
major version: 49
Constant pool:
const #1 = class #2; // org/apache/tapestry/corelib/components/Select
const #2 = Asciz org/apache/tapestry/corelib/components/Select;
const #3 = class #4; // org/apache/tapestry/corelib/base/AbstractField
const #4 = Asciz org/apache/tapestry/corelib/base/AbstractField;
const #5 = Asciz _encoder;
const #6 = Asciz Lorg/apache/tapestry/ValueEncoder;;
const #7 = Asciz RuntimeVisibleAnnotations;
const #8 = Asciz Lorg/apache/tapestry/annotations/Parameter;;
const #9 = Asciz _fieldValidatorDefaultSource;
const #10 = Asciz Lorg/apache/tapestry/services/FieldValidatorDefaultSource;;
const #11 = Asciz Lorg/apache/tapestry/annotations/Inject;;
const #12 = Asciz _locale;
const #13 = Asciz Ljava/util/Locale;;
const #14 = Asciz _model;
const #15 = Asciz Lorg/apache/tapestry/SelectModel;;
const #16 = Asciz required;
const #17 = int 1;
const #18 = Asciz _request;
const #19 = Asciz Lorg/apache/tapestry/services/Request;;
const #20 = Asciz _resources;
const #21 = Asciz Lorg/apache/tapestry/ComponentResources;;
const #22 = Asciz _tracker;
const #23 = Asciz Lorg/apache/tapestry/ValidationTracker;;
const #24 = Asciz Lorg/apache/tapestry/annotations/Environmental;;
const #25 = Asciz _validate;
const #26 = Asciz Lorg/apache/tapestry/FieldValidator;;
const #27 = Asciz Signature;
const #28 = Asciz Lorg/apache/tapestry/FieldValidator<Ljava/lang/Object;>;;
const #29 = Asciz defaultPrefix;
const #30 = Asciz validate;
const #31 = Asciz _value;
const #32 = Asciz Ljava/lang/Object;;
const #33 = Asciz principal;
const #34 = Asciz <init>;
const #35 = Asciz ()V;
const #36 = Asciz Code;
const #37 = Method #3.#38; // org/apache/tapestry/corelib/base/AbstractField."<init>")V
const #38 = NameAndType #34:#35;// "<init>")V
const #39 = class #40; // org/apache/tapestry/corelib/components/Select$1
const #40 = Asciz org/apache/tapestry/corelib/components/Select$1;
const #41 = Method #39.#42; // org/apache/tapestry/corelib/components/Select$1."<init>":(Lorg/apache/tapestry/corelib/components/Select;)V
const #42 = NameAndType #34:#43;// "<init>":(Lorg/apache/tapestry/corelib/components/Select;)V
const #43 = Asciz (Lorg/apache/tapestry/corelib/components/Select;)V;
const #44 = Field #1.#45; // org/apache/tapestry/corelib/components/Select._encoder:Lorg/apache/tapestry/ValueEncoder;
const #45 = NameAndType #5:#6;// _encoder:Lorg/apache/tapestry/ValueEncoder;
const #46 = Field #1.#47; // org/apache/tapestry/corelib/components/Select.NOOP_VALIDATOR:Lorg/apache/tapestry/FieldValidator;
const #47 = NameAndType #48:#26;// NOOP_VALIDATOR:Lorg/apache/tapestry/FieldValidator;
const #48 = Asciz NOOP_VALIDATOR;
const #49 = Field #1.#50; // org/apache/tapestry/corelib/components/Select._validate:Lorg/apache/tapestry/FieldValidator;
const #50 = NameAndType #25:#26;// _validate:Lorg/apache/tapestry/FieldValidator;
const #51 = Asciz LineNumberTable;
const #52 = Asciz LocalVariableTable;
const #53 = Asciz this;
const #54 = Asciz Lorg/apache/tapestry/corelib/components/Select;;
const #55 = Asciz processSubmission;
const #56 = Asciz (Lorg/apache/tapestry/services/FormSupport;Ljava/lang/String;)V;
const #57 = Field #1.#58; // org/apache/tapestry/corelib/components/Select._request:Lorg/apache/tapestry/services/Request;
const #58 = NameAndType #18:#19;// _request:Lorg/apache/tapestry/services/Request;
const #59 = InterfaceMethod #60.#62; // org/apache/tapestry/services/Request.getParameter:(Ljava/lang/String;)Ljava/lang/String;
const #60 = class #61; // org/apache/tapestry/services/Request
const #61 = Asciz org/apache/tapestry/services/Request;
const #62 = NameAndType #63:#64;// getParameter:(Ljava/lang/String;)Ljava/lang/String;
const #63 = Asciz getParameter;
const #64 = Asciz (Ljava/lang/String;)Ljava/lang/String;;
const #65 = InterfaceMethod #66.#68; // org/apache/tapestry/ValueEncoder.toValue:(Ljava/lang/String;)Ljava/lang/Object;
const #66 = class #67; // org/apache/tapestry/ValueEncoder
const #67 = Asciz org/apache/tapestry/ValueEncoder;
const #68 = NameAndType #69:#70;// toValue:(Ljava/lang/String;)Ljava/lang/Object;
const #69 = Asciz toValue;
const #70 = Asciz (Ljava/lang/String;)Ljava/lang/Object;;
const #71 = InterfaceMethod #72.#74; // org/apache/tapestry/FieldValidator.validate:(Ljava/lang/Object;)V
const #72 = class #73; // org/apache/tapestry/FieldValidator
const #73 = Asciz org/apache/tapestry/FieldValidator;
const #74 = NameAndType #30:#75;// validate:(Ljava/lang/Object;)V
const #75 = Asciz (Ljava/lang/Object;)V;
const #76 = Field #1.#77; // org/apache/tapestry/corelib/components/Select._value:Ljava/lang/Object;
const #77 = NameAndType #31:#32;// _value:Ljava/lang/Object;
const #78 = Field #1.#79; // org/apache/tapestry/corelib/components/Select._tracker:Lorg/apache/tapestry/ValidationTracker;
const #79 = NameAndType #22:#23;// _tracker:Lorg/apache/tapestry/ValidationTracker;
const #80 = Method #81.#83; // org/apache/tapestry/ValidationException.getMessage)Ljava/lang/String;
const #81 = class #82; // org/apache/tapestry/ValidationException
const #82 = Asciz org/apache/tapestry/ValidationException;
const #83 = NameAndType #84:#85;// getMessage)Ljava/lang/String;
const #84 = Asciz getMessage;
const #85 = Asciz ()Ljava/lang/String;;
const #86 = InterfaceMethod #87.#89; // org/apache/tapestry/ValidationTracker.recordError:(Lorg/apache/tapestry/Field;Ljava/lang/String;)V
const #87 = class #88; // org/apache/tapestry/ValidationTracker
const #88 = Asciz org/apache/tapestry/ValidationTracker;
const #89 = NameAndType #90:#91;// recordError:(Lorg/apache/tapestry/Field;Ljava/lang/String;)V
const #90 = Asciz recordError;
const #91 = Asciz (Lorg/apache/tapestry/Field;Ljava/lang/String;)V;
const #92 = Asciz formSupport;
const #93 = Asciz Lorg/apache/tapestry/services/FormSupport;;
const #94 = Asciz elementName;
const #95 = Asciz Ljava/lang/String;;
const #96 = Asciz primaryKey;
const #97 = Asciz selectedValue;
const #98 = Asciz ex;
const #99 = Asciz Lorg/apache/tapestry/ValidationException;;
const #100 = Asciz afterRender;
const #101 = Asciz (Lorg/apache/tapestry/MarkupWriter;)V;
const #102 = InterfaceMethod #103.#105; // org/apache/tapestry/MarkupWriter.end)Lorg/apache/tapestry/dom/Element;
const #103 = class #104; // org/apache/tapestry/MarkupWriter
const #104 = Asciz org/apache/tapestry/MarkupWriter;
const #105 = NameAndType #106:#107;// end)Lorg/apache/tapestry/dom/Element;
const #106 = Asciz end;
const #107 = Asciz ()Lorg/apache/tapestry/dom/Element;;
const #108 = Asciz writer;
const #109 = Asciz Lorg/apache/tapestry/MarkupWriter;;
const #110 = Asciz beginRender;
const #111 = String #112; // select
const #112 = Asciz select;
const #113 = class #114; // java/lang/Object
const #114 = Asciz java/lang/Object;
const #115 = String #116; // name
const #116 = Asciz name;
const #117 = Method #1.#118; // org/apache/tapestry/corelib/components/Select.getElementName)Ljava/lang/String;
const #118 = NameAndType #119:#85;// getElementName)Ljava/lang/String;
const #119 = Asciz getElementName;
const #120 = String #121; // id
const #121 = Asciz id;
const #122 = Method #1.#123; // org/apache/tapestry/corelib/components/Select.getClientId)Ljava/lang/String;
const #123 = NameAndType #124:#85;// getClientId)Ljava/lang/String;
const #124 = Asciz getClientId;
const #125 = InterfaceMethod #103.#126; // org/apache/tapestry/MarkupWriter.element:(Ljava/lang/String;[Ljava/lang/Object;)Lorg/apache/tapestry/dom/Element;
const #126 = NameAndType #127:#128;// element:(Ljava/lang/String;[Ljava/lang/Object;)Lorg/apache/tapestry/dom/Element;
const #127 = Asciz element;
const #128 = Asciz (Ljava/lang/String;[Ljava/lang/Object;)Lorg/apache/tapestry/dom/Element;;
const #129 = Asciz defaultEncoder;
const #130 = Asciz ()Lorg/apache/tapestry/ValueEncoder;;
const #131 = Field #1.#132; // org/apache/tapestry/corelib/components/Select._resources:Lorg/apache/tapestry/ComponentResources;
const #132 = NameAndType #20:#21;// _resources:Lorg/apache/tapestry/ComponentResources;
const #133 = String #134; // value
const #134 = Asciz value;
const #135 = InterfaceMethod #136.#138; // org/apache/tapestry/ComponentResources.getBoundType:(Ljava/lang/String;)Ljava/lang/Class;
const #136 = class #137; // org/apache/tapestry/ComponentResources
const #137 = Asciz org/apache/tapestry/ComponentResources;
const #138 = NameAndType #139:#140;// getBoundType:(Ljava/lang/String;)Ljava/lang/Class;
const #139 = Asciz getBoundType;
const #140 = Asciz (Ljava/lang/String;)Ljava/lang/Class;;
const #141 = class #142; // java/lang/Enum
const #142 = Asciz java/lang/Enum;
const #143 = Method #144.#146; // java/lang/Class.isAssignableFrom:(Ljava/lang/Class;)Z
const #144 = class #145; // java/lang/Class
const #145 = Asciz java/lang/Class;
const #146 = NameAndType #147:#148;// isAssignableFrom:(Ljava/lang/Class;)Z
const #147 = Asciz isAssignableFrom;
const #148 = Asciz (Ljava/lang/Class;)Z;
const #149 = class #150; // org/apache/tapestry/util/EnumValueEncoder
const #150 = Asciz org/apache/tapestry/util/EnumValueEncoder;
const #151 = Method #149.#152; // org/apache/tapestry/util/EnumValueEncoder."<init>":(Ljava/lang/Class;)V
const #152 = NameAndType #34:#153;// "<init>":(Ljava/lang/Class;)V
const #153 = Asciz (Ljava/lang/Class;)V;
const #154 = Asciz valueType;
const #155 = Asciz Ljava/lang/Class;;
const #156 = Asciz defaultModel;
const #157 = Asciz ()Lorg/apache/tapestry/SelectModel;;
const #158 = class #159; // org/apache/tapestry/util/EnumSelectModel
const #159 = Asciz org/apache/tapestry/util/EnumSelectModel;
const #160 = InterfaceMethod #136.#161; // org/apache/tapestry/ComponentResources.getContainerMessages)Lorg/apache/tapestry/ioc/Messages;
const #161 = NameAndType #162:#163;// getContainerMessages)Lorg/apache/tapestry/ioc/Messages;
const #162 = Asciz getContainerMessages;
const #163 = Asciz ()Lorg/apache/tapestry/ioc/Messages;;
const #164 = Method #158.#165; // org/apache/tapestry/util/EnumSelectModel."<init>":(Ljava/lang/Class;Lorg/apache/tapestry/ioc/Messages;)V
const #165 = NameAndType #34:#166;// "<init>":(Ljava/lang/Class;Lorg/apache/tapestry/ioc/Messages;)V
const #166 = Asciz (Ljava/lang/Class;Lorg/apache/tapestry/ioc/Messages;)V;
const #167 = Asciz defaultValidate;
const #168 = Asciz ()Lorg/apache/tapestry/FieldValidator;;
const #169 = Field #1.#170; // org/apache/tapestry/corelib/components/Select._fieldValidatorDefaultSource:Lorg/apache/tapestry/services/FieldValidatorDefaultSource;
const #170 = NameAndType #9:#10;// _fieldValidatorDefaultSource:Lorg/apache/tapestry/services/FieldValidatorDefaultSource;
const #171 = InterfaceMethod #136.#172; // org/apache/tapestry/ComponentResources.getId)Ljava/lang/String;
const #172 = NameAndType #173:#85;// getId)Ljava/lang/String;
const #173 = Asciz getId;
const #174 = Field #1.#175; // org/apache/tapestry/corelib/components/Select._locale:Ljava/util/Locale;
const #175 = NameAndType #12:#13;// _locale:Ljava/util/Locale;
const #176 = InterfaceMethod #136.#177; // org/apache/tapestry/ComponentResources.getAnnotationProvider:(Ljava/lang/String;)Lorg/apache/tapestry/ioc/AnnotationProvider;
const #177 = NameAndType #178:#179;// getAnnotationProvider:(Ljava/lang/String;)Lorg/apache/tapestry/ioc/AnnotationProvider;
const #178 = Asciz getAnnotationProvider;
const #179 = Asciz (Ljava/lang/String;)Lorg/apache/tapestry/ioc/AnnotationProvider;;
const #180 = InterfaceMethod #181.#183; // org/apache/tapestry/services/FieldValidatorDefaultSource.createDefaultValidator:(Lorg/apache/tapestry/Field;Ljava/lang/String;Lorg/apache/tapestry/ioc/Messages;Ljava/util/Locale;Ljava/lang/Class;Lorg/apache/tapestry/ioc/AnnotationProvider;)Lorg/apache/tapestry/FieldValidator;
const #181 = class #182; // org/apache/tapestry/services/FieldValidatorDefaultSource
const #182 = Asciz org/apache/tapestry/services/FieldValidatorDefaultSource;
const #183 = NameAndType #184:#185;// createDefaultValidator:(Lorg/apache/tapestry/Field;Ljava/lang/String;Lorg/apache/tapestry/ioc/Messages;Ljava/util/Locale;Ljava/lang/Class;Lorg/apache/tapestry/ioc/AnnotationProvider;)Lorg/apache/tapestry/FieldValidator;
const #184 = Asciz createDefaultValidator;
const #185 = Asciz (Lorg/apache/tapestry/Field;Ljava/lang/String;Lorg/apache/tapestry/ioc/Messages;Ljava/util/Locale;Ljava/lang/Class;Lorg/apache/tapestry/ioc/AnnotationProvider;)Lorg/apache/tapestry/FieldValidator;;
const #186 = Asciz type;
const #187 = Asciz defaultValue;
const #188 = Asciz ()Lorg/apache/tapestry/Binding;;
const #189 = Method #1.#190; // org/apache/tapestry/corelib/components/Select.createDefaultParameterBinding:(Ljava/lang/String;)Lorg/apache/tapestry/Binding;
const #190 = NameAndType #191:#192;// createDefaultParameterBinding:(Ljava/lang/String;)Lorg/apache/tapestry/Binding;
const #191 = Asciz createDefaultParameterBinding;
const #192 = Asciz (Ljava/lang/String;)Lorg/apache/tapestry/Binding;;
const #193 = Asciz options;
const #194 = Asciz Lorg/apache/tapestry/annotations/BeforeRenderTemplate;;
const #195 = class #196; // org/apache/tapestry/corelib/components/Select$Renderer
const #196 = Asciz org/apache/tapestry/corelib/components/Select$Renderer;
const #197 = Method #195.#198; // org/apache/tapestry/corelib/components/Select$Renderer."<init>":(Lorg/apache/tapestry/corelib/components/Select;Lorg/apache/tapestry/MarkupWriter;)V
const #198 = NameAndType #34:#199;// "<init>":(Lorg/apache/tapestry/corelib/components/Select;Lorg/apache/tapestry/MarkupWriter;)V
const #199 = Asciz (Lorg/apache/tapestry/corelib/components/Select;Lorg/apache/tapestry/MarkupWriter;)V;
const #200 = Field #1.#201; // org/apache/tapestry/corelib/components/Select._model:Lorg/apache/tapestry/SelectModel;
const #201 = NameAndType #14:#15;// _model:Lorg/apache/tapestry/SelectModel;
const #202 = InterfaceMethod #203.#205; // org/apache/tapestry/SelectModel.visit:(Lorg/apache/tapestry/SelectModelVisitor;)V
const #203 = class #204; // org/apache/tapestry/SelectModel
const #204 = Asciz org/apache/tapestry/SelectModel;
const #205 = NameAndType #206:#207;// visit:(Lorg/apache/tapestry/SelectModelVisitor;)V
const #206 = Asciz visit;
const #207 = Asciz (Lorg/apache/tapestry/SelectModelVisitor;)V;
const #208 = Asciz renderer;
const #209 = Asciz Lorg/apache/tapestry/SelectModelVisitor;;
const #210 = Asciz setModel;
const #211 = Asciz (Lorg/apache/tapestry/SelectModel;)V;
const #212 = Asciz model;
const #213 = Asciz setValue;
const #214 = Asciz access$0;
const #215 = Asciz (Lorg/apache/tapestry/corelib/components/Select;)Lorg/apache/tapestry/ValueEncoder;;
const #216 = Asciz access$1;
const #217 = Asciz (Lorg/apache/tapestry/corelib/components/Select;)Ljava/lang/Object;;
const #218 = Asciz SourceFile;
const #219 = Asciz Select.java;
const #220 = Asciz InnerClasses;
const #221 = Asciz Renderer;
Here's the class transformation that occurred:
InternalClassTransformation[
public final org.apache.tapestry.corelib.components.Select extends org.apache.tapestry.corelib.base.AbstractField
add method: private void _$write_locale_0(java.util.Locale $1)
throw new java.lang.RuntimeException("Field org.apache.tapestry.corelib.components.Select._locale is read-only.");
replace write _locale: _$write_locale_0();
add method: private void _$write_resources_1(org.apache.tapestry.ComponentResources $1)
throw new java.lang.RuntimeException("Field org.apache.tapestry.corelib.components.Select._resources is read-only.");
replace write _resources: _$write_resources_1();
add method: private void _$write_fieldValidatorDefaultSource_0(org.apache.tapestry.services.FieldValidatorDefaultSource $1)
throw new java.lang.RuntimeException("Field org.apache.tapestry.corelib.components.Select._fieldValidatorDefaultSource is read-only.");
replace write _fieldValidatorDefaultSource: _$write_fieldValidatorDefaultSource_0();
add method: private void _$write_request_1(org.apache.tapestry.services.Request $1)
throw new java.lang.RuntimeException("Field org.apache.tapestry.corelib.components.Select._request is read-only.");
replace write _request: _$write_request_1();
add method: private org.apache.tapestry.ValidationTracker _$environment_read_tracker_0()
return ($r) _$environment.peekRequired($type);
replace read _tracker: _$environment_read_tracker_0();
add method: private void _$write_tracker_0(org.apache.tapestry.ValidationTracker $1)
throw new java.lang.RuntimeException("Field org.apache.tapestry.corelib.components.Select._tracker is read-only.");
replace write _tracker: _$write_tracker_0();
remove field _tracker;
add field: private boolean _$value_cached_1;
add field: private java.lang.Object _$value_default_2;
add field: private boolean _$value_invariant_1;
extend method: public void containingPageDidLoad()
{
if (! _$resources.isBound("value"))
org.apache.tapestry.internal.services.ParameterWorker.bind("value", _$resources, defaultValue());
_$value_invariant_1 = _$resources.isInvariant("value");
_$value_default_2 = _value;
}
extend method: public void postRenderCleanup()
if (! _$value_invariant_1)
{
_value = _$value_default_2;
_$value_cached_1 = false;
}
add method: private java.lang.Object _$read_parameter_value_1()
{
if (_$value_cached_1 || ! _$resources.isLoaded() || ! _$resources.isBound("value")) return _value;
java.lang.Object result = ($r) ((java.lang.Object) _$resources.readParameter("value", $type));
if (_$value_invariant_1 || _$resources.isRendering())
return result;
}
replace read _value: _$read_parameter_value_1();
add method: private void _$update_parameter_value_1(java.lang.Object $1)
{
if (! _$resources.isLoaded())
if (_$resources.isBound("value"))
_$resources.writeParameter("value", ($w)$1);
_value = $1;
_$value_cached_1 = _$resources.isRendering();
}
replace write _value: _$update_parameter_value_1();
add field: private boolean _$encoder_cached;
add field: private org.apache.tapestry.ValueEncoder _$encoder_default;
add field: private boolean _$encoder_invariant;
extend method: public void containingPageDidLoad()
{
if (! _$resources.isBound("encoder"))
org.apache.tapestry.internal.services.ParameterWorker.bind("encoder", _$resources, defaultEncoder());
_$encoder_invariant = _$resources.isInvariant("encoder");
_$encoder_default = _encoder;
}
extend method: public void postRenderCleanup()
if (! _$encoder_invariant)
{
_encoder = _$encoder_default;
_$encoder_cached = false;
}
add method: private org.apache.tapestry.ValueEncoder _$read_parameter_encoder()
{
if (_$encoder_cached || ! _$resources.isLoaded() || ! _$resources.isBound("encoder")) return _encoder;
org.apache.tapestry.ValueEncoder result = ($r) ((org.apache.tapestry.ValueEncoder) _$resources.readParameter("encoder", $type));
if (_$encoder_invariant || _$resources.isRendering())
return result;
}
replace read _encoder: _$read_parameter_encoder();
add method: private void _$update_parameter_encoder(org.apache.tapestry.ValueEncoder $1)
{
if (! _$resources.isLoaded())
if (_$resources.isBound("encoder"))
_$resources.writeParameter("encoder", ($w)$1);
_encoder = $1;
_$encoder_cached = _$resources.isRendering();
}
replace write _encoder: _$update_parameter_encoder();
add field: private boolean _$model_cached;
add field: private org.apache.tapestry.SelectModel _$model_default;
add field: private boolean _$model_invariant;
extend method: public void containingPageDidLoad()
{
if (! _$resources.isBound("model"))
org.apache.tapestry.internal.services.ParameterWorker.bind("model", _$resources, defaultModel());
_$model_invariant = _$resources.isInvariant("model");
_$model_default = _model;
}
extend method: public void postRenderCleanup()
if (! _$model_invariant)
{
_model = _$model_default;
_$model_cached = false;
}
add method: private org.apache.tapestry.SelectModel _$read_parameter_model()
{
if (_$model_cached || ! _$resources.isLoaded() || ! _$resources.isBound("model")) return _model;
org.apache.tapestry.SelectModel result = ($r) ((org.apache.tapestry.SelectModel) _$resources.readParameter("model", $type));
if (_$model_invariant || _$resources.isRendering())
return result;
}
replace read _model: _$read_parameter_model();
add method: private void _$update_parameter_model(org.apache.tapestry.SelectModel $1)
{
if (! _$resources.isLoaded())
if (_$resources.isBound("model"))
_$resources.writeParameter("model", ($w)$1);
_model = $1;
_$model_cached = _$resources.isRendering();
}
replace write _model: _$update_parameter_model();
add field: private boolean _$validate_cached_0;
add field: private org.apache.tapestry.FieldValidator _$validate_default_0;
add field: private boolean _$validate_invariant_0;
extend method: public void containingPageDidLoad()
{
if (! _$resources.isBound("validate"))
org.apache.tapestry.internal.services.ParameterWorker.bind("validate", _$resources, defaultValidate());
_$validate_invariant_0 = _$resources.isInvariant("validate");
_$validate_default_0 = _validate;
}
extend method: public void postRenderCleanup()
if (! _$validate_invariant_0)
{
_validate = _$validate_default_0;
_$validate_cached_0 = false;
}
add method: private org.apache.tapestry.FieldValidator _$read_parameter_validate_0()
{
if (_$validate_cached_0 || ! _$resources.isLoaded() || ! _$resources.isBound("validate")) return _validate;
org.apache.tapestry.FieldValidator result = ($r) ((org.apache.tapestry.FieldValidator) _$resources.readParameter("validate", $type));
if (_$validate_invariant_0 || _$resources.isRendering())
return result;
}
replace read _validate: _$read_parameter_validate_0();
add method: private void _$update_parameter_validate_0(org.apache.tapestry.FieldValidator $1)
{
if (! _$resources.isLoaded())
if (_$resources.isBound("validate"))
_$resources.writeParameter("validate", ($w)$1);
_validate = $1;
_$validate_cached_0 = _$resources.isRendering();
}
replace write _validate: _$update_parameter_validate_0();
add method: public void beginRender(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.Event $2)
{ super.beginRender($$); if ($2.isAborted()) return; beginRender($1); } add method: public void beforeRenderTemplate(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.Event $2) { super.beforeRenderTemplate($$); if ($2.isAborted()) return; options($1); } add method: public void afterRender(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.Event $2) { afterRender($1); super.afterRender($$); } convert default constructor: initializer_4(); add constructor: org.apache.tapestry.corelib.components.Select(org.apache.tapestry.internal.InternalComponentResources $1, org.apache.tapestry.services.DefaultComponentParameterBindingSource $2, org.apache.tapestry.services.Environment $3, org.apache.tapestry.services.BindingSource $4, org.apache.tapestry.services.FieldValidatorDefaultSource $5, org.apache.tapestry.services.Request $6) { super($1, $2, $3, $4); _locale = _$resources.getLocale(); _resources = _$resources; _fieldValidatorDefaultSource = $5; _request = $6; initializer_4(); }]