| |
---|
| | if (getter.getBody() == null || getter.getBody().getStatements().size() == 0) { |
---|
| | getter.addStatement("return value;"); |
---|
| | } |
---|
| | // methods for input events |
---|
| | Map.Entry<DataflowChannelGenerator, Set<ChannelMember>> ioChannelAndMembers = getIOChannelAndMembers(resource, model); |
---|
| | if (ioChannelAndMembers != null) { |
---|
| | Set<ChannelMember> outs = ioChannelAndMembers.getValue(); |
---|
| | Map<DataflowChannelGenerator, Set<ChannelMember>> ioChannelsAndMembers = getIOChannelsAndMembers(resource, model); |
---|
| | for (Map.Entry<DataflowChannelGenerator, Set<ChannelMember>> entry: ioChannelsAndMembers.entrySet()) { |
---|
| | Set<ChannelMember> outs = entry.getValue(); |
---|
| | for (ChannelMember out: outs) { |
---|
| | MethodDeclaration input = getInputMethod(type, out); |
---|
| | if (input != null) { |
---|
| | String[] sideEffects = new String[] {""}; |
---|
| | Expression updateExp = ioChannelAndMembers.getKey().deriveUpdateExpressionOf(out, JavaCodeGenerator.pushAccessor); |
---|
| | Expression updateExp = entry.getKey().deriveUpdateExpressionOf(out, JavaCodeGenerator.pushAccessor); |
---|
| | String newState = updateExp.toImplementation(sideEffects); |
---|
| | String updateStatement; |
---|
| | if (updateExp instanceof Term && ((Term) updateExp).getSymbol().isImplWithSideEffect()) { |
---|
| | updateStatement = sideEffects[0]; |
---|
| |
---|
| | } |
---|
| | return null; |
---|
| | } |
---|
| | |
---|
| | private static Map.Entry<DataflowChannelGenerator, Set<ChannelMember>> getIOChannelAndMembers(ResourceNode resource, DataFlowModel model) { |
---|
| | Set<ChannelMember> channelMembers = new HashSet<>(); |
---|
| | DataflowChannelGenerator channel = null; |
---|
| | private static Map<DataflowChannelGenerator, Set<ChannelMember>> getIOChannelsAndMembers(ResourceNode resource, DataFlowModel model) { |
---|
| | Map<DataflowChannelGenerator, Set<ChannelMember>> ioChannelsAndMembers = new HashMap<>(); |
---|
| | for (ChannelGenerator c: model.getIOChannelGenerators()) { |
---|
| | DataflowChannelGenerator ch = (DataflowChannelGenerator) c; |
---|
| | // I/O channel |
---|
| | for (ChannelMember out: ch.getOutputChannelMembers()) { |
---|
| | if (out.getIdentifierTemplate().equals(resource.getIdentifierTemplate())) { |
---|
| | if (out.getStateTransition().getMessageExpression() instanceof Term || out.getStateTransition().getMessageExpression() instanceof Variable) { |
---|
| | channel = ch; |
---|
| | Set<ChannelMember> channelMembers = ioChannelsAndMembers.get(ch); |
---|
| | if (channelMembers == null) { |
---|
| | channelMembers = new HashSet<>(); |
---|
| | ioChannelsAndMembers.put(ch, channelMembers); |
---|
| | } |
---|
| | channelMembers.add(out); |
---|
| | } |
---|
| | } |
---|
| | } |
---|
| | } |
---|
| | if (channel == null) return null; |
---|
| | return new AbstractMap.SimpleEntry<>(channel, channelMembers); |
---|
| | return ioChannelsAndMembers; |
---|
| | } |
---|
| | |
---|
| | private static List<MethodDeclaration> getInputMethods(TypeDeclaration type, ResourceNode resource, DataFlowModel model) { |
---|
| | List<MethodDeclaration> inputs = new ArrayList<>(); |
---|
| |
---|
| | |