Skip to content

Commit 5c0f9b2

Browse files
authored
Merge pull request #495 from turkeylurkey/issue-1963
Pass the generateToSrc option when generating features
2 parents 1de62ee + 2e59317 commit 5c0f9b2

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

src/main/java/io/openliberty/tools/common/plugins/util/DevUtil.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* (C) Copyright IBM Corporation 2019, 2026.
2+
* (C) Copyright IBM Corporation 2019, 2026
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -1942,12 +1942,13 @@ private void addUserId(List<String> commandElements) {
19421942
*
19431943
* @param classes class file paths features should be generated for (can be null if no modified classes)
19441944
* @param optimize if true, generate optimized feature list
1945+
* @param generateToSrc if true, generate feature list into file in src/main/liberty
19451946
* @param useTmpDirOut if true, generate feature file in a hidden directory named in BinaryScannerUtil
19461947
* @param useTmpDirIn if true, the hidden directory named in BinaryScannerUtil will be used as the
19471948
* context or input values to generate features
19481949
* @return true if feature generation was successful
19491950
*/
1950-
public abstract boolean libertyGenerateFeatures(Collection<String> classes, boolean optimize, boolean useTmpDirOut, boolean useTmpDirIn);
1951+
public abstract boolean libertyGenerateFeatures(Collection<String> classes, boolean optimize, boolean generateToSrc, boolean useTmpDirOut, boolean useTmpDirIn);
19511952

19521953
/**
19531954
* Install features in regular dev mode. This method should not be used in container mode.
@@ -2672,13 +2673,11 @@ private void toggleGenerateToSrc() {
26722673
generateToSrc = !generateToSrc;
26732674
logGenerateToSrcStatus();
26742675
initGenerationContext();
2675-
if (!generateToSrc) { // when you toggle off generate to src, delete the generated file in src
2676-
File srcGenFeaturesFile = new File(configDirectory, BinaryScannerUtil.GENERATED_FEATURES_FILE_PATH);
2677-
if (srcGenFeaturesFile.exists()) {
2678-
if (!srcGenFeaturesFile.delete()) {
2679-
debug("Error trying to delete the generated features file:" + srcGenFeaturesFile.getAbsolutePath());
2680-
}
2681-
}
2676+
// When you toggle generateToSrc delete the old file you no longer need
2677+
if (generateToSrc) {
2678+
deleteGenFeaturesFile(generateFeaturesTmpDir); // delete the old gen file in tmpdir
2679+
} else {
2680+
deleteGenFeaturesFile(configDirectory); // delete the old gen file in src/main/liberty/config
26822681
}
26832682
if (generateFeatures) {
26842683
if (generateToSrc) {
@@ -2689,6 +2688,16 @@ private void toggleGenerateToSrc() {
26892688
}
26902689
}
26912690

2691+
private void deleteGenFeaturesFile(File dir) {
2692+
// N.B. processConfigFileChange() will be called upon deletion of generated features file, it should be ignored
2693+
File oldGenFeaturesFile = new File(dir, BinaryScannerUtil.GENERATED_FEATURES_FILE_PATH);
2694+
if (oldGenFeaturesFile.exists()) {
2695+
if (!oldGenFeaturesFile.delete()) {
2696+
debug("Error trying to delete the generated features file:" + oldGenFeaturesFile.getAbsolutePath());
2697+
}
2698+
}
2699+
}
2700+
26922701
private void logGenerateToSrcStatus() {
26932702
info("Setting generation of features in src directory to: " + getFormattedBooleanString(generateToSrc));
26942703
}
@@ -2720,7 +2729,7 @@ private boolean optimizeGenerateFeatures(boolean useTmpDir) {
27202729
private boolean optimizeGenerateFeatures(boolean useTmpDirOut, boolean useTmpDirIn) {
27212730
debug("Generating optimized features list...use temp directory for output=" + useTmpDirOut + " use temp directory for input=" + useTmpDirIn);
27222731
// scan all class files and provide only user specified features
2723-
boolean generatedFeatures = libertyGenerateFeatures(null, true, useTmpDirOut, useTmpDirIn);
2732+
boolean generatedFeatures = libertyGenerateFeatures(null, true, generateToSrc, useTmpDirOut, useTmpDirIn);
27242733
if (generatedFeatures) {
27252734
modifiedClasses.clear();
27262735
failedToGenerateClasses.clear();
@@ -2739,7 +2748,7 @@ private boolean incrementGenerateFeatures(boolean useTmpDir) {
27392748
boolean generatedFeatures = false;
27402749
try {
27412750
Collection<String> classPaths = getClassPaths(modifiedClasses);
2742-
generatedFeatures = libertyGenerateFeatures(classPaths, false, useTmpDir, false);
2751+
generatedFeatures = libertyGenerateFeatures(classPaths, false, generateToSrc, useTmpDir, false);
27432752
if (generatedFeatures) {
27442753
modifiedClasses.clear();
27452754
failedToGenerateClasses.clear();
@@ -4673,8 +4682,11 @@ private void processConfigFileChange(File fileChanged, ChangeType changeType, Th
46734682
// generateFeaturesTmpDir in the process of handling an xml config modicifcation.
46744683
// Deleting that directory could cause generated-features.xml to be deleted and we
46754684
// need to be careful how to handle that event e.g. don't call optimizeGenerateFeatures().
4685+
// Another scenario, when we toggle generateToSrc option we delete the old file and change the
4686+
// value of generateFeaturesFile. Therefore we must only use the base name of generateFeaturesFile
4687+
// in this file name check.
46764688
if (generateFeatures && (fileChanged.getName().endsWith(".xml")
4677-
&& !fileChanged.equals(generateFeaturesFile))
4689+
&& !fileChanged.getName().equals(generateFeaturesFile.getName()))
46784690
&& serverFeaturesModified()) {
46794691
optimizeGenerateFeatures(!generateToSrc);
46804692
}

src/test/java/io/openliberty/tools/common/plugins/util/BaseDevUtilTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ public void libertyInstallFeature() {
197197
}
198198

199199
@Override
200-
public boolean libertyGenerateFeatures(Collection<String> classes, boolean optimize, boolean useTempOut, boolean useTempIn) {
200+
public boolean libertyGenerateFeatures(Collection<String> classes, boolean optimize, boolean generateToSrc, boolean useTempOut, boolean useTempIn) {
201201
// not needed for tests
202202
return true;
203203
}

0 commit comments

Comments
 (0)