aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/xtremelabs/robolectric/internal/ClassNameResolver.java
blob: 4f2db4ef06e03dae10471a8933a6feee81346b91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.xtremelabs.robolectric.internal;

public class ClassNameResolver<T> {
    private String packageName;
    private String className;

    public ClassNameResolver(String packageName, String className) {
        this.packageName = packageName;
        this.className = className;
    }

    public Class<? extends T> resolve() {
        Class<? extends T> aClass;
        if (looksFullyQualified(className)) {
            aClass = safeClassForName(className);
        } else {
            aClass = safeClassForName(packageName + "." + className);
            if (aClass == null) {
                aClass = safeClassForName(packageName + className);
            }
        }

        if (aClass == null) {
            throw new RuntimeException("Could not find a class for package: "
                    + packageName + " and class name: " + className);
        }
        return aClass;
    }

    private boolean looksFullyQualified(String className) {
        return className.contains(".") && !className.startsWith(".");
    }

    private Class<? extends T> safeClassForName(String classNamePath) {
        try {
            return (Class<? extends T>) Class.forName(classNamePath);
        } catch (ClassNotFoundException e) {
            return null;
        }
    }
}