Skip to content

Commit 6d09414

Browse files
authored
Merge branch 'master' into shadowed_vars
2 parents f89104a + bc30b44 commit 6d09414

File tree

68 files changed

+479
-117
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+479
-117
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ Currently the versioning policy of this project follows [Semantic Versioning v2.
3535
- Fix SARIF report's message property in Exception to meet the standard ([#3197](https://github.com/spotbugs/spotbugs/issues/3197))
3636
- Fixed `FI_FINALIZER_NULLS_FIELDS` FPs for functions called finalize() but not with the correct signature. ([#3207](https://github.com/spotbugs/spotbugs/issues/3207))
3737
- Fixed an error in the detection of bridge methods causing analysis crashes ([#3208](https://github.com/spotbugs/spotbugs/issues/3208))
38+
- Fixed detector `ThrowingExceptions` by removing false positive reports, such as synthetic methods (lambdas), methods which inherited their exception specifications and methods which call throwing methods ([#2040](https://github.com/spotbugs/spotbugs/issues/2040))
3839

3940
### Cleanup
4041
- Cleanup thread issue and regex issue in test-harness ([#3130](https://github.com/spotbugs/spotbugs/issues/3130))
@@ -44,8 +45,9 @@ Currently the versioning policy of this project follows [Semantic Versioning v2.
4445
- Restrict the constructor of abstract classes visibility to protected ([#3178](https://github.com/spotbugs/spotbugs/pull/3178))
4546
- Cleanup double initialization and fix comments referring to findbugs instead of spotbugs([#3134](https://github.com/spotbugs/spotbugs/issues/3134))
4647
- Use diamond operator in constructor calls of Collections ([#3176](https://github.com/spotbugs/spotbugs/pull/3176))
47-
- Use `Collection.isEmpty()` to test for emptiness ([#3180](https://github.com/spotbugs/spotbugs/pull/3180))
48+
- Use `Collection.isEmpty()` or `String.isEmpty()` to test for emptiness ([#3180](https://github.com/spotbugs/spotbugs/pull/3180), [#3219](https://github.com/spotbugs/spotbugs/pull/3219))
4849
- Use method references instead of lambdas where possible ([#3179](https://github.com/spotbugs/spotbugs/pull/3179))
50+
- Move default clauses to the end of switches ([#3222](https://github.com/spotbugs/spotbugs/pull/3222))
4951
- Rename shadowing fields ([#3221](https://github.com/spotbugs/spotbugs/pull/3221))
5052

5153
### Changed

eclipsePlugin/src/de/tobject/findbugs/DetectorsExtensionHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ private static String resolvePluginClassesDir(String bundleName, File sourceDir)
161161
}
162162

163163
String outputDir = getBuildDirectory(bundleName, sourceDir);
164-
if (outputDir.length() == 0) {
164+
if (outputDir.isEmpty()) {
165165
FindbugsPlugin.getDefault().logException(new IllegalStateException("No output directory in build.properties"),
166166
"No output directory in build.properties " + sourceDir);
167167
return null;

eclipsePlugin/src/de/tobject/findbugs/actions/LoadXmlAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ private FileDialog createFileDialog(IProject project) {
8888
FileDialog fileDialog = new FileDialog(FindbugsPlugin.getShell(), SWT.APPLICATION_MODAL | SWT.OPEN);
8989
fileDialog.setText("Select bug result xml for project: " + project.getName());
9090
String initialFileName = getDialogSettings().get(LOAD_XML_PATH_KEY);
91-
if (initialFileName != null && initialFileName.length() > 0) {
91+
if (initialFileName != null && !initialFileName.isEmpty()) {
9292
File initialFile = new File(initialFileName);
9393
// have to check if exists, otherwise crazy GTK will ignore preset
9494
// filter

eclipsePlugin/src/de/tobject/findbugs/actions/SaveXmlAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ private FileDialog createFileDialog(IProject project) {
8989
FileDialog fileDialog = new FileDialog(FindbugsPlugin.getShell(), SWT.APPLICATION_MODAL | SWT.SAVE);
9090
fileDialog.setText("Select bug result xml for project: " + project.getName());
9191
String initialFileName = getDialogSettings().get(SAVE_XML_PATH_KEY);
92-
if (initialFileName != null && initialFileName.length() > 0) {
92+
if (initialFileName != null && !initialFileName.isEmpty()) {
9393
File initialFile = new File(initialFileName);
9494
// have to check if exists, otherwise crazy GTK will ignore preset
9595
// filter

eclipsePlugin/src/de/tobject/findbugs/preferences/FindBugsConstants.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,14 @@ public static String encodeIds(Set<String> ids) {
129129

130130
public static Set<String> decodeIds(String text) {
131131
Set<String> sortedIds = new TreeSet<>();
132-
if (text == null || text.trim().length() == 0) {
132+
if (text == null || text.trim().isEmpty()) {
133133
return sortedIds;
134134
}
135135

136136
String[] strings = text.split(IDS_PATTERN);
137137
for (String string : strings) {
138138
string = string.trim();
139-
if (string.length() > 0) {
139+
if (!string.isEmpty()) {
140140
sortedIds.add(string);
141141
}
142142
}

eclipsePlugin/src/de/tobject/findbugs/properties/DetectorConfigurationTab.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,13 +414,13 @@ private static String getPluginDescription(Plugin plugin) {
414414
StringBuilder sb = new StringBuilder();
415415
sb.append("\n\nPlugin: ").append(plugin.getPluginId());
416416
String version = plugin.getVersion();
417-
if (version.length() > 0) {
417+
if (!version.isEmpty()) {
418418
sb.append("\nVersion: ").append(version);
419419
}
420420

421421
sb.append("\nProvider: ").append(plugin.getProvider());
422422
String website = plugin.getWebsite();
423-
if (website != null && website.length() > 0) {
423+
if (website != null && !website.isEmpty()) {
424424
sb.append(" (").append(website).append(")");
425425
}
426426
return sb.toString();

eclipsePlugin/src/de/tobject/findbugs/reporter/MarkerSeverity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ private MarkerSeverity(int severity) {
4040
* returns {@link #Warning} severity.
4141
*/
4242
public static MarkerSeverity get(String markerSeverity) {
43-
if (markerSeverity == null || markerSeverity.length() == 0) {
43+
if (markerSeverity == null || markerSeverity.isEmpty()) {
4444
return Warning;
4545
}
4646
try {

eclipsePlugin/src/de/tobject/findbugs/reporter/MarkerUtil.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ private static void reportNoResourceFound(BugInstance bug) {
287287
Matcher m = fullName.matcher(qualifiedClassName);
288288
IType type;
289289
String innerName = null;
290-
if (m.matches() && m.group(2).length() > 0) {
290+
if (m.matches() && !m.group(2).isEmpty()) {
291291

292292
String outerQualifiedClassName = m.group(1).replace('$', '.');
293293
innerName = m.group(2).substring(1);
@@ -396,7 +396,7 @@ private static void completeInnerClassInfo(String qualifiedClassName, String inn
396396
int lineNbr = findChildSourceLine(type, innerName, bug);
397397
if (lineNbr > 0) {
398398
String sourceFileStr = getSourceFileHint(type, qualifiedClassName);
399-
if (sourceFileStr != null && sourceFileStr.length() > 0) {
399+
if (sourceFileStr != null && !sourceFileStr.isEmpty()) {
400400
bug.addSourceLine(new SourceLineAnnotation(qualifiedClassName, sourceFileStr, lineNbr, lineNbr, 0, 0));
401401
if (Reporter.DEBUG) {
402402
System.out.println("1. Fixed start line to: " + lineNbr + " on " + qualifiedClassName + "$" + innerName);

eclipsePlugin/src/de/tobject/findbugs/util/ConfigurableXmlOutputStream.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ private void emitTag(String tagName, boolean close) throws IOException {
176176
private void emitTag(String tagName, String attributes, boolean close) throws IOException {
177177
startTag(tagName);
178178
attributes = attributes.trim();
179-
if (attributes.length() > 0) {
179+
if (!attributes.isEmpty()) {
180180
out.write(" ");
181181
out.write(attributes);
182182
}

eclipsePlugin/src/de/tobject/findbugs/view/PropPageTitleProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ String getTitle(IPackageFragment pack) {
122122
}
123123
StringBuilder sb = new StringBuilder("Package: ");
124124
String name = pack.getElementName();
125-
if (name == null || name.length() == 0) {
125+
if (name == null || name.isEmpty()) {
126126
sb.append("default package");
127127
} else {
128128
sb.append(name);

eclipsePlugin/src/de/tobject/findbugs/view/explorer/BugContentProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ private synchronized <Identifier> Object[] createGroups(BugGroup parent, MarkerM
364364
Identifier id = mapper.getIdentifier(marker);
365365
if (id == null) {
366366
String pluginId = MarkerUtil.getPluginId(marker);
367-
if (pluginId.length() == 0 || disabledPlugins.contains(pluginId)) {
367+
if (pluginId.isEmpty() || disabledPlugins.contains(pluginId)) {
368368
// do not report errors for disabled plugins
369369
continue;
370370
}
@@ -456,7 +456,7 @@ public void restoreState(IMemento memento) {
456456
protected void initWorkingSet(String workingSetName) {
457457
IWorkingSet workingSet = null;
458458

459-
if (workingSetName != null && workingSetName.length() > 0) {
459+
if (workingSetName != null && !workingSetName.isEmpty()) {
460460
IWorkingSetManager workingSetManager = PlatformUI.getWorkbench().getWorkingSetManager();
461461
workingSet = workingSetManager.getWorkingSet(workingSetName);
462462
} /*

eclipsePlugin/src/de/tobject/findbugs/view/explorer/FilterBugsDialog.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ protected void clearText() {
201201

202202
public boolean isFiltering() {
203203
String filterString = getFilterString();
204-
return filterString != null && filterString.length() > 0 && !filterString.equals(getInitialText());
204+
return filterString != null && !filterString.isEmpty() && !filterString.equals(getInitialText());
205205
}
206206
}
207207

@@ -335,11 +335,9 @@ public int compare(Plugin f1, Plugin f2) {
335335
public boolean close() {
336336
String text = selectedIds.getText();
337337
String computed = getSelectedIds();
338-
if (text.length() > 0 && !computed.equals(text)) {
339-
// allow to specify filters using text area (no validation checks
340-
// yet)
341-
// TODO validate text entered by user and throw away
342-
// invalid/duplicated entries
338+
if (!text.isEmpty() && !computed.equals(text)) {
339+
// allow to specify filters using text area (no validation checks yet)
340+
// TODO validate text entered by user and throw away invalid/duplicated entries
343341
selectedAsText = text;
344342
} else {
345343
selectedAsText = computed;
@@ -461,8 +459,7 @@ private void toggleCheckedGroup(boolean on) {
461459
}
462460
}
463461
} else {
464-
// TODO currently it checks for all existing, but it should check
465-
// only visible
462+
// TODO currently it checks for all existing, but it should check only visible
466463
Object[] elements = checkList.getVisibleExpandedElements();
467464
List<Object> list = Arrays.asList(checkedElements);
468465
for (Object object : elements) {
@@ -651,7 +648,7 @@ private void appendPluginDescription(StringBuilder sb, Plugin plugin) {
651648
sb.append("<p>Contributed by plugin: ").append(plugin.getPluginId());
652649
sb.append("<p>Provider: ").append(plugin.getProvider());
653650
String website = plugin.getWebsite();
654-
if (website != null && website.length() > 0) {
651+
if (website != null && !website.isEmpty()) {
655652
sb.append(" (").append(website).append(")");
656653
}
657654
}

eclipsePlugin/src/de/tobject/findbugs/view/explorer/GroupType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ IPackageFragment getIdentifier(IMarker marker) {
109109
@Override
110110
String getShortDescription(IPackageFragment id) {
111111
String name = id.getElementName();
112-
if (name == null || name.length() == 0) {
112+
if (name == null || name.isEmpty()) {
113113
name = "default package";
114114
}
115115
return name;

spotbugs-ant/src/main/java/edu/umd/cs/findbugs/anttask/AbstractFindBugsTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ protected void createFindbugsEngine() {
318318
findbugsEngine.setProject(getProject());
319319
findbugsEngine.setTaskName(getTaskName());
320320
findbugsEngine.setFork(true);
321-
if (jvm.length() > 0) {
321+
if (!jvm.isEmpty()) {
322322
findbugsEngine.setJvm(jvm);
323323
}
324324
findbugsEngine.setTimeout(timeout);

spotbugs-ant/src/main/java/edu/umd/cs/findbugs/anttask/FindBugsTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -711,7 +711,7 @@ public ClassLocation createClass() {
711711
* name of output file
712712
*/
713713
public void setOutputFile(String outputFileName) {
714-
if (outputFileName != null && outputFileName.length() > 0) {
714+
if (outputFileName != null && !outputFileName.isEmpty()) {
715715
this.outputFileName = outputFileName;
716716
}
717717
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package edu.umd.cs.findbugs.detect;
2+
3+
import edu.umd.cs.findbugs.AbstractIntegrationTest;
4+
import org.junit.jupiter.api.Test;
5+
6+
class Issue2040Test extends AbstractIntegrationTest {
7+
@Test
8+
void test() {
9+
performAnalysis("ghIssues/issue2040/Base.class",
10+
"ghIssues/issue2040/Derived.class",
11+
"ghIssues/issue2040/GenericBase.class",
12+
"ghIssues/issue2040/GenericDerived.class",
13+
"ghIssues/issue2040/Interface.class",
14+
"ghIssues/issue2040/Generic.class",
15+
"ghIssues/issue2040/Caller.class");
16+
17+
assertBugTypeCount("THROWS_METHOD_THROWS_RUNTIMEEXCEPTION", 3);
18+
assertBugInMethodAtLine("THROWS_METHOD_THROWS_RUNTIMEEXCEPTION", "Derived", "lambda$lambda2$1", 36);
19+
assertBugInMethodAtLine("THROWS_METHOD_THROWS_RUNTIMEEXCEPTION", "Derived", "runtimeExThrownFromCatch", 97);
20+
assertBugInMethodAtLine("THROWS_METHOD_THROWS_RUNTIMEEXCEPTION", "Derived", "runtimeExceptionThrowingMethod", 45);
21+
22+
assertBugTypeCount("THROWS_METHOD_THROWS_CLAUSE_THROWABLE", 4);
23+
assertBugInMethod("THROWS_METHOD_THROWS_CLAUSE_THROWABLE", "Base", "method");
24+
assertBugInMethod("THROWS_METHOD_THROWS_CLAUSE_THROWABLE", "Derived", "throwableThrowingMethod");
25+
assertBugInMethod("THROWS_METHOD_THROWS_CLAUSE_THROWABLE", "GenericBase", "method1");
26+
assertBugInMethod("THROWS_METHOD_THROWS_CLAUSE_THROWABLE", "GenericBase", "method2");
27+
28+
assertBugTypeCount("THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", 5);
29+
assertBugInMethod("THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", "Derived", "exceptionThrowingMethod");
30+
assertBugInMethod("THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", "Derived", "exThrownFromCatch");
31+
assertBugInMethod("THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", "GenericBase", "method");
32+
assertBugInMethod("THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", "GenericBase", "method2");
33+
assertBugInMethod("THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", "Interface", "iMethod");
34+
}
35+
}

spotbugs/etc/findbugs.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@
669669
reports="SSD_DO_NOT_USE_INSTANCE_LOCK_ON_SHARED_STATIC_DATA"/>
670670
<Detector class="edu.umd.cs.findbugs.detect.DontUseFloatsAsLoopCounters" speed="fast"
671671
reports="FL_FLOATS_AS_LOOP_COUNTERS"/>
672-
<Detector class="edu.umd.cs.findbugs.detect.ThrowingExceptions" speed="fast" disabled="true"
672+
<Detector class="edu.umd.cs.findbugs.detect.ThrowingExceptions" speed="fast"
673673
reports="THROWS_METHOD_THROWS_RUNTIMEEXCEPTION,THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION,THROWS_METHOD_THROWS_CLAUSE_THROWABLE" />
674674
<Detector class="edu.umd.cs.findbugs.detect.PermissionsSuper"
675675
reports="PERM_SUPER_NOT_CALLED_IN_GETPERMISSIONS"/>

spotbugs/etc/messages.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9002,8 +9002,8 @@ Using floating-point variables should not be used as loop counters, as they are
90029002
</Details>
90039003
</BugPattern>
90049004
<BugPattern type="THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION">
9005-
<ShortDescription>Method lists Exception in its throws clause.</ShortDescription>
9006-
<LongDescription>Method lists Exception in its throws clause.</LongDescription>
9005+
<ShortDescription>Method lists Exception in its throws clause, but it could be more specific.</ShortDescription>
9006+
<LongDescription>Method lists Exception in its throws clause, but it could be more specific.</LongDescription>
90079007
<Details>
90089008
<![CDATA[
90099009
<p>
@@ -9019,8 +9019,8 @@ Using floating-point variables should not be used as loop counters, as they are
90199019
</Details>
90209020
</BugPattern>
90219021
<BugPattern type="THROWS_METHOD_THROWS_CLAUSE_THROWABLE">
9022-
<ShortDescription>Method lists Throwable in its throws clause.</ShortDescription>
9023-
<LongDescription>Method lists Throwable in its throws clause.</LongDescription>
9022+
<ShortDescription>Method lists Throwable in its throws clause, but it could be more specific.</ShortDescription>
9023+
<LongDescription>Method lists Throwable in its throws clause, but it could be more specific.</LongDescription>
90249024
<Details>
90259025
<![CDATA[
90269026
<p>

spotbugs/src/main/java/edu/umd/cs/findbugs/AnalysisCacheToRepositoryAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public ClassPath getClassPath() {
8383
*/
8484
@Override
8585
public JavaClass loadClass(String className) throws ClassNotFoundException {
86-
if (className.length() == 0) {
86+
if (className.isEmpty()) {
8787
throw new IllegalArgumentException("Request to load empty class");
8888
}
8989
className = ClassName.toSlashedClassName(className);

spotbugs/src/main/java/edu/umd/cs/findbugs/BugRanker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ void storeAdjustment(String key, String value) {
148148
}
149149

150150
s = s.trim();
151-
if (s.length() == 0) {
151+
if (s.isEmpty()) {
152152
continue;
153153
}
154154

spotbugs/src/main/java/edu/umd/cs/findbugs/CommandLineUiCallback.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public int showConfirmDialog(String message, String title, String ok, String can
7777
}
7878

7979
private int parseAnswer(String answer) {
80-
if (null == answer || answer.length() == 0) {
80+
if (null == answer || answer.isEmpty()) {
8181
System.out.println("You entered an empty string");
8282

8383
return -1;

spotbugs/src/main/java/edu/umd/cs/findbugs/FieldAnnotation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ private String getNameInClass(ClassAnnotation primaryClass) {
302302
String givenPackageName = primaryClass.getPackageName();
303303
String thisPackageName = this.getPackageName();
304304
if (thisPackageName.equals(givenPackageName)) {
305-
if (thisPackageName.length() == 0) {
305+
if (thisPackageName.isEmpty()) {
306306
return fieldName;
307307
} else {
308308
return className.substring(thisPackageName.length() + 1) + "." + fieldName;

spotbugs/src/main/java/edu/umd/cs/findbugs/FindBugs2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ public boolean vacuous() {
178178

179179
String hostApp = System.getProperty(PROP_FINDBUGS_HOST_APP);
180180
String hostAppVersion = null;
181-
if (hostApp == null || hostApp.trim().length() <= 0) {
181+
if (hostApp == null || hostApp.trim().isEmpty()) {
182182
hostApp = "FindBugs TextUI";
183183
hostAppVersion = System.getProperty(PROP_FINDBUGS_HOST_APP_VERSION);
184184
}

spotbugs/src/main/java/edu/umd/cs/findbugs/FindBugsMessageFormat.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public String format(BugAnnotation[] args, ClassAnnotation primaryClass, boolean
7474
String pat = pattern;
7575
StringBuilder result = new StringBuilder();
7676

77-
while (pat.length() > 0) {
77+
while (!pat.isEmpty()) {
7878
int subst = pat.indexOf('{');
7979
if (subst < 0) {
8080
result.append(pat);

spotbugs/src/main/java/edu/umd/cs/findbugs/OpcodeStack.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -805,7 +805,7 @@ public static Item nullItem(String signature) {
805805

806806
baseSig = signature;
807807

808-
if (baseSig.length() == 0) {
808+
if (baseSig.isEmpty()) {
809809
return null;
810810
}
811811
baseSig = baseSig.substring(1, baseSig.length() - 1);

spotbugs/src/main/java/edu/umd/cs/findbugs/PackageMemberAnnotation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ private static String computeSourceFile(String className) {
7474
* name of the class
7575
*/
7676
protected PackageMemberAnnotation(@DottedClassName String className, String description, String sourceFileName) {
77-
if (className.length() == 0) {
77+
if (className.isEmpty()) {
7878
throw new IllegalArgumentException("Empty classname not allowed");
7979
}
8080
if (className.indexOf('/') >= 0) {

0 commit comments

Comments
 (0)