You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "Howard M. Lewis Ship (JIRA)" <ji...@apache.org> on 2010/07/26 22:53:16 UTC
[jira] Created: (TAP5-1222) Accessing a public field of a
non-component object inside component code can result in a
TransfomationException if the accessed field matches a field of the
component
Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field matches a field of the component
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: TAP5-1222
URL: https://issues.apache.org/jira/browse/TAP5-1222
Project: Tapestry 5
Issue Type: Bug
Components: tapestry-core
Affects Versions: 5.2.0
Reporter: Howard M. Lewis Ship
java.lang.ClassNotFoundException
caught an exception while obtaining a class file for com.example.pages.category.CategoryIndex
exception
org.apache.tapestry5.ioc.internal.OperationException: javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
org.apache.tapestry5.ioc.internal.OperationException
javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
trace
Constructing instance of page class com.example.pages.category.CategoryIndex
Creating ComponentAssembler for com.example.pages.category.CategoryIndex
Transforming component class com.example.pages.category.CategoryIndex
org.apache.tapestry5.internal.services.TransformationException
javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
Checking field read category in method _$advised$getSubNodesForCurrentNode(): replacing with $_ = $0._$get_category();
@Cached(watch = "currentNode")
public List<CategoryTreeNode> getSubNodesForCurrentNode() {
if (currentNode.category == null)
return Collections.emptyList();
return buildNodesForCategory(currentNode.category);
}
Because the CategoryIndex page has a field named "category", the transformation attempted to find it's replaced read access method, _$get_category(), in the non-component class (CategoryTreeNode).
The fault is in here:
ExprEditor editor = new ExprEditor()
{
private final Set<CtBehavior> addedMethods = CollectionFactory.newSet();
{
for (TransformMethodImpl tmi : methods.values())
{
if (tmi.added)
addedMethods.add(tmi.method);
}
}
public void edit(FieldAccess access) throws CannotCompileException
{
CtBehavior where = access.where();
if (where instanceof CtConstructor)
return;
boolean isRead = access.isReader();
String fieldName = access.getFieldName();
CtMethod method = (CtMethod) where;
formatter.format("Checking field %s %s in method %s(): ", isRead ? "read" : "write", fieldName,
method.getName());
// Ignore any methods to were added as part of the transformation.
// If we reference the field there, we really mean the field.
if (addedMethods.contains(where))
{
formatter.format("added method\n");
return;
}
Map<String, String> transformMap = isRead ? fieldReadTransforms : fieldWriteTransforms;
String body = transformMap.get(fieldName);
if (body == null)
{
formatter.format("field not transformed\n");
return;
}
formatter.format("replacing with %s\n", body);
access.replace(body);
}
};
Have to ensure that the field access is for a field of the component itself.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Commented: (TAP5-1222) Accessing a public field of a
non-component object inside component code can result in a
TransfomationException if the accessed field name matches the name of a
component field
Posted by "Hudson (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/TAP5-1222?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12900528#action_12900528 ]
Hudson commented on TAP5-1222:
------------------------------
Integrated in tapestry-5.2-freestyle #176 (See [https://hudson.apache.org/hudson/job/tapestry-5.2-freestyle/176/])
TAP5-1222: Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field name matches the name of a component field
> Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field name matches the name of a component field
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: TAP5-1222
> URL: https://issues.apache.org/jira/browse/TAP5-1222
> Project: Tapestry 5
> Issue Type: Bug
> Components: tapestry-core
> Affects Versions: 5.2.0
> Reporter: Howard M. Lewis Ship
> Assignee: Howard M. Lewis Ship
> Fix For: 5.2.1
>
>
> java.lang.ClassNotFoundException
> caught an exception while obtaining a class file for com.example.pages.category.CategoryIndex
> exception
> org.apache.tapestry5.ioc.internal.OperationException: javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> org.apache.tapestry5.ioc.internal.OperationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> trace
> Constructing instance of page class com.example.pages.category.CategoryIndex
> Creating ComponentAssembler for com.example.pages.category.CategoryIndex
> Transforming component class com.example.pages.category.CategoryIndex
> org.apache.tapestry5.internal.services.TransformationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> Checking field read category in method _$advised$getSubNodesForCurrentNode(): replacing with $_ = $0._$get_category();
> @Cached(watch = "currentNode")
> public List<CategoryTreeNode> getSubNodesForCurrentNode() {
> if (currentNode.category == null)
> return Collections.emptyList();
> return buildNodesForCategory(currentNode.category);
> }
> Because the CategoryIndex page has a field named "category", the transformation attempted to find it's replaced read access method, _$get_category(), in the non-component class (CategoryTreeNode).
> The fault is in here:
> ExprEditor editor = new ExprEditor()
> {
> private final Set<CtBehavior> addedMethods = CollectionFactory.newSet();
> {
> for (TransformMethodImpl tmi : methods.values())
> {
> if (tmi.added)
> addedMethods.add(tmi.method);
> }
> }
> public void edit(FieldAccess access) throws CannotCompileException
> {
> CtBehavior where = access.where();
> if (where instanceof CtConstructor)
> return;
> boolean isRead = access.isReader();
> String fieldName = access.getFieldName();
> CtMethod method = (CtMethod) where;
> formatter.format("Checking field %s %s in method %s(): ", isRead ? "read" : "write", fieldName,
> method.getName());
> // Ignore any methods to were added as part of the transformation.
> // If we reference the field there, we really mean the field.
> if (addedMethods.contains(where))
> {
> formatter.format("added method\n");
> return;
> }
> Map<String, String> transformMap = isRead ? fieldReadTransforms : fieldWriteTransforms;
> String body = transformMap.get(fieldName);
> if (body == null)
> {
> formatter.format("field not transformed\n");
> return;
> }
> formatter.format("replacing with %s\n", body);
> access.replace(body);
> }
> };
> Have to ensure that the field access is for a field of the component itself.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Closed: (TAP5-1222) Accessing a public field of a
non-component object inside component code can result in a
TransfomationException if the accessed field name matches the name of a
component field
Posted by "Howard M. Lewis Ship (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/TAP5-1222?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Howard M. Lewis Ship closed TAP5-1222.
--------------------------------------
Fix Version/s: 5.2.1
Resolution: Fixed
> Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field name matches the name of a component field
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: TAP5-1222
> URL: https://issues.apache.org/jira/browse/TAP5-1222
> Project: Tapestry 5
> Issue Type: Bug
> Components: tapestry-core
> Affects Versions: 5.2.0
> Reporter: Howard M. Lewis Ship
> Assignee: Howard M. Lewis Ship
> Fix For: 5.2.1
>
>
> java.lang.ClassNotFoundException
> caught an exception while obtaining a class file for com.example.pages.category.CategoryIndex
> exception
> org.apache.tapestry5.ioc.internal.OperationException: javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> org.apache.tapestry5.ioc.internal.OperationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> trace
> Constructing instance of page class com.example.pages.category.CategoryIndex
> Creating ComponentAssembler for com.example.pages.category.CategoryIndex
> Transforming component class com.example.pages.category.CategoryIndex
> org.apache.tapestry5.internal.services.TransformationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> Checking field read category in method _$advised$getSubNodesForCurrentNode(): replacing with $_ = $0._$get_category();
> @Cached(watch = "currentNode")
> public List<CategoryTreeNode> getSubNodesForCurrentNode() {
> if (currentNode.category == null)
> return Collections.emptyList();
> return buildNodesForCategory(currentNode.category);
> }
> Because the CategoryIndex page has a field named "category", the transformation attempted to find it's replaced read access method, _$get_category(), in the non-component class (CategoryTreeNode).
> The fault is in here:
> ExprEditor editor = new ExprEditor()
> {
> private final Set<CtBehavior> addedMethods = CollectionFactory.newSet();
> {
> for (TransformMethodImpl tmi : methods.values())
> {
> if (tmi.added)
> addedMethods.add(tmi.method);
> }
> }
> public void edit(FieldAccess access) throws CannotCompileException
> {
> CtBehavior where = access.where();
> if (where instanceof CtConstructor)
> return;
> boolean isRead = access.isReader();
> String fieldName = access.getFieldName();
> CtMethod method = (CtMethod) where;
> formatter.format("Checking field %s %s in method %s(): ", isRead ? "read" : "write", fieldName,
> method.getName());
> // Ignore any methods to were added as part of the transformation.
> // If we reference the field there, we really mean the field.
> if (addedMethods.contains(where))
> {
> formatter.format("added method\n");
> return;
> }
> Map<String, String> transformMap = isRead ? fieldReadTransforms : fieldWriteTransforms;
> String body = transformMap.get(fieldName);
> if (body == null)
> {
> formatter.format("field not transformed\n");
> return;
> }
> formatter.format("replacing with %s\n", body);
> access.replace(body);
> }
> };
> Have to ensure that the field access is for a field of the component itself.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Updated: (TAP5-1222) Accessing a public field of a
non-component object inside component code can result in a
TransfomationException if the accessed field name matches the name of a
component field
Posted by "Howard M. Lewis Ship (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/TAP5-1222?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Howard M. Lewis Ship updated TAP5-1222:
---------------------------------------
Summary: Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field name matches the name of a component field (was: Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field matches a field of the component)
> Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field name matches the name of a component field
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: TAP5-1222
> URL: https://issues.apache.org/jira/browse/TAP5-1222
> Project: Tapestry 5
> Issue Type: Bug
> Components: tapestry-core
> Affects Versions: 5.2.0
> Reporter: Howard M. Lewis Ship
>
> java.lang.ClassNotFoundException
> caught an exception while obtaining a class file for com.example.pages.category.CategoryIndex
> exception
> org.apache.tapestry5.ioc.internal.OperationException: javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> org.apache.tapestry5.ioc.internal.OperationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> trace
> Constructing instance of page class com.example.pages.category.CategoryIndex
> Creating ComponentAssembler for com.example.pages.category.CategoryIndex
> Transforming component class com.example.pages.category.CategoryIndex
> org.apache.tapestry5.internal.services.TransformationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> Checking field read category in method _$advised$getSubNodesForCurrentNode(): replacing with $_ = $0._$get_category();
> @Cached(watch = "currentNode")
> public List<CategoryTreeNode> getSubNodesForCurrentNode() {
> if (currentNode.category == null)
> return Collections.emptyList();
> return buildNodesForCategory(currentNode.category);
> }
> Because the CategoryIndex page has a field named "category", the transformation attempted to find it's replaced read access method, _$get_category(), in the non-component class (CategoryTreeNode).
> The fault is in here:
> ExprEditor editor = new ExprEditor()
> {
> private final Set<CtBehavior> addedMethods = CollectionFactory.newSet();
> {
> for (TransformMethodImpl tmi : methods.values())
> {
> if (tmi.added)
> addedMethods.add(tmi.method);
> }
> }
> public void edit(FieldAccess access) throws CannotCompileException
> {
> CtBehavior where = access.where();
> if (where instanceof CtConstructor)
> return;
> boolean isRead = access.isReader();
> String fieldName = access.getFieldName();
> CtMethod method = (CtMethod) where;
> formatter.format("Checking field %s %s in method %s(): ", isRead ? "read" : "write", fieldName,
> method.getName());
> // Ignore any methods to were added as part of the transformation.
> // If we reference the field there, we really mean the field.
> if (addedMethods.contains(where))
> {
> formatter.format("added method\n");
> return;
> }
> Map<String, String> transformMap = isRead ? fieldReadTransforms : fieldWriteTransforms;
> String body = transformMap.get(fieldName);
> if (body == null)
> {
> formatter.format("field not transformed\n");
> return;
> }
> formatter.format("replacing with %s\n", body);
> access.replace(body);
> }
> };
> Have to ensure that the field access is for a field of the component itself.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Closed: (TAP5-1222) Accessing a public field of a
non-component object inside component code can result in a
TransfomationException if the accessed field name matches the name of a
component field
Posted by "Howard M. Lewis Ship (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/TAP5-1222?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Howard M. Lewis Ship closed TAP5-1222.
--------------------------------------
Fix Version/s: 5.2.1
Resolution: Fixed
> Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field name matches the name of a component field
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: TAP5-1222
> URL: https://issues.apache.org/jira/browse/TAP5-1222
> Project: Tapestry 5
> Issue Type: Bug
> Components: tapestry-core
> Affects Versions: 5.2.0
> Reporter: Howard M. Lewis Ship
> Assignee: Howard M. Lewis Ship
> Fix For: 5.2.1
>
>
> java.lang.ClassNotFoundException
> caught an exception while obtaining a class file for com.example.pages.category.CategoryIndex
> exception
> org.apache.tapestry5.ioc.internal.OperationException: javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> org.apache.tapestry5.ioc.internal.OperationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> trace
> Constructing instance of page class com.example.pages.category.CategoryIndex
> Creating ComponentAssembler for com.example.pages.category.CategoryIndex
> Transforming component class com.example.pages.category.CategoryIndex
> org.apache.tapestry5.internal.services.TransformationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> Checking field read category in method _$advised$getSubNodesForCurrentNode(): replacing with $_ = $0._$get_category();
> @Cached(watch = "currentNode")
> public List<CategoryTreeNode> getSubNodesForCurrentNode() {
> if (currentNode.category == null)
> return Collections.emptyList();
> return buildNodesForCategory(currentNode.category);
> }
> Because the CategoryIndex page has a field named "category", the transformation attempted to find it's replaced read access method, _$get_category(), in the non-component class (CategoryTreeNode).
> The fault is in here:
> ExprEditor editor = new ExprEditor()
> {
> private final Set<CtBehavior> addedMethods = CollectionFactory.newSet();
> {
> for (TransformMethodImpl tmi : methods.values())
> {
> if (tmi.added)
> addedMethods.add(tmi.method);
> }
> }
> public void edit(FieldAccess access) throws CannotCompileException
> {
> CtBehavior where = access.where();
> if (where instanceof CtConstructor)
> return;
> boolean isRead = access.isReader();
> String fieldName = access.getFieldName();
> CtMethod method = (CtMethod) where;
> formatter.format("Checking field %s %s in method %s(): ", isRead ? "read" : "write", fieldName,
> method.getName());
> // Ignore any methods to were added as part of the transformation.
> // If we reference the field there, we really mean the field.
> if (addedMethods.contains(where))
> {
> formatter.format("added method\n");
> return;
> }
> Map<String, String> transformMap = isRead ? fieldReadTransforms : fieldWriteTransforms;
> String body = transformMap.get(fieldName);
> if (body == null)
> {
> formatter.format("field not transformed\n");
> return;
> }
> formatter.format("replacing with %s\n", body);
> access.replace(body);
> }
> };
> Have to ensure that the field access is for a field of the component itself.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Assigned: (TAP5-1222) Accessing a public field of a
non-component object inside component code can result in a
TransfomationException if the accessed field name matches the name of a
component field
Posted by "Howard M. Lewis Ship (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/TAP5-1222?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Howard M. Lewis Ship reassigned TAP5-1222:
------------------------------------------
Assignee: Howard M. Lewis Ship
> Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field name matches the name of a component field
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: TAP5-1222
> URL: https://issues.apache.org/jira/browse/TAP5-1222
> Project: Tapestry 5
> Issue Type: Bug
> Components: tapestry-core
> Affects Versions: 5.2.0
> Reporter: Howard M. Lewis Ship
> Assignee: Howard M. Lewis Ship
>
> java.lang.ClassNotFoundException
> caught an exception while obtaining a class file for com.example.pages.category.CategoryIndex
> exception
> org.apache.tapestry5.ioc.internal.OperationException: javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> org.apache.tapestry5.ioc.internal.OperationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> trace
> Constructing instance of page class com.example.pages.category.CategoryIndex
> Creating ComponentAssembler for com.example.pages.category.CategoryIndex
> Transforming component class com.example.pages.category.CategoryIndex
> org.apache.tapestry5.internal.services.TransformationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> Checking field read category in method _$advised$getSubNodesForCurrentNode(): replacing with $_ = $0._$get_category();
> @Cached(watch = "currentNode")
> public List<CategoryTreeNode> getSubNodesForCurrentNode() {
> if (currentNode.category == null)
> return Collections.emptyList();
> return buildNodesForCategory(currentNode.category);
> }
> Because the CategoryIndex page has a field named "category", the transformation attempted to find it's replaced read access method, _$get_category(), in the non-component class (CategoryTreeNode).
> The fault is in here:
> ExprEditor editor = new ExprEditor()
> {
> private final Set<CtBehavior> addedMethods = CollectionFactory.newSet();
> {
> for (TransformMethodImpl tmi : methods.values())
> {
> if (tmi.added)
> addedMethods.add(tmi.method);
> }
> }
> public void edit(FieldAccess access) throws CannotCompileException
> {
> CtBehavior where = access.where();
> if (where instanceof CtConstructor)
> return;
> boolean isRead = access.isReader();
> String fieldName = access.getFieldName();
> CtMethod method = (CtMethod) where;
> formatter.format("Checking field %s %s in method %s(): ", isRead ? "read" : "write", fieldName,
> method.getName());
> // Ignore any methods to were added as part of the transformation.
> // If we reference the field there, we really mean the field.
> if (addedMethods.contains(where))
> {
> formatter.format("added method\n");
> return;
> }
> Map<String, String> transformMap = isRead ? fieldReadTransforms : fieldWriteTransforms;
> String body = transformMap.get(fieldName);
> if (body == null)
> {
> formatter.format("field not transformed\n");
> return;
> }
> formatter.format("replacing with %s\n", body);
> access.replace(body);
> }
> };
> Have to ensure that the field access is for a field of the component itself.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Assigned: (TAP5-1222) Accessing a public field of a
non-component object inside component code can result in a
TransfomationException if the accessed field name matches the name of a
component field
Posted by "Howard M. Lewis Ship (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/TAP5-1222?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Howard M. Lewis Ship reassigned TAP5-1222:
------------------------------------------
Assignee: Howard M. Lewis Ship
> Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field name matches the name of a component field
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: TAP5-1222
> URL: https://issues.apache.org/jira/browse/TAP5-1222
> Project: Tapestry 5
> Issue Type: Bug
> Components: tapestry-core
> Affects Versions: 5.2.0
> Reporter: Howard M. Lewis Ship
> Assignee: Howard M. Lewis Ship
>
> java.lang.ClassNotFoundException
> caught an exception while obtaining a class file for com.example.pages.category.CategoryIndex
> exception
> org.apache.tapestry5.ioc.internal.OperationException: javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> org.apache.tapestry5.ioc.internal.OperationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> trace
> Constructing instance of page class com.example.pages.category.CategoryIndex
> Creating ComponentAssembler for com.example.pages.category.CategoryIndex
> Transforming component class com.example.pages.category.CategoryIndex
> org.apache.tapestry5.internal.services.TransformationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> Checking field read category in method _$advised$getSubNodesForCurrentNode(): replacing with $_ = $0._$get_category();
> @Cached(watch = "currentNode")
> public List<CategoryTreeNode> getSubNodesForCurrentNode() {
> if (currentNode.category == null)
> return Collections.emptyList();
> return buildNodesForCategory(currentNode.category);
> }
> Because the CategoryIndex page has a field named "category", the transformation attempted to find it's replaced read access method, _$get_category(), in the non-component class (CategoryTreeNode).
> The fault is in here:
> ExprEditor editor = new ExprEditor()
> {
> private final Set<CtBehavior> addedMethods = CollectionFactory.newSet();
> {
> for (TransformMethodImpl tmi : methods.values())
> {
> if (tmi.added)
> addedMethods.add(tmi.method);
> }
> }
> public void edit(FieldAccess access) throws CannotCompileException
> {
> CtBehavior where = access.where();
> if (where instanceof CtConstructor)
> return;
> boolean isRead = access.isReader();
> String fieldName = access.getFieldName();
> CtMethod method = (CtMethod) where;
> formatter.format("Checking field %s %s in method %s(): ", isRead ? "read" : "write", fieldName,
> method.getName());
> // Ignore any methods to were added as part of the transformation.
> // If we reference the field there, we really mean the field.
> if (addedMethods.contains(where))
> {
> formatter.format("added method\n");
> return;
> }
> Map<String, String> transformMap = isRead ? fieldReadTransforms : fieldWriteTransforms;
> String body = transformMap.get(fieldName);
> if (body == null)
> {
> formatter.format("field not transformed\n");
> return;
> }
> formatter.format("replacing with %s\n", body);
> access.replace(body);
> }
> };
> Have to ensure that the field access is for a field of the component itself.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Commented: (TAP5-1222) Accessing a public field of a
non-component object inside component code can result in a
TransfomationException if the accessed field name matches the name of a
component field
Posted by "Hudson (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/TAP5-1222?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12900528#action_12900528 ]
Hudson commented on TAP5-1222:
------------------------------
Integrated in tapestry-5.2-freestyle #176 (See [https://hudson.apache.org/hudson/job/tapestry-5.2-freestyle/176/])
TAP5-1222: Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field name matches the name of a component field
> Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field name matches the name of a component field
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: TAP5-1222
> URL: https://issues.apache.org/jira/browse/TAP5-1222
> Project: Tapestry 5
> Issue Type: Bug
> Components: tapestry-core
> Affects Versions: 5.2.0
> Reporter: Howard M. Lewis Ship
> Assignee: Howard M. Lewis Ship
> Fix For: 5.2.1
>
>
> java.lang.ClassNotFoundException
> caught an exception while obtaining a class file for com.example.pages.category.CategoryIndex
> exception
> org.apache.tapestry5.ioc.internal.OperationException: javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> org.apache.tapestry5.ioc.internal.OperationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> trace
> Constructing instance of page class com.example.pages.category.CategoryIndex
> Creating ComponentAssembler for com.example.pages.category.CategoryIndex
> Transforming component class com.example.pages.category.CategoryIndex
> org.apache.tapestry5.internal.services.TransformationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> Checking field read category in method _$advised$getSubNodesForCurrentNode(): replacing with $_ = $0._$get_category();
> @Cached(watch = "currentNode")
> public List<CategoryTreeNode> getSubNodesForCurrentNode() {
> if (currentNode.category == null)
> return Collections.emptyList();
> return buildNodesForCategory(currentNode.category);
> }
> Because the CategoryIndex page has a field named "category", the transformation attempted to find it's replaced read access method, _$get_category(), in the non-component class (CategoryTreeNode).
> The fault is in here:
> ExprEditor editor = new ExprEditor()
> {
> private final Set<CtBehavior> addedMethods = CollectionFactory.newSet();
> {
> for (TransformMethodImpl tmi : methods.values())
> {
> if (tmi.added)
> addedMethods.add(tmi.method);
> }
> }
> public void edit(FieldAccess access) throws CannotCompileException
> {
> CtBehavior where = access.where();
> if (where instanceof CtConstructor)
> return;
> boolean isRead = access.isReader();
> String fieldName = access.getFieldName();
> CtMethod method = (CtMethod) where;
> formatter.format("Checking field %s %s in method %s(): ", isRead ? "read" : "write", fieldName,
> method.getName());
> // Ignore any methods to were added as part of the transformation.
> // If we reference the field there, we really mean the field.
> if (addedMethods.contains(where))
> {
> formatter.format("added method\n");
> return;
> }
> Map<String, String> transformMap = isRead ? fieldReadTransforms : fieldWriteTransforms;
> String body = transformMap.get(fieldName);
> if (body == null)
> {
> formatter.format("field not transformed\n");
> return;
> }
> formatter.format("replacing with %s\n", body);
> access.replace(body);
> }
> };
> Have to ensure that the field access is for a field of the component itself.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Updated: (TAP5-1222) Accessing a public field of a
non-component object inside component code can result in a
TransfomationException if the accessed field name matches the name of a
component field
Posted by "Howard M. Lewis Ship (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/TAP5-1222?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Howard M. Lewis Ship updated TAP5-1222:
---------------------------------------
Summary: Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field name matches the name of a component field (was: Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field matches a field of the component)
> Accessing a public field of a non-component object inside component code can result in a TransfomationException if the accessed field name matches the name of a component field
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: TAP5-1222
> URL: https://issues.apache.org/jira/browse/TAP5-1222
> Project: Tapestry 5
> Issue Type: Bug
> Components: tapestry-core
> Affects Versions: 5.2.0
> Reporter: Howard M. Lewis Ship
>
> java.lang.ClassNotFoundException
> caught an exception while obtaining a class file for com.example.pages.category.CategoryIndex
> exception
> org.apache.tapestry5.ioc.internal.OperationException: javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> org.apache.tapestry5.ioc.internal.OperationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> trace
> Constructing instance of page class com.example.pages.category.CategoryIndex
> Creating ComponentAssembler for com.example.pages.category.CategoryIndex
> Transforming component class com.example.pages.category.CategoryIndex
> org.apache.tapestry5.internal.services.TransformationException
> javassist.CannotCompileException: [source error] _$get_category() not found in com.example.data.CategoryTreeNode
> Checking field read category in method _$advised$getSubNodesForCurrentNode(): replacing with $_ = $0._$get_category();
> @Cached(watch = "currentNode")
> public List<CategoryTreeNode> getSubNodesForCurrentNode() {
> if (currentNode.category == null)
> return Collections.emptyList();
> return buildNodesForCategory(currentNode.category);
> }
> Because the CategoryIndex page has a field named "category", the transformation attempted to find it's replaced read access method, _$get_category(), in the non-component class (CategoryTreeNode).
> The fault is in here:
> ExprEditor editor = new ExprEditor()
> {
> private final Set<CtBehavior> addedMethods = CollectionFactory.newSet();
> {
> for (TransformMethodImpl tmi : methods.values())
> {
> if (tmi.added)
> addedMethods.add(tmi.method);
> }
> }
> public void edit(FieldAccess access) throws CannotCompileException
> {
> CtBehavior where = access.where();
> if (where instanceof CtConstructor)
> return;
> boolean isRead = access.isReader();
> String fieldName = access.getFieldName();
> CtMethod method = (CtMethod) where;
> formatter.format("Checking field %s %s in method %s(): ", isRead ? "read" : "write", fieldName,
> method.getName());
> // Ignore any methods to were added as part of the transformation.
> // If we reference the field there, we really mean the field.
> if (addedMethods.contains(where))
> {
> formatter.format("added method\n");
> return;
> }
> Map<String, String> transformMap = isRead ? fieldReadTransforms : fieldWriteTransforms;
> String body = transformMap.get(fieldName);
> if (body == null)
> {
> formatter.format("field not transformed\n");
> return;
> }
> formatter.format("replacing with %s\n", body);
> access.replace(body);
> }
> };
> Have to ensure that the field access is for a field of the component itself.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.