package com.antfortune.freeline.idea.models; import com.android.tools.idea.gradle.dsl.model.dependencies.ArtifactDependencyModel; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.lang.reflect.Method; /** * Created by pengwei on 16/9/14. * 兼容android studio不同版本 * 2.1.2之前版本name()方法返回string, 之后返回GradleNullableValue */ public class ArtifactDependencyModelWrapper { private ArtifactDependencyModel model; public ArtifactDependencyModelWrapper(ArtifactDependencyModel model) { this.model = model; } @NotNull public String name() { Object value = getArtifactDependencyModelMethod("name"); if (value != null) { return getGradleNotNullValue(value); } return ""; } @Nullable public String group() { Object value = getArtifactDependencyModelMethod("group"); if (value != null) { return getGradleNullableValue(value); } return ""; } @Nullable public String version() { Object value = getArtifactDependencyModelMethod("version"); if (value != null) { return getGradleNullableValue(value); } return ""; } public String configurationName() { return model.configurationName(); } /** * 反射调用ArtifactDependencyModel方法 * * @param methodName * @return */ private Object getArtifactDependencyModelMethod(String methodName) { try { Class<?> ArtifactDependencyModelClass = Class.forName("com.android.tools.idea.gradle.dsl.model.dependencies.ArtifactDependencyModel"); Method groupMethod = ArtifactDependencyModelClass.getMethod(methodName); Object value = groupMethod.invoke(model); return value; } catch (Exception e) { return null; } } private String getGradleNullableValue(Object value) { return getGradleValue("GradleNullableValue", value); } private String getGradleNotNullValue(Object value) { return getGradleValue("GradleNotNullValue", value); } private String getGradleValue(String className, Object value) { if (value instanceof String) { return (String) value; } try { Class<?> classType = Class.forName("com.android.tools.idea.gradle.dsl.model.values." + className); if (value.getClass().equals(classType)) { Method valueMethod = classType.getMethod("value"); value = valueMethod.invoke(value); if (value instanceof String) { return (String) value; } } } catch (Exception e) { } return ""; } }