Skip to content

Commit 0512250

Browse files
committed
InAndOut: remove sub dp instances when deleting InAndOut configuration
For example, statistics, call stack analysis are removed fixes #178 Signed-off-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
1 parent e3a293e commit 0512250

File tree

3 files changed

+90
-2
lines changed

3 files changed

+90
-2
lines changed

analyses/org.eclipse.tracecompass.incubator.inandout.core.tests/.settings/org.eclipse.jdt.core.prefs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
eclipse.preferences.version=1
2+
org.eclipse.jdt.core.builder.annotationPath.allLocations=disabled
23
org.eclipse.jdt.core.codeComplete.argumentPrefixes=
34
org.eclipse.jdt.core.codeComplete.argumentSuffixes=
45
org.eclipse.jdt.core.codeComplete.fieldPrefixes=f
@@ -12,9 +13,15 @@ org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
1213
org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=enabled
1314
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
1415
org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
16+
org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
1517
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
18+
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
19+
org.eclipse.jdt.core.compiler.annotation.notowning=org.eclipse.jdt.annotation.NotOwning
1620
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
21+
org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
1722
org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled
23+
org.eclipse.jdt.core.compiler.annotation.owning=org.eclipse.jdt.annotation.Owning
24+
org.eclipse.jdt.core.compiler.annotation.resourceanalysis=disabled
1825
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
1926
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
2027
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
@@ -24,6 +31,8 @@ org.eclipse.jdt.core.compiler.debug.lineNumber=generate
2431
org.eclipse.jdt.core.compiler.debug.localVariable=generate
2532
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
2633
org.eclipse.jdt.core.compiler.doc.comment.support=enabled
34+
org.eclipse.jdt.core.compiler.problem.APILeak=warning
35+
org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info
2736
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=error
2837
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
2938
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -45,8 +54,10 @@ org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
4554
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
4655
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
4756
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
57+
org.eclipse.jdt.core.compiler.problem.incompatibleOwningContract=warning
4858
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error
4959
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
60+
org.eclipse.jdt.core.compiler.problem.insufficientResourceAnalysis=warning
5061
org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
5162
org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
5263
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
@@ -74,12 +85,14 @@ org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
7485
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
7586
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
7687
org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
88+
org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
7789
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning
7890
org.eclipse.jdt.core.compiler.problem.nullReference=error
7991
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
8092
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
8193
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
8294
org.eclipse.jdt.core.compiler.problem.parameterAssignment=error
95+
org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
8396
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
8497
org.eclipse.jdt.core.compiler.problem.potentialNullReference=error
8598
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
@@ -94,24 +107,31 @@ org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
94107
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
95108
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
96109
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
110+
org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
97111
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled
98112
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
113+
org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
99114
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
100115
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
101-
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=error
116+
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
102117
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=error
103118
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
104119
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=error
120+
org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
121+
org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
122+
org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
105123
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=error
106124
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
107125
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
126+
org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
108127
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
109128
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled
110129
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled
111130
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
112131
org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
113132
org.eclipse.jdt.core.compiler.problem.unusedImport=error
114133
org.eclipse.jdt.core.compiler.problem.unusedLabel=error
134+
org.eclipse.jdt.core.compiler.problem.unusedLambdaParameter=warning
115135
org.eclipse.jdt.core.compiler.problem.unusedLocal=error
116136
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
117137
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore

analyses/org.eclipse.tracecompass.incubator.inandout.core.tests/src/org/eclipse/tracecompass/incubator/inandout/core/tests/analysis/InAndOutDataProviderFactoryTest.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@
2424

2525
import org.eclipse.tracecompass.incubator.internal.inandout.core.analysis.InAndOutDataProviderFactory;
2626
import org.eclipse.tracecompass.incubator.internal.inandout.core.analysis.SegmentSpecifierConfiguration;
27+
import org.eclipse.tracecompass.tmf.core.component.DataProviderConstants;
2728
import org.eclipse.tracecompass.tmf.core.config.ITmfConfiguration;
2829
import org.eclipse.tracecompass.tmf.core.config.ITmfConfigurationSourceType;
2930
import org.eclipse.tracecompass.tmf.core.config.ITmfDataProviderConfigurator;
3031
import org.eclipse.tracecompass.tmf.core.config.TmfConfiguration;
32+
import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderManager;
3133
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor;
3234
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor.ProviderType;
3335
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderFactory;
@@ -36,9 +38,11 @@
3638
import org.eclipse.tracecompass.tmf.core.model.DataProviderDescriptor;
3739
import org.eclipse.tracecompass.tmf.core.model.tree.ITmfTreeDataProvider;
3840
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
41+
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal;
3942
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
4043
import org.eclipse.tracecompass.tmf.core.tests.TmfCoreTestPlugin;
4144
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
45+
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
4246
import org.eclipse.tracecompass.tmf.tests.stubs.trace.xml.TmfXmlTraceStub;
4347
import org.eclipse.tracecompass.tmf.tests.stubs.trace.xml.TmfXmlTraceStubNs;
4448
import org.junit.AfterClass;
@@ -83,7 +87,9 @@ public class InAndOutDataProviderFactoryTest {
8387
@BeforeClass
8488
public static void setup() {
8589
TmfXmlTraceStub trace = TmfXmlTraceStubNs.setupTrace(TmfCoreTestPlugin.getAbsoluteFilePath(XML_TRACE));
86-
trace.traceOpened(new TmfTraceOpenedSignal(trace, trace, null));
90+
TmfTraceOpenedSignal signal = new TmfTraceOpenedSignal(trace, trace, null);
91+
TmfTraceManager.getInstance().traceOpened(signal);
92+
trace.traceOpened(signal);
8793
sfTestTrace = trace;
8894

8995
Map<String, Object> params = new HashMap<>();
@@ -111,6 +117,8 @@ public static void setup() {
111117
@AfterClass
112118
public static void cleanup() {
113119
if (sfTestTrace != null) {
120+
TmfTraceClosedSignal signal = new TmfTraceClosedSignal(sfTestTrace, sfTestTrace);
121+
TmfTraceManager.getInstance().traceClosed(signal);
114122
sfTestTrace.dispose();
115123
}
116124
if (sfFixture != null) {
@@ -157,6 +165,7 @@ public void testGetConfigurationSourceTypes() {
157165
* @throws TmfConfigurationException
158166
* if a config error happens
159167
*/
168+
@SuppressWarnings("unchecked")
160169
@Test
161170
public void testCreateAndDeleteDataProviderDescriptor() throws TmfConfigurationException {
162171
ITmfDataProviderConfigurator configurator = sfFixture.getAdapter(ITmfDataProviderConfigurator.class);
@@ -179,9 +188,16 @@ public void testCreateAndDeleteDataProviderDescriptor() throws TmfConfigurationE
179188
Collection<IDataProviderDescriptor> descriptors = sfFixture.getDescriptors(sfTestTrace);
180189
assertTrue(descriptors.contains(descriptor));
181190

191+
String dpId = "org.eclipse.tracecompass.analysis.profiling.core.flamechart:org.eclipse.tracecompass.incubator.inandout.analysis" + DataProviderConstants.CONFIG_SEPARATOR + config.getId();
192+
ITmfTreeDataProvider<?> dp = DataProviderManager.getInstance().getOrCreateDataProvider(
193+
sfTestTrace,
194+
dpId,
195+
ITmfTreeDataProvider.class);
196+
assertNotNull(dp);
182197
configurator.removeDataProviderDescriptor(sfTestTrace, descriptor);
183198
descriptors = sfFixture.getDescriptors(sfTestTrace);
184199
assertFalse(descriptors.contains(descriptor));
200+
assertNull(DataProviderManager.getInstance().getExistingDataProvider(sfTestTrace, dpId, ITmfTreeDataProvider.class));
185201
}
186202

187203
/**

analyses/org.eclipse.tracecompass.incubator.inandout.core/src/org/eclipse/tracecompass/incubator/internal/inandout/core/analysis/InAndOutDataProviderFactory.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
import java.util.ArrayList;
1919
import java.util.Collection;
2020
import java.util.List;
21+
import java.util.function.Function;
22+
import java.util.function.Predicate;
23+
import java.util.stream.Collectors;
2124

2225
import org.eclipse.core.runtime.FileLocator;
2326
import org.eclipse.core.runtime.IPath;
@@ -34,6 +37,7 @@
3437
import org.eclipse.tracecompass.tmf.core.config.ITmfDataProviderConfigurator;
3538
import org.eclipse.tracecompass.tmf.core.config.TmfConfiguration;
3639
import org.eclipse.tracecompass.tmf.core.config.TmfConfigurationSourceType;
40+
import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderManager;
3741
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor;
3842
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderDescriptor.ProviderType;
3943
import org.eclipse.tracecompass.tmf.core.dataprovider.IDataProviderFactory;
@@ -76,6 +80,9 @@ public class InAndOutDataProviderFactory implements IDataProviderFactory, ITmfDa
7680

7781
private Table<String, ITmfTrace, ITmfConfiguration> fTmfConfigurationTable = HashBasedTable.create();
7882

83+
// InAndOut analysis will spawn a couple of data providers (e.g. flame chart)
84+
private @Nullable List<String> fDataProviderPrefixes = null;
85+
7986
static {
8087
Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
8188
IPath defaultPath = new Path(SegmentSpecifierConfiguration.IN_AND_OUT_CONFIG_SOURCE_SCHEMA);
@@ -162,6 +169,7 @@ public Collection<IDataProviderDescriptor> getDescriptors(ITmfTrace trace) {
162169
throw new TmfConfigurationException("Configuration already exists with label: " + config.getName()); //$NON-NLS-1$
163170
}
164171
fTmfConfigurationTable.put(config.getId(), trace, config);
172+
165173
return getDescriptorFromConfig(config);
166174
}
167175

@@ -245,17 +253,61 @@ private void applyConfiguration(ITmfTrace trace, ITmfConfiguration config, boole
245253
}
246254
// Apply configuration to any trace (no need to check trace type here)
247255
InAndOutAnalysisModule.create(config, trace, writeConfig);
256+
257+
// Save ID prefixes of children data providers
258+
saveChildrenDescriptorPrefixes(trace);
248259
}
249260

250261
private void removeConfiguration(ITmfTrace trace, ITmfConfiguration config) throws TmfConfigurationException {
251262
if (trace instanceof TmfExperiment) {
263+
// Remove analysis modules in removeConfiguration per trace
252264
for (ITmfTrace tr : TmfTraceManager.getTraceSet(trace)) {
253265
removeConfiguration(tr, config);
254266
}
267+
268+
// This will remove any dp instance (e.g. call stack dp)
269+
removeChildrenDataProviders(trace, config);
270+
255271
// only remove for traces in experiment
256272
return;
257273
}
274+
// This will remove the analysis module
258275
InAndOutAnalysisModule.remove(config, trace);
276+
277+
// This will remove any dp instance (e.g. call stack dp)
278+
removeChildrenDataProviders(trace, config);
279+
}
280+
281+
private void saveChildrenDescriptorPrefixes(ITmfTrace trace) {
282+
if (fDataProviderPrefixes == null) {
283+
Predicate<IDataProviderDescriptor> predicate = desc -> {
284+
ITmfConfiguration cfg = desc.getConfiguration();
285+
return (cfg != null && cfg.getSourceTypeId().equals(SegmentSpecifierConfiguration.IN_AND_OUT_CONFIG_SOURCE_TYPE_ID));
286+
};
287+
Function<IDataProviderDescriptor, String> mapper = desc -> {
288+
String id = desc.getId();
289+
int index = id.indexOf(DataProviderConstants.CONFIG_SEPARATOR);
290+
if (index > 0 && index < id.length()) {
291+
return id.substring(0, index);
292+
}
293+
return ""; //$NON-NLS-1$
294+
};
295+
fDataProviderPrefixes = DataProviderManager.getInstance().getAvailableProviders(trace)
296+
.stream()
297+
.filter(predicate)
298+
.map(mapper)
299+
.collect(Collectors.toList());
300+
}
301+
}
302+
303+
private void removeChildrenDataProviders(ITmfTrace trace, ITmfConfiguration config) {
304+
List<String> dpPrefixes = fDataProviderPrefixes;
305+
if (dpPrefixes != null) {
306+
for (String dpPrefix: dpPrefixes) {
307+
DataProviderManager.getInstance().removeDataProvider(trace,
308+
dpPrefix + DataProviderConstants.CONFIG_SEPARATOR + config.getId());
309+
}
310+
}
259311
}
260312

261313
@SuppressWarnings("null")

0 commit comments

Comments
 (0)