Skip to content

Commit 2a62d58

Browse files
jantjejonahgraham
authored andcommitted
Bug 564123 Treat environment and build variable case sensitively
Remove all equalIgnoreCase and equal with uppercasing for environment variables Change-Id: Ic15974b5fb62413c7b1826ced544ff6d4a8eba2f Signed-off-by: jantje <[email protected]>
1 parent 0958263 commit 2a62d58

File tree

30 files changed

+61
-157
lines changed

30 files changed

+61
-157
lines changed

build/org.eclipse.cdt.autotools.core/src/org/eclipse/cdt/internal/autotools/core/AutotoolsEnvironmentVariableSupplier.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
2020
import org.eclipse.cdt.managedbuilder.envvar.IConfigurationEnvironmentVariableSupplier;
2121
import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider;
22-
import org.eclipse.core.runtime.Platform;
2322

2423
/**
2524
* Supplies some default environment variables for the Autotools toolchain. For
@@ -40,10 +39,7 @@ private VerboseEnvironmentVariable(String name, String value, int op, String del
4039
}
4140

4241
private static boolean isVar(String name) {
43-
// Windows has case insensitive env var names
44-
return Platform.getOS().equals(Platform.OS_WIN32)
45-
? name.equalsIgnoreCase(VerboseEnvironmentVariable.VERBOSE_VAR_NAME)
46-
: name.equals(VerboseEnvironmentVariable.VERBOSE_VAR_NAME);
42+
return name.equals(VerboseEnvironmentVariable.VERBOSE_VAR_NAME);
4743
}
4844

4945
private static IBuildEnvironmentVariable create() {

build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChain.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public GCCToolChain(IToolChainProvider provider, Path pathToToolChain, String ar
122122
IEnvironmentVariable pathVar = null;
123123
if (envVars != null) {
124124
for (IEnvironmentVariable envVar : envVars) {
125-
if (envVar.getName().equalsIgnoreCase("PATH")) { //$NON-NLS-1$
125+
if (envVar.getName().equals("PATH")) { //$NON-NLS-1$
126126
pathVar = envVar;
127127
}
128128
}

build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/BuildInfoFactory.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
import org.eclipse.core.runtime.Preferences;
4747
import org.eclipse.core.runtime.Status;
4848
import org.eclipse.core.variables.VariablesPlugin;
49-
import org.eclipse.osgi.service.environment.Constants;
5049

5150
public class BuildInfoFactory {
5251

@@ -115,14 +114,8 @@ public void setBuildAttribute(String name, String value) throws CoreException {
115114
public Map<String, String> getExpandedEnvironment() {
116115
Map<String, String> env = getEnvironment();
117116
HashMap<String, String> envMap = new HashMap<>(env.entrySet().size());
118-
boolean win32 = Platform.getOS().equals(Constants.OS_WIN32);
119117
for (Map.Entry<String, String> entry : env.entrySet()) {
120118
String key = entry.getKey();
121-
if (win32) {
122-
// Win32 vars are case insensitive. Uppercase everything so
123-
// that (for example) "pAtH" will correctly replace "PATH"
124-
key = key.toUpperCase();
125-
}
126119
String value = entry.getValue();
127120
// translate any string substitution variables
128121
String translated = value;

build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTarget.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,9 @@
3333
import org.eclipse.core.runtime.IPath;
3434
import org.eclipse.core.runtime.IProgressMonitor;
3535
import org.eclipse.core.runtime.Path;
36-
import org.eclipse.core.runtime.Platform;
3736
import org.eclipse.core.runtime.PlatformObject;
3837
import org.eclipse.core.runtime.SubMonitor;
3938
import org.eclipse.core.variables.VariablesPlugin;
40-
import org.eclipse.osgi.service.environment.Constants;
4139

4240
public class MakeTarget extends PlatformObject implements IMakeTarget {
4341
private final static int USE_PROJECT_ENV_SETTING = 3;
@@ -245,14 +243,8 @@ public Map<String, String> getExpandedEnvironment() throws CoreException {
245243
}
246244

247245
HashMap<String, String> envMap = new HashMap<>(env.entrySet().size());
248-
boolean win32 = Platform.getOS().equals(Constants.OS_WIN32);
249246
for (Entry<String, String> entry : env.entrySet()) {
250247
String key = entry.getKey();
251-
if (win32) {
252-
// Win32 vars are case insensitive. Uppercase everything so
253-
// that (for example) "pAtH" will correctly replace "PATH"
254-
key = key.toUpperCase();
255-
}
256248
String value = entry.getValue();
257249
// translate any string substitution variables
258250
String translated = value;

build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedBuildEnvironmentTests.java

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414

1515
package org.eclipse.cdt.managedbuilder.core.tests;
1616

17+
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
1718
import org.eclipse.cdt.core.testplugin.ResourceHelper;
1819
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
1920
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
2021
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
21-
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
2222
import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentBuildPathsChangeListener;
2323
import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider;
2424
import org.eclipse.core.resources.IProject;
@@ -85,12 +85,12 @@ public void testEnvCWDPWD() {
8585
doInit();
8686
IConfiguration cfg = mproj.getConfigurations()[0];
8787
// CWD/PWD vars should NOT be overwritten anywhere
88-
IBuildEnvironmentVariable a = envProvider.getVariable(NAME_CWD, cfg, true, false);
88+
IEnvironmentVariable a = envProvider.getVariable(NAME_CWD, cfg, false);
8989
assertNotNull(a);
9090
if (VAL_CWDPWD.equals(a.getValue()))
9191
fail("CWD should not be rewritten !"); //$NON-NLS-1$
9292

93-
a = envProvider.getVariable(NAME_PWD, cfg, true, false);
93+
a = envProvider.getVariable(NAME_PWD, cfg, false);
9494
assertNotNull(a);
9595
if (VAL_CWDPWD.equals(a.getValue()))
9696
fail("PWD should not be rewritten !"); //$NON-NLS-1$
@@ -128,28 +128,20 @@ public void rm_testEnvGetPath() {
128128
public void testEnvGetParams() {
129129
doInit();
130130
IEnvironmentVariableProvider envProvider = ManagedBuildManager.getEnvironmentVariableProvider();
131-
IBuildEnvironmentVariable x = null;
132-
IBuildEnvironmentVariable y = null;
131+
132+
// if "path" and "PATH" exist they should be equal
133+
IEnvironmentVariable x = envProvider.getVariable("PATH", mproj.getConfigurations()[0], false);
134+
IEnvironmentVariable y = envProvider.getVariable("path", mproj.getConfigurations()[0], false);
135+
assertNotNull(x);
136+
if (y != null) {
137+
assertFalse(x.getName().equals(y.getName()));
138+
}
139+
133140
if (System.getProperty("os.name").toLowerCase().startsWith("windows")) { //$NON-NLS-1$ //$NON-NLS-2$
134141
assertEquals(envProvider.getDefaultDelimiter(), DEL_WIN);
135-
assertFalse(envProvider.isVariableCaseSensitive());
136-
// these var instances are different although contents is equal.
137-
x = envProvider.getVariable("PATH", mproj.getConfigurations()[0], true, false);
138-
assertNotNull(x);
139-
y = envProvider.getVariable("path", mproj.getConfigurations()[0], true, false);
140-
assertNotNull(y);
141-
assertEquals(x.getName(), y.getName());
142-
assertEquals(x.getValue(), y.getValue());
143142
} else {
144143
assertEquals(envProvider.getDefaultDelimiter(), DEL_UNIX);
145-
assertTrue(envProvider.isVariableCaseSensitive());
146-
// "path" is different var (may absent);
147-
x = envProvider.getVariable("PATH", mproj.getConfigurations()[0], true, false);
148-
assertNotNull(x);
149-
y = envProvider.getVariable("path", mproj.getConfigurations()[0], true, false);
150-
if (y != null) {
151-
assertFalse(x.getName().equals(y.getName()));
152-
}
144+
153145
}
154146
}
155147

@@ -158,18 +150,17 @@ public void testEnvGetParams() {
158150
*/
159151
public void testEnvProvider() {
160152
doInit();
161-
IBuildEnvironmentVariable a = envProvider.getVariable(TestMacro.PRJ_VAR, mproj.getConfigurations()[0], true,
162-
false);
153+
IEnvironmentVariable a = envProvider.getVariable(TestMacro.PRJ_VAR, mproj.getConfigurations()[0], false);
163154
assertNotNull(a);
164155
assertEquals(TestMacro.PRJ_VAR + mproj.getName(), a.getValue());
165156

166157
IConfiguration[] cfgs = mproj.getConfigurations();
167-
a = envProvider.getVariable(TestMacro.CFG_VAR, cfgs[0], true, false);
158+
a = envProvider.getVariable(TestMacro.CFG_VAR, cfgs[0], false);
168159
assertNotNull(a);
169160
assertEquals(TestMacro.CFG_VAR + cfgs[0].getName(), a.getValue());
170161

171162
// no provider for another configurations
172-
a = envProvider.getVariable(TestMacro.CFG_VAR, cfgs[1], true, false);
163+
a = envProvider.getVariable(TestMacro.CFG_VAR, cfgs[1], false);
173164
assertNull(a);
174165

175166
}

build/org.eclipse.cdt.managedbuilder.core/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: %pluginName
44
Bundle-SymbolicName: org.eclipse.cdt.managedbuilder.core; singleton:=true
5-
Bundle-Version: 8.9.0.qualifier
5+
Bundle-Version: 9.0.0.qualifier
66
Bundle-Activator: org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin
77
Bundle-Vendor: %providerName
88
Bundle-Localization: plugin

build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IBuilder.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ public interface IBuilder extends IHoldsOptions, IMakeBuilderInfo {
4646
public static final String CONVERT_TO_ID = "convertToId"; //$NON-NLS-1$
4747

4848
public static final String VARIABLE_FORMAT = "variableFormat"; //$NON-NLS-1$
49-
public static final String IS_VARIABLE_CASE_SENSITIVE = "isVariableCaseSensitive"; //$NON-NLS-1$
5049
public static final String RESERVED_MACRO_NAMES = "reservedMacroNames"; //$NON-NLS-1$
5150
public static final String RESERVED_MACRO_NAME_SUPPLIER = "reservedMacroNameSupplier"; //$NON-NLS-1$
5251
public static final String IS_SYSTEM = "isSystem"; //$NON-NLS-1$
@@ -273,13 +272,6 @@ public interface IBuilder extends IHoldsOptions, IMakeBuilderInfo {
273272
*/
274273
public String getBuilderVariablePattern();
275274

276-
/**
277-
* Returns whether the builder supports case sensitive variables or not
278-
*
279-
* @return boolean
280-
*/
281-
public boolean isVariableCaseSensitive();
282-
283275
/**
284276
* Returns an array of Strings representing the patterns of the builder/buildfile-generator
285277
* reserved variables

build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/envvar/IEnvironmentVariableProvider.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,6 @@ public IBuildEnvironmentVariable getVariable(String variableName, Object level,
101101
*/
102102
public String getDefaultDelimiter();
103103

104-
/**
105-
* @return true if the OS supports case sensitive variables (Unix-like systems) or false
106-
* if it does not (Win32 systems)
107-
*/
108-
public boolean isVariableCaseSensitive();
109-
110104
/**
111105
* This method is defined to be used basically by the UI classes and should not be used by the
112106
* tool-integrator

build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildDescription.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.Set;
2727
import java.util.Vector;
2828

29+
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
2930
import org.eclipse.cdt.core.settings.model.CSourceEntry;
3031
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
3132
import org.eclipse.cdt.core.settings.model.ICSettingEntry;
@@ -56,7 +57,6 @@
5657
import org.eclipse.cdt.managedbuilder.core.IToolChain;
5758
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
5859
import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
59-
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
6060
import org.eclipse.cdt.managedbuilder.internal.core.Configuration;
6161
import org.eclipse.cdt.managedbuilder.internal.macros.FileContextData;
6262
import org.eclipse.cdt.managedbuilder.internal.macros.OptionContextData;
@@ -1498,11 +1498,11 @@ public Map<String, String> getEnvironment() {
14981498
}
14991499

15001500
protected Map<String, String> calculateEnvironment() {
1501-
IBuildEnvironmentVariable variables[] = ManagedBuildManager.getEnvironmentVariableProvider().getVariables(fCfg,
1502-
true, true);
1501+
IEnvironmentVariable[] variables = ManagedBuildManager.getEnvironmentVariableProvider().getVariables(fCfg,
1502+
true);
15031503
Map<String, String> map = new HashMap<>();
15041504

1505-
for (IBuildEnvironmentVariable var : variables) {
1505+
for (IEnvironmentVariable var : variables) {
15061506
map.put(var.getName(), var.getValue());
15071507
}
15081508
return map;

build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
101101
private String convertToId;
102102
private FileContextBuildMacroValues fileContextBuildMacroValues;
103103
private String builderVariablePattern;
104-
private Boolean isVariableCaseSensitive;
105104
private String[] reservedMacroNames;
106105
private IReservedMacroNameSupplier reservedMacroNameSupplier;
107106
private IConfigurationElement reservedMacroNameSupplierElement;
@@ -315,9 +314,6 @@ public Builder(IToolChain parent, String Id, String name, Builder builder) {
315314

316315
builderVariablePattern = builder.builderVariablePattern;
317316

318-
if (builder.isVariableCaseSensitive != null)
319-
isVariableCaseSensitive = builder.isVariableCaseSensitive;
320-
321317
if (builder.reservedMacroNames != null)
322318
reservedMacroNames = builder.reservedMacroNames.clone();
323319

@@ -473,11 +469,6 @@ protected void loadFromManifest(IManagedConfigElement element) {
473469
// get the 'variableFormat' attribute
474470
builderVariablePattern = SafeStringInterner.safeIntern(element.getAttribute(VARIABLE_FORMAT));
475471

476-
// get the 'isVariableCaseSensitive' attribute
477-
String isCS = element.getAttribute(IS_VARIABLE_CASE_SENSITIVE);
478-
if (isCS != null)
479-
isVariableCaseSensitive = Boolean.parseBoolean(isCS);
480-
481472
// get the reserved macro names
482473
String reservedNames = element.getAttribute(RESERVED_MACRO_NAMES);
483474
if (reservedNames != null)
@@ -1484,16 +1475,6 @@ public String getBuilderVariablePattern() {
14841475
return builderVariablePattern;
14851476
}
14861477

1487-
@Override
1488-
public boolean isVariableCaseSensitive() {
1489-
if (isVariableCaseSensitive == null) {
1490-
if (superClass != null)
1491-
return getSuperClass().isVariableCaseSensitive();
1492-
return true;
1493-
}
1494-
return isVariableCaseSensitive.booleanValue();
1495-
}
1496-
14971478
@Override
14981479
public String[] getReservedMacroNames() {
14991480
if (reservedMacroNames == null && superClass != null)

build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.eclipse.cdt.core.ErrorParserManager;
3232
import org.eclipse.cdt.core.ICommandLauncher;
3333
import org.eclipse.cdt.core.IMarkerGenerator;
34+
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
3435
import org.eclipse.cdt.core.model.ICModelMarker;
3536
import org.eclipse.cdt.core.resources.ACBuilder;
3637
import org.eclipse.cdt.core.resources.IConsole;
@@ -47,7 +48,6 @@
4748
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
4849
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
4950
import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
50-
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
5151
import org.eclipse.cdt.managedbuilder.internal.buildmodel.DescriptionBuilder;
5252
import org.eclipse.cdt.managedbuilder.internal.buildmodel.IBuildModelBuilder;
5353
import org.eclipse.cdt.managedbuilder.internal.buildmodel.ParallelBuilder;
@@ -978,8 +978,8 @@ protected void invokeMake(int buildType, IPath buildDir, IManagedBuildInfo info,
978978
launcher.showCommand(true);
979979

980980
// Set the environmennt
981-
IBuildEnvironmentVariable variables[] = ManagedBuildManager.getEnvironmentVariableProvider()
982-
.getVariables(cfg, true, true);
981+
IEnvironmentVariable[] variables = ManagedBuildManager.getEnvironmentVariableProvider().getVariables(cfg,
982+
true);
983983
String[] envp = null;
984984
ArrayList<String> envList = new ArrayList<>();
985985
if (variables != null) {

build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.List;
2020
import java.util.Map;
2121

22+
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
2223
import org.eclipse.cdt.core.model.CModelException;
2324
import org.eclipse.cdt.core.model.CoreModel;
2425
import org.eclipse.cdt.core.model.ICProject;
@@ -50,7 +51,6 @@
5051
import org.eclipse.cdt.managedbuilder.core.IToolChain;
5152
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
5253
import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
53-
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
5454
import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider;
5555
import org.eclipse.cdt.managedbuilder.internal.macros.OptionContextData;
5656
import org.eclipse.cdt.managedbuilder.internal.scannerconfig.ManagedBuildCPathEntryContainer;
@@ -993,8 +993,8 @@ public List<ITarget> getTargets() {
993993

994994
private String getCWD() {
995995
String cwd = ""; //$NON-NLS-1$
996-
IBuildEnvironmentVariable cwdvar = ManagedBuildManager.getEnvironmentVariableProvider().getVariable("CWD", //$NON-NLS-1$
997-
getDefaultConfiguration(), false, true);
996+
IEnvironmentVariable cwdvar = ManagedBuildManager.getEnvironmentVariableProvider().getVariable("CWD", //$NON-NLS-1$
997+
getDefaultConfiguration(), true);
998998
if (cwdvar != null) {
999999
cwd = cwdvar.getValue().replace('\\', '/');
10001000
}

build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/envvar/EnvironmentVariableProvider.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,6 @@ public String getDefaultDelimiter() {
179179
return fMngr.getDefaultDelimiter();
180180
}
181181

182-
@Override
183-
public boolean isVariableCaseSensitive() {
184-
return fMngr.isVariableCaseSensitive();
185-
}
186-
187182
@Override
188183
public IEnvironmentVariableSupplier[] getSuppliers(Object level) {
189184
return null;

build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/envvar/StoredBuildPathEnvironmentContainer.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
2424
import org.eclipse.cdt.managedbuilder.core.IEnvVarBuildPath;
2525
import org.eclipse.cdt.managedbuilder.core.ITool;
26-
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
2726
import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
2827
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
2928
import org.eclipse.cdt.utils.envvar.StorableEnvironment;
@@ -49,8 +48,6 @@ public class StoredBuildPathEnvironmentContainer extends StorableEnvironmentLoad
4948
private IConfiguration fConfiguration;
5049
private StorableEnvironment fEnvironment;
5150
private int fPathType;
52-
private boolean fIsVariableCaseSensitive = ManagedBuildManager.getEnvironmentVariableProvider()
53-
.isVariableCaseSensitive();
5451

5552
public StoredBuildPathEnvironmentContainer(int pathType) {
5653
fPathType = pathType == IEnvVarBuildPath.BUILDPATH_LIBRARY ? IEnvVarBuildPath.BUILDPATH_LIBRARY
@@ -190,7 +187,7 @@ private void checkLoadedVarNames(StorableEnvironment env, Object context) {
190187
* returns true if the variable names are equal and false otherwise
191188
*/
192189
private boolean varNamesEqual(String name1, String name2) {
193-
return fIsVariableCaseSensitive ? name1.equals(name2) : name1.equalsIgnoreCase(name2);
190+
return name1.equals(name2);
194191
}
195192

196193
/* (non-Javadoc)

0 commit comments

Comments
 (0)