Skip to content
This repository was archived by the owner on Aug 9, 2022. It is now read-only.

Commit 1175eb2

Browse files
committed
move functions for single element to a separate utility class (#37)
1 parent 6584b8d commit 1175eb2

8 files changed

Lines changed: 147 additions & 60 deletions

File tree

src/main/java/com/microsoft/build/YmlFilesBuilder.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.microsoft.model.*;
88
import com.microsoft.util.ElementUtil;
99
import com.microsoft.util.FileUtil;
10+
import com.microsoft.util.Utils;
1011
import com.microsoft.util.YamlUtil;
1112
import jdk.javadoc.doclet.DocletEnvironment;
1213
import org.apache.commons.lang3.RegExUtils;
@@ -166,7 +167,7 @@ void addChildren(TypeElement classElement, List<String> children) {
166167

167168
List<? extends Element> filterPrivateElements(List<? extends Element> elements) {
168169
return elements.stream()
169-
.filter(element -> !ElementUtil.isPrivateOrPackagePrivate(element)).collect(Collectors.toList());
170+
.filter(element -> !Utils.isPrivateOrPackagePrivate(element)).collect(Collectors.toList());
170171
}
171172

172173
void collect(TypeElement classElement, List<String> children,
@@ -193,7 +194,7 @@ void addConstructorsInfo(TypeElement classElement, MetadataFile classMetadataFil
193194

194195
void addMethodsInfo(TypeElement classElement, MetadataFile classMetadataFile) {
195196
ElementFilter.methodsIn(classElement.getEnclosedElements()).stream()
196-
.filter(methodElement -> !ElementUtil.isPrivateOrPackagePrivate(methodElement))
197+
.filter(methodElement -> !Utils.isPrivateOrPackagePrivate(methodElement))
197198
.forEach(methodElement -> {
198199
MetadataFileItem methodItem = buildMetadataFileItem(methodElement);
199200
methodItem.setOverload(classItemsLookup.extractOverload(methodElement));
@@ -212,7 +213,7 @@ void addMethodsInfo(TypeElement classElement, MetadataFile classMetadataFile) {
212213

213214
void addFieldsInfo(TypeElement classElement, MetadataFile classMetadataFile) {
214215
ElementFilter.fieldsIn(classElement.getEnclosedElements()).stream()
215-
.filter(fieldElement -> !ElementUtil.isPrivateOrPackagePrivate(fieldElement))
216+
.filter(fieldElement -> !Utils.isPrivateOrPackagePrivate(fieldElement))
216217
.forEach(fieldElement -> {
217218
MetadataFileItem fieldItem = buildMetadataFileItem(fieldElement);
218219
fieldItem.setContent(classItemsLookup.extractFieldContent(fieldElement));

src/main/java/com/microsoft/lookup/ClassLookup.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.microsoft.lookup.model.ExtendedMetadataFileItem;
44
import com.microsoft.model.MetadataFileItem;
55
import com.microsoft.model.TypeParameter;
6-
import com.microsoft.util.ElementUtil;
6+
import com.microsoft.util.Utils;
77
import jdk.javadoc.doclet.DocletEnvironment;
88
import org.apache.commons.collections4.CollectionUtils;
99
import org.apache.commons.lang3.StringUtils;
@@ -146,7 +146,7 @@ void appendInheritedMethods(TypeElement element, List<ExtendedMetadataFileItem>
146146
.orElse(0);
147147

148148
for (Element m : members) {
149-
if (m.getKind() == ElementKind.METHOD && !ElementUtil.isPrivateOrPackagePrivate(m)) {
149+
if (m.getKind() == ElementKind.METHOD && !Utils.isPrivateOrPackagePrivate(m)) {
150150
String uid = element.getQualifiedName().toString().concat(".") + String.valueOf(m);
151151

152152
ExtendedMetadataFileItem item = new ExtendedMetadataFileItem(uid);

src/main/java/com/microsoft/util/ElementUtil.java

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import org.apache.commons.lang3.StringUtils;
44

55
import javax.lang.model.element.Element;
6-
import javax.lang.model.element.Modifier;
76
import javax.lang.model.element.PackageElement;
87
import javax.lang.model.element.TypeElement;
98
import javax.lang.model.util.ElementFilter;
@@ -31,7 +30,7 @@ public List<TypeElement> extractSortedElements(Element element) {
3130
// By default, exclude private and package-private items
3231
// todo allow pass parameter for filter items by access modifiers
3332
return ElementFilter.typesIn(element.getEnclosedElements()).stream()
34-
.filter(o -> !isPrivateOrPackagePrivate(o))
33+
.filter(o -> !Utils.isPrivateOrPackagePrivate(o))
3534
.filter(o -> !matchAnyPattern(excludeClasses, String.valueOf(o.getQualifiedName())))
3635
.sorted((o1, o2) ->
3736
StringUtils.compare(String.valueOf(o1.getSimpleName()), String.valueOf(o2.getSimpleName()))
@@ -54,24 +53,4 @@ boolean matchAnyPattern(Set<Pattern> patterns, String stringToCheck) {
5453
}
5554
return false;
5655
}
57-
58-
public static boolean isPackagePrivate(Element e) {
59-
return !(isPublic(e) || isPrivate(e) || isProtected(e));
60-
}
61-
62-
public static boolean isPrivate(Element e) {
63-
return e.getModifiers().contains(Modifier.PRIVATE);
64-
}
65-
66-
public static boolean isProtected(Element e) {
67-
return e.getModifiers().contains(Modifier.PROTECTED);
68-
}
69-
70-
public static boolean isPublic(Element e) {
71-
return e.getModifiers().contains(Modifier.PUBLIC);
72-
}
73-
74-
public static boolean isPrivateOrPackagePrivate(Element e) {
75-
return isPrivate(e) || isPackagePrivate(e);
76-
}
7756
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.microsoft.util;
2+
3+
import javax.lang.model.element.Element;
4+
import javax.lang.model.element.Modifier;
5+
6+
public class Utils {
7+
8+
public static boolean isPackagePrivate(Element e) {
9+
return !(isPublic(e) || isPrivate(e) || isProtected(e));
10+
}
11+
12+
public static boolean isPrivate(Element e) {
13+
return e.getModifiers().contains(Modifier.PRIVATE);
14+
}
15+
16+
public static boolean isProtected(Element e) {
17+
return e.getModifiers().contains(Modifier.PROTECTED);
18+
}
19+
20+
public static boolean isPublic(Element e) {
21+
return e.getModifiers().contains(Modifier.PUBLIC);
22+
}
23+
24+
public static boolean isPrivateOrPackagePrivate(Element e) {
25+
return isPrivate(e) || isPackagePrivate(e);
26+
}
27+
}

src/test/java/com/microsoft/samples/SuperHero.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public SuperHero(String heroName, String uniquePower, int health, int defense) {
3939
* </p>
4040
*
4141
* @param incomingDamage the amount of incoming damage for {@link SuperHero}
42-
* @param damageType type of damage with similar word damageTypeLong, sure
42+
* @param damageType type of damage with similar word damageTypeLong, sure
4343
* @return the amount of health hero has after attack
4444
* @throws IllegalArgumentException when incomingDamage is negative and thanks for {@link Exception}
4545
* @version 1.2
@@ -84,11 +84,11 @@ public void setUniquePower(String uniquePower) {
8484
this.uniquePower = uniquePower;
8585
}
8686

87-
public int getHealth() {
87+
protected int getHealth() {
8888
return health;
8989
}
9090

91-
public void setHealth(int health) {
91+
protected void setHealth(int health) {
9292
this.health = health;
9393
}
9494

@@ -100,7 +100,11 @@ public void setDefense(int defense) {
100100
this.defense = defense;
101101
}
102102

103-
private void somePrivateMethod() {}
103+
private void setHobby(String hobby) {
104+
this.hobby = hobby;
105+
}
104106

105-
void somePackagePrivateMethod() {}
107+
String getHobby() {
108+
return hobby;
109+
}
106110
}

src/test/java/com/microsoft/util/ElementUtilTest.java

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ public void extractSortedElements() {
6060

6161
// Ensure items to exclude exist.
6262
assertThat("Wrong enclosed elements number", allElements.size(), is(6));
63-
assertTrue("Unexpected package private class", allElements.contains("com.microsoft.samples.subpackage.InternalException"));
64-
assertTrue("Unexpected to-exclude class", allElements.contains("com.microsoft.samples.subpackage.SomeExcludedClass"));
63+
assertThat("Unexpected package private class", allElements.contains("com.microsoft.samples.subpackage.InternalException"), is(true));
64+
assertThat("Unexpected to-exclude class", allElements.contains("com.microsoft.samples.subpackage.SomeExcludedClass"), is(true));
6565

6666

6767
List<String> extractedElements = elementUtil.extractSortedElements(element)
@@ -83,28 +83,4 @@ public void matchAnyPattern() {
8383
assertFalse(elementUtil.matchAnyPattern(patterns, "EngineFive"));
8484
assertFalse(elementUtil.matchAnyPattern(patterns, "com.ms.Awesome"));
8585
}
86-
87-
@Test
88-
public void isPackagePrivate() {
89-
Element element = elements.getTypeElement("com.microsoft.samples.SuperHero");
90-
91-
List<Element> result = element.getEnclosedElements()
92-
.stream().filter(e -> ElementUtil.isPackagePrivate(e)).collect(Collectors.toList());
93-
94-
assertThat("Wrong result list size", result.size(), is(2));
95-
assertThat("Unexpected package private field", String.valueOf(result.get(0)), is("hobby"));
96-
assertThat("Unexpected package private method", String.valueOf(result.get(1)), is("somePackagePrivateMethod()"));
97-
}
98-
99-
@Test
100-
public void isPrivateOrPackagePrivate() {
101-
Element element = elements.getTypeElement("com.microsoft.samples.SuperHero");
102-
103-
List<Element> result = element.getEnclosedElements()
104-
.stream().filter(e -> ElementUtil.isPrivateOrPackagePrivate(e)).collect(Collectors.toList());
105-
106-
assertThat("Wrong result list size", result.size(), is(7));
107-
assertThat("Unexpected private method", String.valueOf(result.get(5)), is("somePrivateMethod()"));
108-
assertThat("Unexpected package private method", String.valueOf(result.get(6)), is("somePackagePrivateMethod()"));
109-
}
11086
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package com.microsoft.util;
2+
3+
import java.util.List;
4+
import java.util.stream.Collectors;
5+
6+
import javax.lang.model.element.Element;
7+
import javax.lang.model.element.ElementKind;
8+
import javax.lang.model.util.Elements;
9+
10+
import org.junit.*;
11+
import org.junit.Rule;
12+
import org.junit.Test;
13+
import org.junit.runner.RunWith;
14+
15+
import org.mockito.junit.MockitoJUnitRunner;
16+
17+
import com.google.testing.compile.CompilationRule;
18+
19+
import static org.hamcrest.CoreMatchers.is;
20+
import static org.junit.Assert.*;
21+
22+
@RunWith(MockitoJUnitRunner.class)
23+
public class UtilsTest {
24+
25+
@Rule
26+
public CompilationRule rule = new CompilationRule();
27+
private Elements elements;
28+
private List<Element> allElements;
29+
30+
@Before
31+
public void setup() {
32+
elements = rule.getElements();
33+
Element element = elements.getTypeElement("com.microsoft.samples.SuperHero");
34+
allElements = element.getEnclosedElements().stream().collect(Collectors.toList());
35+
}
36+
37+
// Test isPackagePrivate() method
38+
@Test
39+
public void isPackagePrivate_True_PackagePrivateMethod() {
40+
Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "getHobby()");
41+
assertThat(Utils.isPackagePrivate(method), is(true));
42+
}
43+
44+
@Test
45+
public void isPackagePrivate_True_PackagePrivateField() {
46+
Element field = getElementByKindAndName(allElements, ElementKind.FIELD, "hobby");
47+
assertThat(Utils.isPackagePrivate(field), is(true));
48+
}
49+
50+
// Test isPrivate() method
51+
@Test
52+
public void isPrivate_True_PrivateMethod() {
53+
Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "setHobby(java.lang.String)");
54+
assertThat(Utils.isPrivate(method), is(true));
55+
}
56+
57+
@Test
58+
public void isPrivate_True_PrivateField() {
59+
Element field = getElementByKindAndName(allElements, ElementKind.FIELD, "uniquePower");
60+
assertThat(Utils.isPrivate(field), is(true));
61+
}
62+
63+
// Test isPrivateOrPackagePrivate() method
64+
@Test
65+
public void isPrivateOrPackagePrivate_True_PackagePrivateMethod() {
66+
Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "getHobby()");
67+
assertThat(Utils.isPrivateOrPackagePrivate(method), is(true));
68+
}
69+
70+
@Test
71+
public void isPrivateOrPackagePrivate_True_PrivateFiled() {
72+
Element field = getElementByKindAndName(allElements, ElementKind.FIELD, "uniquePower");
73+
assertThat(Utils.isPrivateOrPackagePrivate(field), is(true));
74+
}
75+
76+
@Test
77+
public void isPrivateOrPackagePrivate_False_PublicMethod() {
78+
Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "getUniquePower()");
79+
assertThat(Utils.isPrivateOrPackagePrivate(method), is(false));
80+
}
81+
82+
@Test
83+
public void isPrivateOrPackagePrivate_False_PublicField() {
84+
Element field = getElementByKindAndName(allElements, ElementKind.FIELD, "SOME_PUBLIC_STRING");
85+
assertThat(Utils.isPrivateOrPackagePrivate(field), is(false));
86+
}
87+
88+
@Test
89+
public void isPrivateOrPackagePrivate_False_ProtectedMethod() {
90+
Element method = getElementByKindAndName(allElements, ElementKind.METHOD, "getHealth()");
91+
assertThat(Utils.isPrivateOrPackagePrivate(method), is(false));
92+
}
93+
94+
private Element getElementByKindAndName(List<? extends Element> elements, ElementKind elementKind, String name) {
95+
return elements.stream()
96+
.filter(e -> e.toString().equals(name))
97+
.filter(e -> e.getKind() == elementKind)
98+
.findFirst().orElse(null);
99+
}
100+
}

src/test/resources/expected-generated-files/com.microsoft.samples.SuperHero.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ items:
128128
type: "Method"
129129
package: "com.microsoft.samples"
130130
syntax:
131-
content: "public int getHealth()"
131+
content: "protected int getHealth()"
132132
return:
133133
type: "int"
134134
- uid: "com.microsoft.samples.SuperHero.getHeroName()"
@@ -206,7 +206,7 @@ items:
206206
type: "Method"
207207
package: "com.microsoft.samples"
208208
syntax:
209-
content: "public void setHealth(int health)"
209+
content: "protected void setHealth(int health)"
210210
parameters:
211211
- id: "health"
212212
type: "int"

0 commit comments

Comments
 (0)