当前位置: 首页>>代码示例>>Java>>正文


Java JavaParser.ResolvedNode方法代码示例

本文整理汇总了Java中com.android.tools.lint.client.api.JavaParser.ResolvedNode方法的典型用法代码示例。如果您正苦于以下问题:Java JavaParser.ResolvedNode方法的具体用法?Java JavaParser.ResolvedNode怎么用?Java JavaParser.ResolvedNode使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在com.android.tools.lint.client.api.JavaParser的用法示例。


在下文中一共展示了JavaParser.ResolvedNode方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: isAddReplaceOpen

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
private static boolean isAddReplaceOpen(@NonNull JavaContext context, @NonNull MethodInvocation node) {
    String methodName = node.astName().astValue();

    if (ADD_TRANSACTION.equals(methodName) || OPEN_TRANSACTION.equals(methodName) || REPLACE_TRANSACTION.equals(methodName)) {
        JavaParser.ResolvedNode resolved = context.resolve(node);
        if (resolved instanceof JavaParser.ResolvedMethod) {
            JavaParser.ResolvedMethod method = (JavaParser.ResolvedMethod) resolved;
            JavaParser.ResolvedClass containingClass = method.getContainingClass();
            if (containingClass.isSubclassOf(ACTIVITY_MANAGER, false)) {
                return true;
            }
        }
    }

    return false;
}
 
开发者ID:massivedisaster,项目名称:ActivityFragmentManager,代码行数:17,代码来源:CommitTransaction.java

示例2: visitVariableDefinitionEntry

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
@Override
public boolean visitVariableDefinitionEntry(VariableDefinitionEntry node) {
    Expression initializer = node.astInitializer();
    if (initializer instanceof VariableReference) {
        JavaParser.ResolvedNode resolved = mContext.resolve(initializer);
        //noinspection SuspiciousMethodCalls
        if (resolved != null && mVariables.contains(resolved)) {
            JavaParser.ResolvedNode resolvedVariable = mContext.resolve(node);
            if (resolvedVariable instanceof JavaParser.ResolvedVariable) {
                JavaParser.ResolvedVariable variable = (JavaParser.ResolvedVariable) resolvedVariable;
                mVariables.add(variable);
            }
        }
    }
    return super.visitVariableDefinitionEntry(node);
}
 
开发者ID:massivedisaster,项目名称:ActivityFragmentManager,代码行数:17,代码来源:CommitTransaction.java

示例3: visitBinaryExpression

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
@Override
public boolean visitBinaryExpression(BinaryExpression node) {
    if (node.astOperator() == BinaryOperator.ASSIGN) {
        Expression rhs = node.astRight();
        if (rhs instanceof VariableReference) {
            JavaParser.ResolvedNode resolved = mContext.resolve(rhs);
            //noinspection SuspiciousMethodCalls
            if (resolved != null && mVariables.contains(resolved)) {
                JavaParser.ResolvedNode resolvedLhs = mContext.resolve(node.astLeft());
                if (resolvedLhs instanceof JavaParser.ResolvedVariable) {
                    JavaParser.ResolvedVariable variable = (JavaParser.ResolvedVariable) resolvedLhs;
                    mVariables.add(variable);
                }
            }
        }
    }
    return super.visitBinaryExpression(node);
}
 
开发者ID:massivedisaster,项目名称:ActivityFragmentManager,代码行数:19,代码来源:CommitTransaction.java

示例4: createJavaVisitor

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
@Override
public AstVisitor createJavaVisitor(final JavaContext context) {
    return new ForwardingAstVisitor() {
        @Override
        public boolean visitMethodInvocation(MethodInvocation node) {
            JavaParser.ResolvedNode resolve = context.resolve(node);
            if (resolve instanceof JavaParser.ResolvedMethod) {
                JavaParser.ResolvedMethod method = (JavaParser.ResolvedMethod) resolve;
                // 方法所在的类校验
                JavaParser.ResolvedClass containingClass = method.getContainingClass();
                if (containingClass.matches("android.util.Log")) {
                    context.report(ISSUE, node, context.getLocation(node),
                                   "请使用Ln,避免使用Log");
                    return true;
                }
                if (node.toString().startsWith("System.out.println")) {
                    context.report(ISSUE, node, context.getLocation(node),
                                   "请使用Ln,避免使用System.out.println");
                    return true;
                }
            }
            return super.visitMethodInvocation(node);
        }
    };
}
 
开发者ID:GavinCT,项目名称:MeituanLintDemo,代码行数:26,代码来源:LogDetector.java

示例5: parseResolvedMethod

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
public static JavaParser.ResolvedMethod parseResolvedMethod(
        @NonNull JavaContext context, @NonNull Node node) {
    if (null == context || null == node) {
        return null;
    }

    JavaParser.ResolvedNode resolvedNode = null;
    try {
        resolvedNode = context.resolve(node);
    } catch (Exception e) {
        // TODO
    }

    return (resolvedNode instanceof JavaParser.ResolvedMethod) ?
            (JavaParser.ResolvedMethod)resolvedNode : null;
}
 
开发者ID:squirrel-explorer,项目名称:eagleeye-android,代码行数:17,代码来源:NodeUtils.java

示例6: visitConstructorInvocation

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
@Override
public boolean visitConstructorInvocation(ConstructorInvocation node) {
    JavaParser.ResolvedNode resolvedType = mContext.resolve(node.astTypeReference());
    JavaParser.ResolvedClass resolvedClass = (JavaParser.ResolvedClass) resolvedType;

    if (resolvedClass != null
            && resolvedClass.isSubclassOf("android.os.Message", false)){
        mContext.report(ISSUE,
                node,
                mContext.getLocation(node),
                "You should not call `new Message()` directly.");

        return true;

    }

    return super.visitConstructorInvocation(node);
}
 
开发者ID:ljfxyj2008,项目名称:CustomLintDemo,代码行数:19,代码来源:MessageObtainDetector.java

示例7: isThisInstanceOfActivity_ForActivity

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
/**
 * If setContentView is called by 'this' instance,
 * this method will check if 'this' is an instance of a Class inherit from android.app.Activity, for eaxmple AppCompatActivity or FragmentActivity, and so on.
 */
private boolean isThisInstanceOfActivity_ForActivity(@NonNull JavaContext context, @NonNull MethodInvocation node) {
    Node currentNode = node.getParent();

    JavaParser.ResolvedNode resolved = context.resolve(JavaContext.findSurroundingClass(node));
    JavaParser.ResolvedClass sorroundingClass = (JavaParser.ResolvedClass) resolved;
    while (sorroundingClass != null) {
        //System.out.println("sorroundingClass = " + sorroundingClass);
        if ("android.app.Activity".equals(sorroundingClass.getName())) {
            return true;
        } else {
            sorroundingClass = sorroundingClass.getSuperClass();
        }
    }


    return false;


}
 
开发者ID:ljfxyj2008,项目名称:CustomLintDemo,代码行数:24,代码来源:ActivityFragmentLayoutNameDetector.java

示例8: isThisMethodHasLayoutAnnotation_ForActivity

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
/**
 * As there are more than one methods overload "setContentView",
 * we have to identify the one we want to check, whose param has an Annotation of "@LayoutRes".
 * In fact, {public void setContentView(@LayoutRes int layoutResID)} is the one we are looking for.
 */
private boolean isThisMethodHasLayoutAnnotation_ForActivity(@NonNull JavaContext context, @NonNull MethodInvocation node) {
    JavaParser.ResolvedNode resolved = context.resolve(node);
    JavaParser.ResolvedMethod method = (JavaParser.ResolvedMethod) resolved;

    if (node.astArguments().size() != 1) {
        return false;
    }

    Iterable<JavaParser.ResolvedAnnotation> annotations = method.getParameterAnnotations(0);
    for (JavaParser.ResolvedAnnotation annotation : annotations) {
        if ("android.support.annotation.LayoutRes".equals(annotation.getName())) {
            return true;
        }
    }

    return false;

}
 
开发者ID:ljfxyj2008,项目名称:CustomLintDemo,代码行数:24,代码来源:ActivityFragmentLayoutNameDetector.java

示例9: isInflateCalledInOnCreateView_ForFragment

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
/**
 * inflater.inflate() can be called from anywhere.
 * We only care about the one call in {public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)}.
 * This method whill check that.
 */
private boolean isInflateCalledInOnCreateView_ForFragment(@NonNull JavaContext context, @NonNull MethodInvocation node) {
    Node surroundingNode = JavaContext.findSurroundingMethod(node);
    JavaParser.ResolvedNode resolvedNode = context.resolve(surroundingNode);

    try {
        String resolvedNodeName = resolvedNode.getName();
        if ("onCreateView".equals(resolvedNodeName)) {
            return true;
        }
    } catch (Exception e) {
        return false;
    }
    return false;

}
 
开发者ID:ljfxyj2008,项目名称:CustomLintDemo,代码行数:21,代码来源:ActivityFragmentLayoutNameDetector.java

示例10: getParamWithLayoutAnnotation_ForFragment

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
/**
 * There are more than one methods overloading in the name of "inflate()" in android.view.LayoutInflater.<br>
 * We only care about those having an param with `@LayoutRes` annotation,
 * for example {public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)}.<br>
 * This method will find out the resource param with an `@LayoutRes` annotation in String format, for example `R.layout.fragment_blank` .<br>
 * If no such param exists, <B>null</B> will be returned.
 */
private String getParamWithLayoutAnnotation_ForFragment(@NonNull JavaContext context, @NonNull MethodInvocation node) {
    Iterator<Expression> arguments = node.astArguments().iterator();
    Expression argument = arguments.next();

    JavaParser.ResolvedNode resolved = context.resolve(node);
    JavaParser.ResolvedMethod method = (JavaParser.ResolvedMethod) resolved;

    JavaParser.ResolvedAnnotation layoutParamAnnotation = method.getParameterAnnotation("android.support.annotation.LayoutRes", 0);
    if (layoutParamAnnotation != null) {
        return argument.toString();
    } else {
        return null;
    }

}
 
开发者ID:ljfxyj2008,项目名称:CustomLintDemo,代码行数:23,代码来源:ActivityFragmentLayoutNameDetector.java

示例11: getParamWithLayoutAnnotation

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
/**
 * There are more than one methods overloading in the name of "inflate()" in android.view.LayoutInflater.<br>
 * We only care about those having an param with `@LayoutRes` annotation,
 * for example {public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)}.<br>
 * This method will find out the resource param with an `@LayoutRes` annotation in String format, for example `R.layout.fragment_blank` .<br>
 * If no such param exists, <B>null</B> will be returned.
 */
private String getParamWithLayoutAnnotation(@NonNull JavaContext context, @NonNull MethodInvocation node) {
    Iterator<Expression> arguments = node.astArguments().iterator();
    Expression argument = arguments.next();

    JavaParser.ResolvedNode resolved = context.resolve(node);
    JavaParser.ResolvedMethod method = (JavaParser.ResolvedMethod) resolved;

    JavaParser.ResolvedAnnotation layoutParamAnnotation = method.getParameterAnnotation("android.support.annotation.LayoutRes", 0);
    if (layoutParamAnnotation != null) {
        return argument.toString();
    } else {
        return null;
    }

}
 
开发者ID:ljfxyj2008,项目名称:CustomLintDemo,代码行数:23,代码来源:ViewHolderItemNameDetector.java

示例12: report

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
private static void report(JavaContext context, MethodInvocation node) {
    // Make sure the call is on a view
    JavaParser.ResolvedNode resolved = context.resolve(node);
    if (resolved instanceof JavaParser.ResolvedMethod) {
        JavaParser.ResolvedMethod method = (JavaParser.ResolvedMethod) resolved;
        JavaParser.ResolvedClass containingClass = method.getContainingClass();
        if (!containingClass.isSubclassOf(CLASS_VIEW, false)) {
            return;
        }
    }

    String name = node.astName().astValue();
    String suggestion = Character.toLowerCase(name.charAt(2)) + name.substring(3);
    String message = String.format(
            // Keep in sync with {@link #getOldValue} and {@link #getNewValue} below!
            "Suspicious method call; should probably call \"`%1$s`\" rather than \"`%2$s`\"",
            suggestion, name);
    context.report(ISSUE, node, context.getLocation(node.astName()), message);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:20,代码来源:WrongCallDetector.java

示例13: visitMethodInvocation

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
@Override
public boolean visitMethodInvocation(@NonNull MethodInvocation call) {
    JavaParser.ResolvedNode resolved = mContext.resolve(call);
    if (resolved instanceof JavaParser.ResolvedMethod) {
        if (!checkTransactionHasACommit(mContext, call)) {
            showCommitMessage(mContext, call);
        }
    }

    return false;
}
 
开发者ID:massivedisaster,项目名称:ActivityFragmentManager,代码行数:12,代码来源:CommitTransaction.java

示例14: parseContainingClass

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
public static JavaParser.ResolvedClass parseContainingClass(
        @NonNull JavaContext context, @NonNull Node node) {
    if (null == context || null == node) {
        return null;
    }

    JavaParser.ResolvedNode resolvedNode = null;
    try {
        resolvedNode = context.resolve(node);
    } catch (Exception e) {
        // TODO
    }

    if (resolvedNode instanceof JavaParser.ResolvedMethod) {
        return ((JavaParser.ResolvedMethod)resolvedNode).getContainingClass();
    } else if (resolvedNode instanceof JavaParser.ResolvedField) {
        return ((JavaParser.ResolvedField)resolvedNode).getContainingClass();
    } else if (resolvedNode instanceof JavaParser.ResolvedClass) {
        return ((JavaParser.ResolvedClass)resolvedNode).getContainingClass();
    } else {
        ClassDeclaration classDeclaration = JavaContext.findSurroundingClass(node);
        if (null == classDeclaration) {
            return null;
        }
        resolvedNode = context.resolve(classDeclaration);
        return (resolvedNode instanceof JavaParser.ResolvedClass) ?
                (JavaParser.ResolvedClass)resolvedNode : null;
    }
}
 
开发者ID:squirrel-explorer,项目名称:eagleeye-android,代码行数:30,代码来源:NodeUtils.java

示例15: visitVariableDeclaration

import com.android.tools.lint.client.api.JavaParser; //导入方法依赖的package包/类
@Override
public boolean visitVariableDeclaration(VariableDeclaration node) {
    JavaParser.ResolvedNode resolved = mContext.resolve(JavaContext.findSurroundingClass(node));
    JavaParser.ResolvedClass sorroundingClass = (JavaParser.ResolvedClass) resolved;

    if (sorroundingClass.getName().contains(".R.")
            || sorroundingClass.getName().endsWith(".BuildConfig")) {
        return true;
    }

    VariableDefinition definition = node.astDefinition();
    Modifiers modifiers = definition.astModifiers();

    if (modifiers.isStatic() && modifiers.isFinal()){
        StrictListAccessor<VariableDefinitionEntry, VariableDefinition> variableDefinition = definition.astVariables();
        String variableName = variableDefinition.first().astName().toString();
        if (!variableName.equals(variableName.toUpperCase())){
            mContext.report(ISSUE,
                    node,
                    mContext.getLocation(node),
                    "A constant should be named with only UPPER CASE letter and underline.");
        }


    }

    return super.visitVariableDeclaration(node);
}
 
开发者ID:ljfxyj2008,项目名称:CustomLintDemo,代码行数:29,代码来源:ConstantNameDetector.java


注:本文中的com.android.tools.lint.client.api.JavaParser.ResolvedNode方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。