diff options
author | Ed Willink | 2018-08-06 13:48:47 +0000 |
---|---|---|
committer | Ed Willink | 2018-09-04 12:19:55 +0000 |
commit | cf57c3ff988a6f1b9b585fabe07540325a78dd32 (patch) | |
tree | b026a7fe3901832aad3d49afa5e7f00c7e2cad7f | |
parent | 622ae0f92f6c63078f59aa9e838273af5d8f61af (diff) | |
download | org.eclipse.qvtd-cf57c3ff988a6f1b9b585fabe07540325a78dd32.tar.gz org.eclipse.qvtd-cf57c3ff988a6f1b9b585fabe07540325a78dd32.tar.xz org.eclipse.qvtd-cf57c3ff988a6f1b9b585fabe07540325a78dd32.zip |
[529130] Abstract PartialRegionAnalysis
9 files changed, 116 insertions, 72 deletions
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/PartialRegionAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/PartialRegionAnalysis.java new file mode 100644 index 000000000..4f6010343 --- /dev/null +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/PartialRegionAnalysis.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2016, 2018 Willink Transformations and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v20.html + * + * Contributors: + * E.D.Willink - Initial API and implementation + *******************************************************************************/ +package org.eclipse.qvtd.compiler.internal.qvts2qvts; + +import java.util.List; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.ocl.pivot.utilities.Nameable; +import org.eclipse.qvtd.compiler.internal.qvts2qvts.partitioner.TraceClassAnalysis; +import org.eclipse.qvtd.compiler.internal.qvts2qvts.partitioner.TracePropertyAnalysis; +import org.eclipse.qvtd.pivot.qvtschedule.ClassDatum; +import org.eclipse.qvtd.pivot.qvtschedule.Node; +import org.eclipse.qvtd.pivot.qvtschedule.PropertyDatum; + +public interface PartialRegionAnalysis<RA extends PartialRegionAnalysis<@NonNull RA>> extends Nameable +{ + @Nullable Iterable<@NonNull TraceClassAnalysis<@NonNull RA>> getConsumedTraceClassAnalyses(); + @Nullable Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>> getConsumedTracePropertyAnalyses(); + @Nullable Iterable<@NonNull TraceClassAnalysis<@NonNull RA>> getProducedTraceClassAnalyses(); + @Nullable Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>> getProducedTracePropertyAnalyses(); + @Nullable Iterable<@NonNull TraceClassAnalysis<@NonNull RA>> getSuperProducedTraceClassAnalyses(); + @Nullable Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>> getSuperProducedTracePropertyAnalyses(); + @NonNull TraceClassAnalysis<@NonNull RA> getTraceClassAnalysis(@NonNull ClassDatum traceClassDatum); + @NonNull TracePropertyAnalysis<@NonNull RA> getTracePropertyAnalysis(@NonNull PropertyDatum propertyDatum); + @NonNull List<@NonNull Node> getTraceNodes(); +}
\ No newline at end of file diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/RegionAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/RegionAnalysis.java index 4a3195c88..165cbaa2f 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/RegionAnalysis.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/RegionAnalysis.java @@ -21,7 +21,6 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.ocl.pivot.CompleteClass; import org.eclipse.ocl.pivot.Property; -import org.eclipse.ocl.pivot.utilities.Nameable; import org.eclipse.qvtd.compiler.internal.qvtb2qvts.RegionHelper; import org.eclipse.qvtd.compiler.internal.qvtb2qvts.ScheduleManager; import org.eclipse.qvtd.compiler.internal.qvtb2qvts.TransformationAnalysis; @@ -43,7 +42,7 @@ import org.eclipse.qvtd.pivot.qvtschedule.utilities.QVTscheduleUtil; import com.google.common.collect.Iterables; -public class RegionAnalysis extends RegionHelper<@NonNull Region>implements Nameable +public class RegionAnalysis extends RegionHelper<@NonNull Region> implements PartialRegionAnalysis<@NonNull RegionAnalysis> { protected final @NonNull TransformationAnalysis transformationAnalysis; // protected final @NonNull ScheduleManager scheduleManager; @@ -743,10 +742,12 @@ public class RegionAnalysis extends RegionHelper<@NonNull Region>implements Name return constantOutputNodes; } + @Override public @Nullable Iterable<@NonNull TraceClassAnalysis<@NonNull RegionAnalysis>> getConsumedTraceClassAnalyses() { return consumedTraceClassAnalyses; } + @Override public @Nullable Iterable<@NonNull TracePropertyAnalysis<@NonNull RegionAnalysis>> getConsumedTracePropertyAnalyses() { return consumedTracePropertyAnalyses; } @@ -798,10 +799,12 @@ public class RegionAnalysis extends RegionHelper<@NonNull Region>implements Name return predicatedOutputNodes; } + @Override public @Nullable Iterable<@NonNull TraceClassAnalysis<@NonNull RegionAnalysis>> getProducedTraceClassAnalyses() { return producedTraceClassAnalyses; } + @Override public @Nullable Iterable<@NonNull TracePropertyAnalysis<@NonNull RegionAnalysis>> getProducedTracePropertyAnalyses() { return producedTracePropertyAnalyses; } @@ -845,6 +848,7 @@ public class RegionAnalysis extends RegionHelper<@NonNull Region>implements Name return successEdge != null ? successEdge.getTargetNode() : null; } + @Override public @Nullable Iterable<@NonNull TraceClassAnalysis<@NonNull RegionAnalysis>> getSuperProducedTraceClassAnalyses() { List<@NonNull TraceClassAnalysis<@NonNull RegionAnalysis>> producedTraceClassAnalyses2 = producedTraceClassAnalyses; if (producedTraceClassAnalyses2 != null) { @@ -859,6 +863,7 @@ public class RegionAnalysis extends RegionHelper<@NonNull Region>implements Name return superProducedTraceClassAnalyses; } + @Override public @Nullable Iterable<@NonNull TracePropertyAnalysis<@NonNull RegionAnalysis>> getSuperProducedTracePropertyAnalyses() { List<@NonNull TracePropertyAnalysis<@NonNull RegionAnalysis>> producedTracePropertyAnalyses2 = producedTracePropertyAnalyses; if (producedTracePropertyAnalyses2 != null) { @@ -867,16 +872,27 @@ public class RegionAnalysis extends RegionHelper<@NonNull Region>implements Name superProducedTracePropertyAnalyses2 = superProducedTracePropertyAnalyses = new HashSet<>(); } for (@NonNull TracePropertyAnalysis<@NonNull RegionAnalysis> producedTracePropertyAnalysis : producedTracePropertyAnalyses2) { - Iterables.addAll(superProducedTracePropertyAnalyses2, producedTracePropertyAnalysis.getSuperTracePropertyAnalyses()); + Iterables.addAll(superProducedTracePropertyAnalyses2, producedTracePropertyAnalysis.getSuperTracePropertyAnalyses(this)); } } return superProducedTracePropertyAnalyses; } + @Override + public @NonNull TraceClassAnalysis<@NonNull RegionAnalysis> getTraceClassAnalysis(@NonNull ClassDatum traceClassDatum) { + return transformationAnalysis.getTraceClassAnalysis(traceClassDatum); + } + + @Override + public @NonNull TracePropertyAnalysis<@NonNull RegionAnalysis> getTracePropertyAnalysis(@NonNull PropertyDatum propertyDatum) { + return transformationAnalysis.getTracePropertyAnalysis(propertyDatum); + } + public @Nullable Edge getTraceEdge(@NonNull Node node) { return node2traceEdge.get(node); } + @Override public @NonNull List<@NonNull Node> getTraceNodes() { return traceNodes; } diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/CycleAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/CycleAnalysis.java index 2e4738947..473e89751 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/CycleAnalysis.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/CycleAnalysis.java @@ -10,21 +10,15 @@ *******************************************************************************/ package org.eclipse.qvtd.compiler.internal.qvts2qvts.partitioner; -import java.util.ArrayList; -import java.util.List; import java.util.Set; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.qvtd.compiler.internal.qvts2qvts.RegionAnalysis; -import org.eclipse.qvtd.pivot.qvtschedule.MappingRegion; -import org.eclipse.qvtd.pivot.qvtschedule.ScheduledRegion; - -import com.google.common.collect.Iterables; +import org.eclipse.qvtd.compiler.internal.qvts2qvts.PartialRegionAnalysis; /** * Each CycleAnalysis identifies one group of regionAnalyses that contribute to a cycle. */ -public abstract class CycleAnalysis<RA extends RegionAnalysis> +public abstract class CycleAnalysis<RA extends PartialRegionAnalysis<@NonNull RA>> { protected final @NonNull CyclesAnalysis<@NonNull RA> cyclesAnalysis; protected final @NonNull Set<@NonNull RA> regionAnalyses; @@ -52,22 +46,4 @@ public abstract class CycleAnalysis<RA extends RegionAnalysis> public @NonNull Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>> getTracePropertyAnalyses() { return tracePropertyAnalyses; } - - public @NonNull Iterable<@NonNull Partition> partition(@NonNull Iterable<@NonNull MappingPartitioner> orderedMappingPartitioners) { - List<@NonNull Partition> partitions = new ArrayList<>(); - for (@NonNull MappingPartitioner mappingPartitioner : orderedMappingPartitioners) { - RegionAnalysis regionAnalysis = mappingPartitioner.getRegionAnalysis(); - if (regionAnalyses.contains(regionAnalysis)) { - MappingRegion oldRegion = mappingPartitioner.getRegion(); - ScheduledRegion scheduledRegion = oldRegion.getScheduledRegion(); - Iterable<@NonNull Partition> newPartitions = mappingPartitioner.partition(); - // oldRegion.setScheduledRegion(null); - // for (@NonNull MappingRegion newRegion : newRegions) { - // newRegion.setScheduledRegion(scheduledRegion); - // } - Iterables.addAll(partitions, newPartitions); - } - } - return partitions; - } } diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/CycleRegionAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/CycleRegionAnalysis.java index 90d825fe8..9207609f3 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/CycleRegionAnalysis.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/CycleRegionAnalysis.java @@ -10,18 +10,23 @@ *******************************************************************************/ package org.eclipse.qvtd.compiler.internal.qvts2qvts.partitioner; +import java.util.ArrayList; +import java.util.List; import java.util.Set; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; import org.eclipse.qvtd.compiler.internal.qvts2qvts.RegionAnalysis; +import org.eclipse.qvtd.pivot.qvtschedule.MappingRegion; +import org.eclipse.qvtd.pivot.qvtschedule.ScheduledRegion; + +import com.google.common.collect.Iterables; /** * Each CycleAnalysis identifies one group of regionAnalyses that contribute to a cycle. */ public class CycleRegionAnalysis extends CycleAnalysis<@NonNull RegionAnalysis> { - private @Nullable Boolean isInfallible = null; + // private @Nullable Boolean isInfallible = null; public CycleRegionAnalysis(@NonNull CyclesAnalysis<@NonNull RegionAnalysis> cyclesAnalysis, @NonNull Set<@NonNull RegionAnalysis> regionAnalyses, @NonNull Set<@NonNull TraceClassAnalysis<@NonNull RegionAnalysis>> traceClassAnalyses, @NonNull Set<@NonNull TracePropertyAnalysis<@NonNull RegionAnalysis>> tracePropertyAnalyses) { @@ -46,4 +51,22 @@ public class CycleRegionAnalysis extends CycleAnalysis<@NonNull RegionAnalysis> } return isInfallible2; } */ + + public @NonNull Iterable<@NonNull Partition> partition(@NonNull Iterable<@NonNull MappingPartitioner> orderedMappingPartitioners) { + List<@NonNull Partition> partitions = new ArrayList<>(); + for (@NonNull MappingPartitioner mappingPartitioner : orderedMappingPartitioners) { + RegionAnalysis regionAnalysis = mappingPartitioner.getRegionAnalysis(); + if (regionAnalyses.contains(regionAnalysis)) { + MappingRegion oldRegion = mappingPartitioner.getRegion(); + ScheduledRegion scheduledRegion = oldRegion.getScheduledRegion(); + Iterable<@NonNull Partition> newPartitions = mappingPartitioner.partition(); + // oldRegion.setScheduledRegion(null); + // for (@NonNull MappingRegion newRegion : newRegions) { + // newRegion.setScheduledRegion(scheduledRegion); + // } + Iterables.addAll(partitions, newPartitions); + } + } + return partitions; + } } diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/CyclesAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/CyclesAnalysis.java index c6bc9ca11..306f5b8bc 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/CyclesAnalysis.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/CyclesAnalysis.java @@ -22,7 +22,7 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.ocl.pivot.utilities.NameUtil; import org.eclipse.qvtd.compiler.internal.qvtb2qvts.TransformationAnalysis; -import org.eclipse.qvtd.compiler.internal.qvts2qvts.RegionAnalysis; +import org.eclipse.qvtd.compiler.internal.qvts2qvts.PartialRegionAnalysis; import org.eclipse.qvtd.compiler.internal.utilities.CompilerUtil; import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil; @@ -32,7 +32,7 @@ import com.google.common.collect.Lists; /** * The CyclesAnalysis identifies a CycleAnalysis for each group of regionAnalyses that contribute to a cycle. */ -public abstract class CyclesAnalysis<RA extends RegionAnalysis> +public abstract class CyclesAnalysis<RA extends PartialRegionAnalysis<@NonNull RA>> { protected final @NonNull TransformationAnalysis transformationAnalysis; protected final @NonNull Iterable<@NonNull RA> regionAnalyses; @@ -124,8 +124,7 @@ public abstract class CyclesAnalysis<RA extends RegionAnalysis> consumer2producers.put(regionAnalysis, new HashSet<>()); } for (@NonNull RA consumer : regionAnalyses) { - @SuppressWarnings("unchecked") - Iterable<@NonNull ? extends TraceClassAnalysis<@NonNull RA>> consumedTraceClassAnalyses = (Iterable<@NonNull ? extends TraceClassAnalysis<@NonNull RA>>)(Object)consumer.getConsumedTraceClassAnalyses(); + Iterable<@NonNull TraceClassAnalysis<@NonNull RA>> consumedTraceClassAnalyses = consumer.getConsumedTraceClassAnalyses(); if (consumedTraceClassAnalyses != null) { for (@NonNull TraceClassAnalysis<@NonNull RA> consumedTraceClassAnalysis : consumedTraceClassAnalyses) { for (@NonNull TraceClassAnalysis<@NonNull RA> subConsumedTraceClass : consumedTraceClassAnalysis.getSubTraceClassAnalyses()) { @@ -137,8 +136,7 @@ public abstract class CyclesAnalysis<RA extends RegionAnalysis> } } } - @SuppressWarnings("unchecked") - Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>> consumedTracePropertyAnalyses = (Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>>)(Object)consumer.getConsumedTracePropertyAnalyses(); + Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>> consumedTracePropertyAnalyses = consumer.getConsumedTracePropertyAnalyses(); if (consumedTracePropertyAnalyses != null) { for (@NonNull TracePropertyAnalysis<@NonNull RA> consumedTracePropertyAnalysis : consumedTracePropertyAnalyses) { for (@NonNull RA producer : consumedTracePropertyAnalysis.getProducers()) { @@ -186,8 +184,7 @@ public abstract class CyclesAnalysis<RA extends RegionAnalysis> producer2consumers.put(regionAnalysis, new HashSet<>()); } for (@NonNull RA producer : regionAnalyses) { - @SuppressWarnings("unchecked") - Iterable<@NonNull TraceClassAnalysis<@NonNull RA>> producedTraceClassAnalyses = (Iterable<@NonNull TraceClassAnalysis<@NonNull RA>>)(Object)producer.getProducedTraceClassAnalyses(); + Iterable<@NonNull TraceClassAnalysis<@NonNull RA>> producedTraceClassAnalyses = producer.getProducedTraceClassAnalyses(); if (producedTraceClassAnalyses != null) { for (@NonNull TraceClassAnalysis<@NonNull RA> producedTraceClassAnalysis : producedTraceClassAnalyses) { for (@NonNull TraceClassAnalysis<@NonNull RA> superProducedTraceClassAnalysis : producedTraceClassAnalysis.getSuperTraceClassAnalyses()) { @@ -199,8 +196,7 @@ public abstract class CyclesAnalysis<RA extends RegionAnalysis> } } } - @SuppressWarnings("unchecked") - Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>> producedTracePropertyAnalyses = (Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>>)(Object)producer.getProducedTracePropertyAnalyses(); + Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>> producedTracePropertyAnalyses = producer.getProducedTracePropertyAnalyses(); if (producedTracePropertyAnalyses != null) { for (@NonNull TracePropertyAnalysis<@NonNull RA> producedTracePropertyAnalysis : producedTracePropertyAnalyses) { for (@NonNull RA consumer : producedTracePropertyAnalysis.getConsumers()) { @@ -225,12 +221,12 @@ public abstract class CyclesAnalysis<RA extends RegionAnalysis> } Map<@NonNull RA, @NonNull Set<@NonNull RA>> producer2consumersClosure = CompilerUtil.computeClosure(producer2consumers); if (TransformationPartitioner.SUCCESSORS.isActive()) { - for (@NonNull RegionAnalysis predecessor : regionAnalyses) { + for (@NonNull RA predecessor : regionAnalyses) { StringBuilder s = new StringBuilder(); s.append(predecessor + ":"); - List<@NonNull RegionAnalysis> consumers = new ArrayList<>(producer2consumersClosure.get(predecessor)); + List<@NonNull RA> consumers = new ArrayList<>(producer2consumersClosure.get(predecessor)); Collections.sort(consumers, NameUtil.NAMEABLE_COMPARATOR); - for (@NonNull RegionAnalysis consumer : consumers) { + for (@NonNull RA consumer : consumers) { s.append(" " + consumer); } TransformationPartitioner.SUCCESSORS.println(s.toString()); @@ -258,27 +254,27 @@ public abstract class CyclesAnalysis<RA extends RegionAnalysis> Collections.sort(regionAnalyses2, NameUtil.NAMEABLE_COMPARATOR); for (@NonNull RA regionAnalysis : regionAnalyses2) { s.append("\n\t" + regionAnalysis); - Iterable<@NonNull ? extends TraceClassAnalysis<@NonNull RegionAnalysis>> consumedTraceClassAnalyses = regionAnalysis.getConsumedTraceClassAnalyses(); + Iterable<@NonNull ? extends TraceClassAnalysis<@NonNull RA>> consumedTraceClassAnalyses = regionAnalysis.getConsumedTraceClassAnalyses(); if (consumedTraceClassAnalyses != null) { - for (@NonNull TraceClassAnalysis<@NonNull RegionAnalysis> traceClassAnalysis : consumedTraceClassAnalyses) { + for (@NonNull TraceClassAnalysis<@NonNull RA> traceClassAnalysis : consumedTraceClassAnalyses) { s.append("\n\t =>" + traceClassAnalysis); } } - Iterable<@NonNull ? extends TraceClassAnalysis<@NonNull RegionAnalysis>> producedTraceClassAnalyses = regionAnalysis.getProducedTraceClassAnalyses(); + Iterable<@NonNull ? extends TraceClassAnalysis<@NonNull RA>> producedTraceClassAnalyses = regionAnalysis.getProducedTraceClassAnalyses(); if (producedTraceClassAnalyses != null) { - for (@NonNull TraceClassAnalysis<@NonNull RegionAnalysis> traceClassAnalysis : producedTraceClassAnalyses) { + for (@NonNull TraceClassAnalysis<@NonNull RA> traceClassAnalysis : producedTraceClassAnalyses) { s.append("\n\t <=" + traceClassAnalysis); } } - Iterable<@NonNull ? extends TracePropertyAnalysis<@NonNull RegionAnalysis>> consumedTracePropertyAnalyses = regionAnalysis.getConsumedTracePropertyAnalyses(); + Iterable<@NonNull ? extends TracePropertyAnalysis<@NonNull RA>> consumedTracePropertyAnalyses = regionAnalysis.getConsumedTracePropertyAnalyses(); if (consumedTracePropertyAnalyses != null) { - for (@NonNull TracePropertyAnalysis<@NonNull RegionAnalysis> tracePropertyAnalysis : consumedTracePropertyAnalyses) { + for (@NonNull TracePropertyAnalysis<@NonNull RA> tracePropertyAnalysis : consumedTracePropertyAnalyses) { s.append("\n\t =>" + tracePropertyAnalysis); } } - Iterable<@NonNull ? extends TracePropertyAnalysis<@NonNull RegionAnalysis>> producedTracePropertyAnalyses = regionAnalysis.getProducedTracePropertyAnalyses(); + Iterable<@NonNull ? extends TracePropertyAnalysis<@NonNull RA>> producedTracePropertyAnalyses = regionAnalysis.getProducedTracePropertyAnalyses(); if (producedTracePropertyAnalyses != null) { - for (@NonNull TracePropertyAnalysis<@NonNull RegionAnalysis> tracePropertyAnalysis : producedTracePropertyAnalyses) { + for (@NonNull TracePropertyAnalysis<@NonNull RA> tracePropertyAnalysis : producedTracePropertyAnalyses) { s.append("\n\t <=" + tracePropertyAnalysis); } } @@ -306,18 +302,15 @@ public abstract class CyclesAnalysis<RA extends RegionAnalysis> Set<@NonNull TraceClassAnalysis<@NonNull RA>> superProducedTraceClassAnalyses = new HashSet<>(); Set<@NonNull TracePropertyAnalysis<@NonNull RA>> consumedTracePropertyAnalyses = new HashSet<>(); for (@NonNull RA cyclicRegionAnalysis : cyclicRegionAnalyses) { - @SuppressWarnings("unchecked") - Iterable<@NonNull TraceClassAnalysis<@NonNull RA>> consumedTraceClassAnalyses2 = (Iterable<@NonNull TraceClassAnalysis<@NonNull RA>>)(Object)cyclicRegionAnalysis.getConsumedTraceClassAnalyses(); + Iterable<@NonNull TraceClassAnalysis<@NonNull RA>> consumedTraceClassAnalyses2 = cyclicRegionAnalysis.getConsumedTraceClassAnalyses(); if (consumedTraceClassAnalyses2 != null) { Iterables.addAll(consumedTraceClassAnalyses, consumedTraceClassAnalyses2); } - @SuppressWarnings("unchecked") - Iterable<@NonNull TraceClassAnalysis<@NonNull RA>> superProducedTraceClassAnalyses2 = (Iterable<@NonNull TraceClassAnalysis<@NonNull RA>>)(Object)cyclicRegionAnalysis.getSuperProducedTraceClassAnalyses(); + Iterable<@NonNull TraceClassAnalysis<@NonNull RA>> superProducedTraceClassAnalyses2 = cyclicRegionAnalysis.getSuperProducedTraceClassAnalyses(); if (superProducedTraceClassAnalyses2 != null) { Iterables.addAll(superProducedTraceClassAnalyses, superProducedTraceClassAnalyses2); } - @SuppressWarnings("unchecked") - Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>> consumedTracePropertyAnalyses2 = (Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>>)(Object)cyclicRegionAnalysis.getConsumedTracePropertyAnalyses(); + Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>> consumedTracePropertyAnalyses2 = cyclicRegionAnalysis.getConsumedTracePropertyAnalyses(); if (consumedTracePropertyAnalyses2 != null) { Iterables.addAll(consumedTracePropertyAnalyses, consumedTracePropertyAnalyses2); } diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TraceClassAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TraceClassAnalysis.java index b7c03ba11..80f22ac43 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TraceClassAnalysis.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TraceClassAnalysis.java @@ -25,7 +25,7 @@ import org.eclipse.ocl.pivot.Property; import org.eclipse.ocl.pivot.utilities.NameUtil; import org.eclipse.qvtd.compiler.CompilerChainException; import org.eclipse.qvtd.compiler.internal.qvtb2qvts.TransformationAnalysis; -import org.eclipse.qvtd.compiler.internal.qvts2qvts.RegionAnalysis; +import org.eclipse.qvtd.compiler.internal.qvts2qvts.PartialRegionAnalysis; import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil; import org.eclipse.qvtd.pivot.qvtschedule.ClassDatum; import org.eclipse.qvtd.pivot.qvtschedule.NavigableEdge; @@ -37,7 +37,7 @@ import org.eclipse.qvtd.runtime.evaluation.AbstractDispatch; /** * Each TraceClassAnalysis identifies the usage of one middle trace class. */ -public abstract class TraceClassAnalysis<RA extends RegionAnalysis> extends TraceElementAnalysis<RA> +public abstract class TraceClassAnalysis<RA extends PartialRegionAnalysis<@NonNull RA>> extends TraceElementAnalysis<RA> { protected final @NonNull ClassDatum traceClassDatum; diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TraceElementAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TraceElementAnalysis.java index e27653e54..568528fc5 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TraceElementAnalysis.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TraceElementAnalysis.java @@ -16,12 +16,12 @@ import java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.ocl.pivot.utilities.Nameable; import org.eclipse.qvtd.compiler.internal.qvtb2qvts.TransformationAnalysis; -import org.eclipse.qvtd.compiler.internal.qvts2qvts.RegionAnalysis; +import org.eclipse.qvtd.compiler.internal.qvts2qvts.PartialRegionAnalysis; /** * Each TraceClassAnalysis identifies the usage of one middle trace class or property. */ -public abstract class TraceElementAnalysis<RA extends RegionAnalysis> implements Nameable +public abstract class TraceElementAnalysis<RA extends PartialRegionAnalysis<@NonNull RA>> implements Nameable { protected final @NonNull TransformationAnalysis transformationAnalysis; diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TracePropertyAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TracePropertyAnalysis.java index 3aead2831..b25d61c36 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TracePropertyAnalysis.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TracePropertyAnalysis.java @@ -17,7 +17,8 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.ocl.pivot.Property; import org.eclipse.ocl.pivot.utilities.NameUtil; import org.eclipse.qvtd.compiler.internal.qvtb2qvts.TransformationAnalysis; -import org.eclipse.qvtd.compiler.internal.qvts2qvts.RegionAnalysis; +import org.eclipse.qvtd.compiler.internal.qvts2qvts.PartialRegionAnalysis; +//import org.eclipse.qvtd.compiler.internal.qvts2qvts.RegionAnalysis; import org.eclipse.qvtd.pivot.qvtschedule.ClassDatum; import org.eclipse.qvtd.pivot.qvtschedule.PropertyDatum; import org.eclipse.qvtd.pivot.qvtschedule.utilities.QVTscheduleUtil; @@ -25,11 +26,11 @@ import org.eclipse.qvtd.pivot.qvtschedule.utilities.QVTscheduleUtil; /** * Each TracePropertyAnalysis identifies the usage of one middle trace property. */ -public abstract class TracePropertyAnalysis<RA extends RegionAnalysis> extends TraceElementAnalysis<RA> +public abstract class TracePropertyAnalysis<RA extends PartialRegionAnalysis<@NonNull RA>> extends TraceElementAnalysis<@NonNull RA> { protected final @NonNull PropertyDatum tracePropertyDatum; - public TracePropertyAnalysis(@NonNull TransformationAnalysis transformationAnalysis, @NonNull PropertyDatum tracePropertyDatum) { + protected TracePropertyAnalysis(@NonNull TransformationAnalysis transformationAnalysis, @NonNull PropertyDatum tracePropertyDatum) { super(transformationAnalysis); this.tracePropertyDatum = tracePropertyDatum; assert tracePropertyDatum.getReferredTypedModel() == transformationAnalysis.getScheduleManager().getTraceTypedModel(); @@ -40,15 +41,15 @@ public abstract class TracePropertyAnalysis<RA extends RegionAnalysis> extends T return tracePropertyDatum.getName(); } - public @NonNull Iterable<@NonNull TracePropertyAnalysis<@NonNull RegionAnalysis>> getSuperTracePropertyAnalyses() { - List<@NonNull TracePropertyAnalysis<@NonNull RegionAnalysis>> tracePropertyAnalyses = new ArrayList<>(); + public @NonNull Iterable<@NonNull TracePropertyAnalysis<@NonNull RA>> getSuperTracePropertyAnalyses(@NonNull RA regionAnalysis) { + List<@NonNull TracePropertyAnalysis<@NonNull RA>> tracePropertyAnalyses = new ArrayList<>(); ClassDatum traceClassDatum = QVTscheduleUtil.getOwningClassDatum(tracePropertyDatum); - TraceClassAnalysis<@NonNull RegionAnalysis> traceClassAnalysis = transformationAnalysis.getTraceClassAnalysis(traceClassDatum); - for (@NonNull TraceClassAnalysis<@NonNull RegionAnalysis> superTraceClassAnalysis : traceClassAnalysis.getSuperTraceClassAnalyses()) { + TraceClassAnalysis<@NonNull RA> traceClassAnalysis = regionAnalysis.getTraceClassAnalysis(traceClassDatum); + for (@NonNull TraceClassAnalysis<@NonNull RA> superTraceClassAnalysis : traceClassAnalysis.getSuperTraceClassAnalyses()) { ClassDatum superTraceClassDatum = superTraceClassAnalysis.getClassDatum(); PropertyDatum propertyDatum = NameUtil.getNameable(superTraceClassDatum.getOwnedPropertyDatums(), getName()); if (propertyDatum != null) { - TracePropertyAnalysis<@NonNull RegionAnalysis> tracePropertyAnalysis = transformationAnalysis.getTracePropertyAnalysis(propertyDatum); + TracePropertyAnalysis<@NonNull RA> tracePropertyAnalysis = regionAnalysis.getTracePropertyAnalysis(propertyDatum); if (!tracePropertyAnalyses.contains(tracePropertyAnalysis)) { tracePropertyAnalyses.add(tracePropertyAnalysis); } diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TransformationPartitioner.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TransformationPartitioner.java index 4b3e801a8..91f277678 100644 --- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TransformationPartitioner.java +++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvts2qvts/partitioner/TransformationPartitioner.java @@ -212,9 +212,9 @@ public class TransformationPartitioner // Perform per-mapping partitioning // List<@NonNull Partition> partitions = new ArrayList<>(); - Set<@NonNull CycleAnalysis<RegionAnalysis>> partitionedCycles = new HashSet<>(); + Set<@NonNull CycleAnalysis<@NonNull RegionAnalysis>> partitionedCycles = new HashSet<>(); for (@NonNull MappingPartitioner mappingPartitioner : mappingPartitioners) { - CycleAnalysis<RegionAnalysis> cycleAnalysis = transformationAnalysis.getCycleAnalysis(mappingPartitioner.getRegionAnalysis()); + CycleRegionAnalysis cycleAnalysis = transformationAnalysis.getCycleAnalysis(mappingPartitioner.getRegionAnalysis()); if (Iterables.isEmpty(mappingPartitioner.getTraceNodes())) { partitions.add(new NonPartition(mappingPartitioner)); } |