Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -416,16 +416,35 @@ private void handleAnnotations(List<? extends AnnotationTree> annotations) {
public Void visitMethodInvocation(MethodInvocationTree node, Void v) {
if (node.getMethodSelect() instanceof MemberSelectTree) {
ExpressionTree container = ((MemberSelectTree) node.getMethodSelect()).getExpression();
if (container instanceof MemberSelectTree) {
MemberSelectTree containerMST = (MemberSelectTree) container;
if (looksLikeClassName(containerMST.getIdentifier().toString())) {
checkFullyQualifiedType(container);
}
}
maybeRecordMethodReceiverType(container);
}
return super.visitMethodInvocation(node, v);
}

private void maybeRecordMethodReceiverType(ExpressionTree container) {
String receiverTypeName = methodReceiverTypeName(container);
if (receiverTypeName == null) {
return;
}
// Imported identifiers are known types even when they are acronym-style
// names (for example UUID), which our heuristic would otherwise reject.
if (currentFileImports.containsKey(receiverTypeName)
|| looksLikeClassName(receiverTypeName)) {
checkFullyQualifiedType(container);
}
}

@Nullable
private String methodReceiverTypeName(ExpressionTree container) {
if (container instanceof MemberSelectTree) {
return ((MemberSelectTree) container).getIdentifier().toString();
}
if (container.getKind() == Tree.Kind.IDENTIFIER) {
return container.toString();
}
return null;
}

private boolean looksLikeClassName(String identifier) {
if (identifier.isEmpty()) {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,28 @@ public void testSamePackageAllTypePositions() throws IOException {
parser.getUsedTypes());
}

@Test
public void testSamePackageStaticMethodCall() throws IOException {
List<? extends JavaFileObject> files =
List.of(
testFiles.get(
"/workspace/com/gazelle/java/javaparser/generators/SamePackageStaticCall.java"));
parser.parseClasses(files);
assertEquals(
Set.of("workspace.com.gazelle.java.javaparser.generators.ExternalFactory"),
parser.getUsedTypes());
}

@Test
public void testImportedAcronymStaticMethodCall() throws IOException {
List<? extends JavaFileObject> files =
List.of(
testFiles.get(
"/workspace/com/gazelle/java/javaparser/generators/ImportedAcronymStaticCall.java"));
parser.parseClasses(files);
assertEquals(Set.of("java.util.UUID"), parser.getUsedTypes());
}

private <T> TreeSet<T> treeSet(T... values) {
return new TreeSet<>(Arrays.asList(values));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package workspace.com.gazelle.java.javaparser.generators;

import java.util.UUID;

public class ImportedAcronymStaticCall {
Object id = UUID.randomUUID();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package workspace.com.gazelle.java.javaparser.generators;

public class SamePackageStaticCall {
Object result = ExternalFactory.create(42);
Object other = ExternalFactory.build("test", new Object());
}
Loading