Skip to content

Commit 4572c13

Browse files
committed
Adds more precise class naming. Because $ is a legal character in class names, we should try to handle them. Some may say it's bad practice to use dollar signs in Java class names at all, reserving them for the compiler. They're probably correct.
1 parent d26bcc5 commit 4572c13

9 files changed

Lines changed: 83 additions & 92 deletions

File tree

codemodel/.classpath

Lines changed: 0 additions & 8 deletions
This file was deleted.

codemodel/.project

Lines changed: 0 additions & 65 deletions
This file was deleted.

codemodel/pom.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
<dependency>
5858
<groupId>junit</groupId>
5959
<artifactId>junit</artifactId>
60-
<version>4.8.1</version>
6160
<scope>test</scope>
6261
</dependency>
6362
<dependency>

codemodel/src/main/java/com/sun/codemodel/JAnnotationArrayMember.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
package com.sun.codemodel;
4242

4343

44+
import com.sun.codemodel.util.NameUtilities;
45+
4446
import java.lang.annotation.Annotation;
4547
import java.util.ArrayList;
4648
import java.util.List;
@@ -236,7 +238,7 @@ public JAnnotationArrayMember param(final Class<?> value){
236238
JAnnotationValue annotationValue = new JAnnotationStringValue(
237239
new JExpressionImpl() {
238240
public void generate(JFormatter f) {
239-
f.p(value.getName().replace('$', '.'));
241+
f.p(NameUtilities.getFullName(value));
240242
f.p(".class");
241243
}
242244
});

codemodel/src/main/java/com/sun/codemodel/JAnnotationUse.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
package com.sun.codemodel;
3737

3838

39+
import com.sun.codemodel.util.NameUtilities;
40+
3941
import java.lang.annotation.Annotation;
4042
import java.util.Collections;
4143
import java.util.LinkedHashMap;
@@ -324,7 +326,7 @@ public JAnnotationUse param(String name, final Class<?> value){
324326
addValue(name, new JAnnotationStringValue(
325327
new JExpressionImpl() {
326328
public void generate(JFormatter f) {
327-
f.p(value.getName().replace('$', '.'));
329+
f.p(NameUtilities.getFullName(value));
328330
f.p(".class");
329331
}
330332
}));

codemodel/src/main/java/com/sun/codemodel/JCodeModel.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import java.util.List;
5252
import java.util.Map;
5353

54+
import com.sun.codemodel.util.NameUtilities;
5455
import com.sun.codemodel.writer.FileCodeWriter;
5556
import com.sun.codemodel.writer.ProgressCodeWriter;
5657

@@ -556,11 +557,11 @@ private class JReferencedClass extends JClass implements JDeclaration {
556557
}
557558

558559
public String name() {
559-
return _class.getSimpleName().replace('$','.');
560+
return _class.getSimpleName();
560561
}
561562

562563
public String fullName() {
563-
return _class.getName().replace('$','.');
564+
return NameUtilities.getFullName(_class);
564565
}
565566

566567
public String binaryName() {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.sun.codemodel.util;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* @author Ben Fagin
8+
* @version 2013-04-01
9+
*/
10+
public class NameUtilities {
11+
12+
public static String getFullName(Class c) {
13+
if (c == null) {
14+
throw new IllegalArgumentException("class cannot be null");
15+
}
16+
17+
StringBuilder name = new StringBuilder();
18+
name.append(c.getPackage().getName()).append(".");
19+
20+
Class klaus = c;
21+
List<Class> enclosingClasses = new ArrayList<Class>();
22+
23+
while ((klaus = klaus.getEnclosingClass()) != null) {
24+
enclosingClasses.add(klaus);
25+
}
26+
27+
for (int i = enclosingClasses.size() - 1; i >= 0; i--) {
28+
name.append(enclosingClasses.get(i).getSimpleName()).append(".");
29+
}
30+
31+
name.append(c.getSimpleName());
32+
return name.toString();
33+
}
34+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.sun.codemodel.util;
2+
3+
import org.junit.Assert;
4+
import org.junit.Test;
5+
6+
/**
7+
* @author Ben Fagin
8+
* @version 2013-04-01
9+
*/
10+
public class NameUtilitiesTest {
11+
12+
13+
@Test
14+
public void testInnerClassNaming() {
15+
String expected =
16+
NameUtilitiesTest.class.getPackage().getName()+"."
17+
+ NameUtilitiesTest.class.getSimpleName()+"."
18+
+ "Inner"
19+
;
20+
21+
String name = NameUtilities.getFullName(Inner.class);
22+
Assert.assertEquals(expected, name);
23+
}
24+
25+
public static class Inner { }
26+
}

pom.xml

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,6 @@
4949
<url>http://codemodel.java.net/</url>
5050
<version>1.0-SNAPSHOT</version>
5151
<packaging>pom</packaging>
52-
<parent>
53-
<groupId>net.java</groupId>
54-
<artifactId>jvnet-parent</artifactId>
55-
<version>1</version>
56-
</parent>
5752
<modules>
5853
<module>codemodel</module>
5954
<module>codemodel-annotation-compiler</module>
@@ -144,6 +139,15 @@
144139
<connection>scm:svn:https://svn.java.net/svn/codemodel~svn/trunk/codemodel</connection>
145140
<url>http://java.net/projects/codemodel/sources/svn/show/trunk</url>
146141
</scm>
142+
<dependencyManagement>
143+
<dependencies>
144+
<dependency>
145+
<groupId>junit</groupId>
146+
<artifactId>junit</artifactId>
147+
<version>4.11</version>
148+
</dependency>
149+
</dependencies>
150+
</dependencyManagement>
147151
<build>
148152
<plugins>
149153
<plugin>
@@ -181,15 +185,11 @@
181185
</execution>
182186
</executions>
183187
</plugin>
188+
<plugin>
189+
<groupId>org.apache.maven.plugins</groupId>
190+
<artifactId>maven-surefire-plugin</artifactId>
191+
<version>2.12.3</version>
192+
</plugin>
184193
</plugins>
185194
</build>
186-
<!--<reporting>-->
187-
<!--<plugins>-->
188-
<!--<plugin>-->
189-
<!--<groupId>org.apache.maven.plugins</groupId>-->
190-
<!--<artifactId>maven-javadoc-plugin</artifactId>-->
191-
<!--<version>2.8.1</version>-->
192-
<!--</plugin>-->
193-
<!--</plugins>-->
194-
<!--</reporting>-->
195195
</project>

0 commit comments

Comments
 (0)