- // here, transfer ownership from LHS to RHS when it creates alias
- if (isReference(an.getDest().getType()) && !an.getSrc().getType().isNull()) {
-
- if (!isField(an.getDest())) {
- if (an.getDest().kind() == Kind.NameNode) {
- NameNode nn = ((NameNode) an.getDest());
- String baseId = getBase(an.getSrc());
-
- if (isField(an.getSrc())) {
- if (isOwned(md, baseId)) {
- addOwnSet(md, nn.getName().toString());
- }
- } else {
- if (isOwned(md, an.getSrc().printNode(0))) {
- addOwnSet(md, nn.getName().toString());
- }
- }
- }
+ if (!an.getSrc().getType().isNull()) {
+
+ TypeDescriptor srcType = getTypeDescriptor(an.getSrc());
+ boolean isSourceOwned = false;
+
+ if (srcType.getExtension() != null) {
+ SSJavaType srcLocationType = (SSJavaType) srcType.getExtension();
+ isSourceOwned = srcLocationType.isOwned();
+ }
+
+ if (!isField(an.getDest()) && isSourceOwned) {
+ // here, transfer ownership from LHS to RHS when it creates alias
+ TypeDescriptor destType = getTypeDescriptor(an.getDest());
+ destType.setExtension(new SSJavaType(isSourceOwned));