Skip to content

Commit ef85173

Browse files
committed
shell - storing parsed representation of module descriptor (with no variables/files interpolations).
This parsed module descriptor will be used when writing module descriptor (particularly during 'deps add'), in order to change as few stuff as possible.
1 parent 07876e3 commit ef85173

File tree

4 files changed

+53
-15
lines changed

4 files changed

+53
-15
lines changed

restx-build/src/main/java/restx/build/MavenSupport.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public ModuleDescriptor parse(InputStream stream) throws IOException {
6969
}
7070

7171
return new ModuleDescriptor(parent, gav, packaging,
72-
properties, Collections.<String>emptyList(), new HashMap<String,List<ModuleFragment>>(), dependencies);
72+
properties, Collections.<String>emptyList(), new HashMap<String,List<ModuleFragment>>(), dependencies, null);
7373
}
7474

7575
private GAV getGav(JSONObject jsonObject, String typeKey, GAV parentGAV) {
@@ -117,7 +117,7 @@ public void generate(ModuleDescriptor md, Writer w) throws IOException {
117117

118118
w.write(" <dependencies>\n");
119119
for (String scope : md.getDependencyScopes()) {
120-
for (ModuleDependency dependency : md.getDependencies(scope)) {
120+
for (ModuleDependency dependency : md.getParsedModuleDescriptor().getDependencies(scope)) {
121121
w.write(" <dependency>\n");
122122
toMavenGAV(dependency.getGav(), " ", w);
123123
if (!"compile".equals(scope)) {
@@ -160,7 +160,7 @@ public void generate(ModuleDescriptor md, Writer w) throws IOException {
160160

161161
private boolean isVersionPropertyUsed(ModuleDescriptor md, String property) {
162162
for (String scope : md.getDependencyScopes()) {
163-
for (ModuleDependency dependency : md.getDependencies(scope)) {
163+
for (ModuleDependency dependency : md.getParsedModuleDescriptor().getDependencies(scope)) {
164164
if (dependency.getGav().getVersion().indexOf("${" + property + "}") != -1) {
165165
return true;
166166
}

restx-build/src/main/java/restx/build/ModuleDescriptor.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,22 @@ public class ModuleDescriptor {
1515
private final List<String> propertiesFileReferences;
1616
private final Map<String, List<ModuleFragment>> fragments;
1717
private final Map<String, List<ModuleDependency>> dependencies;
18+
private final ModuleDescriptor parsedModuleDescriptor;
1819

1920
public ModuleDescriptor(GAV parent, GAV gav, String packaging,
2021
Map<String, String> properties,
2122
List<String> propertiesFileReferences,
2223
Map<String, List<ModuleFragment>> fragments,
23-
Map<String, List<ModuleDependency>> dependencies) {
24+
Map<String, List<ModuleDependency>> dependencies,
25+
ModuleDescriptor parsedModuleDescriptor) {
2426
this.parent = parent;
2527
this.gav = gav;
2628
this.packaging = packaging;
2729
this.propertiesFileReferences = propertiesFileReferences;
2830
this.fragments = Collections.unmodifiableMap(fragments);
2931
this.properties = Collections.unmodifiableMap(properties);
3032
this.dependencies = Collections.unmodifiableMap(dependencies);
33+
this.parsedModuleDescriptor = parsedModuleDescriptor;
3134
}
3235

3336
public GAV getParent() {
@@ -72,7 +75,7 @@ public ModuleDescriptor concatDependency(String scope, ModuleDependency dep) {
7275
}
7376
newDeps.get(scope).add(dep);
7477

75-
return new ModuleDescriptor(parent, gav, packaging, properties, propertiesFileReferences, fragments, newDeps);
78+
return new ModuleDescriptor(parent, gav, packaging, properties, propertiesFileReferences, fragments, newDeps, parsedModuleDescriptor);
7679
}
7780

7881
public boolean hasClassifier() {
@@ -86,6 +89,10 @@ public boolean hasClassifier() {
8689
return false;
8790
}
8891

92+
public ModuleDescriptor getParsedModuleDescriptor() {
93+
return parsedModuleDescriptor==null?this:parsedModuleDescriptor;
94+
}
95+
8996
public List<String> getPropertiesFileReferences() {
9097
return propertiesFileReferences;
9198
}

restx-build/src/main/java/restx/build/RestxJsonSupport.java

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -117,23 +117,24 @@ private ModuleDescriptor parse(Path path, InputStream inputStream) throws IOExce
117117
List<String> propertiesFileReferences = new ArrayList<>();
118118
if (jsonObject.has("properties")) {
119119
propertiesJSONObj = jsonObject.getJSONObject("properties");
120-
loadJsonProperties(path == null ? null : path.getParent(), properties, propertiesJSONObj);
121120
for(Object p: propertiesJSONObj.keySet()) {
122121
String key = p.toString();
123122
if("@files".equals(key)) {
124123
JSONArray propertyFiles = propertiesJSONObj.getJSONArray(key);
125124
for (int i = 0; i < propertyFiles.length(); i++) {
126125
propertiesFileReferences.add(propertyFiles.getString(i));
127126
}
127+
} else {
128+
properties.put(key, propertiesJSONObj.getString(key));
128129
}
129130
}
130131
}
131132

132133
GAV parent = null;
133134
if (jsonObject.has("parent")) {
134-
parent = GAV.parse(expandProperties(properties, jsonObject.getString("parent")));
135+
parent = GAV.parse(jsonObject.getString("parent"));
135136
}
136-
GAV gav = GAV.parse(expandProperties(properties, jsonObject.getString("module")));
137+
GAV gav = GAV.parse(jsonObject.getString("module"));
137138

138139
String packaging = jsonObject.has("packaging") ? jsonObject.getString("packaging") : "jar";
139140

@@ -161,15 +162,45 @@ private ModuleDescriptor parse(Path path, InputStream inputStream) throws IOExce
161162

162163
JSONArray array = jsonFragments.getJSONArray(type);
163164
for (int i = 0; i < array.length(); i++) {
164-
String url = expandProperties(properties, array.getString(i));
165+
String url = array.getString(i);
165166
fragmentsForType.add(new ModuleFragment(url));
166167
}
167168

168169
fragments.put(type, fragmentsForType);
169170
}
170171
}
171172

172-
return new ModuleDescriptor(parent, gav, packaging, properties, fragments, dependencies);
173+
ModuleDescriptor parsedModuleDescriptor = new ModuleDescriptor(parent, gav, packaging, properties, propertiesFileReferences, fragments, dependencies, null);
174+
175+
// Interpolating stuff in parsed module descriptor ...
176+
177+
Map<String, String> interpolatedProperties = new LinkedHashMap<>();
178+
if(propertiesJSONObj != null) {
179+
loadJsonProperties(path == null ? null : path.getParent(), interpolatedProperties, propertiesJSONObj);
180+
}
181+
182+
GAV interpolatedParent = parent==null?null:GAV.parse(expandProperties(interpolatedProperties, parent.toParseableString()));
183+
GAV interpolatedGAV = GAV.parse(expandProperties(interpolatedProperties, gav.toParseableString()));
184+
185+
Map<String, List<ModuleDependency>> interpolatedDependencies = new LinkedHashMap<>();
186+
for(Map.Entry<String,List<ModuleDependency>> scopedDependenciesEntry: dependencies.entrySet()) {
187+
List<ModuleDependency> scopedDependencies = new ArrayList<>();
188+
for(ModuleDependency dep: scopedDependenciesEntry.getValue()) {
189+
scopedDependencies.add(new ModuleDependency(GAV.parse(expandProperties(interpolatedProperties, dep.getGav().toParseableString()))));
190+
}
191+
interpolatedDependencies.put(scopedDependenciesEntry.getKey(), scopedDependencies);
192+
}
193+
194+
Map<String, List<ModuleFragment>> interpolatedFragmentsPerModuleType = new LinkedHashMap<>();
195+
for(Map.Entry<String,List<ModuleFragment>> perModuleTypeFragment: fragments.entrySet()) {
196+
List<ModuleFragment> interpolatedFragments = new ArrayList<>();
197+
for(ModuleFragment fragment: perModuleTypeFragment.getValue()) {
198+
interpolatedFragments.add(new ModuleFragment(expandProperties(interpolatedProperties, fragment.getUrl())));
199+
}
200+
interpolatedFragmentsPerModuleType.put(perModuleTypeFragment.getKey(), interpolatedFragments);
201+
}
202+
203+
return new ModuleDescriptor(interpolatedParent, interpolatedGAV, packaging, interpolatedProperties, propertiesFileReferences, interpolatedFragmentsPerModuleType, interpolatedDependencies, parsedModuleDescriptor);
173204
}
174205

175206
private void loadJsonProperties(Path path, Map<String, String> properties, JSONObject props) throws IOException {
@@ -186,10 +217,10 @@ private void loadJsonProperties(Path path, Map<String, String> properties, JSONO
186217
throw new IllegalArgumentException(
187218
"can't resolve property file " + propertyFilePath.toAbsolutePath() + "." +
188219
" Not found." +
189-
(path == null ?
190-
" Note that parsing from mere inputstream resolve files " +
191-
"relative to current directory." :
192-
""));
220+
(path == null ?
221+
" Note that parsing from mere inputstream resolve files " +
222+
"relative to current directory." :
223+
""));
193224
}
194225

195226
try (InputStreamReader reader = new InputStreamReader(Files.newInputStream(propertyFilePath))) {

restx-core-shell/src/main/java/restx/core/shell/DepsShellCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ public void run(RestxShell shell) throws Exception {
239239

240240
ModuleDescriptor descriptor;
241241
try (FileInputStream is = new FileInputStream(mdFile)) {
242-
descriptor = new RestxJsonSupport().parse(is);
242+
descriptor = new RestxJsonSupport().parse(is).getParsedModuleDescriptor();
243243

244244
for (String s : pluginIds.get()) {
245245
descriptor = descriptor.concatDependency(scope, new ModuleDependency(GAV.parse(s)));

0 commit comments

Comments
 (0)