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


Java JavacElements.getTypeElement方法代码示例

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


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

示例1: warnIfDuplicate

import com.sun.tools.javac.model.JavacElements; //导入方法依赖的package包/类
private boolean warnIfDuplicate( AbstractSrcMethod method, SrcClass extendedType, DiagnosticListener<JavaFileObject> errorHandler, JavacTaskImpl javacTask )
{
  AbstractSrcMethod duplicate = findMethod( method, extendedType, new JavacTaskImpl[]{javacTask} );

  if( duplicate == null )
  {
    return false;
  }

  JavacElements elems = JavacElements.instance( javacTask.getContext() );
  Symbol.ClassSymbol sym = elems.getTypeElement( ((SrcClass)method.getOwner()).getName() );
  JavaFileObject file = sym.sourcefile;
  SrcAnnotationExpression anno = duplicate.getAnnotation( ExtensionMethod.class );
  if( anno != null )
  {
    errorHandler.report( new JavacDiagnostic( file.toUri().getScheme() == null ? null : new SourceJavaFileObject( file.toUri() ),
                                              Diagnostic.Kind.WARNING, 0, 0, 0, ExtIssueMsg.MSG_EXTENSION_DUPLICATION.get( method.signature(), ((SrcClass)method.getOwner()).getName(), anno.getArgument( ExtensionMethod.extensionClass ).getValue()) ) );
  }
  else
  {
    errorHandler.report( new JavacDiagnostic( file.toUri().getScheme() == null ? null : new SourceJavaFileObject( file.toUri() ),
                                              Diagnostic.Kind.WARNING, 0, 0, 0, ExtIssueMsg.MSG_EXTENSION_SHADOWS.get( method.signature(), ((SrcClass)method.getOwner()).getName(), extendedType.getName()) ) );
  }
  return true;
}
 
开发者ID:manifold-systems,项目名称:manifold,代码行数:26,代码来源:ExtCodeGen.java

示例2: getClassSymbol

import com.sun.tools.javac.model.JavacElements; //导入方法依赖的package包/类
public Pair<Symbol.ClassSymbol, JCTree.JCCompilationUnit> getClassSymbol( BasicJavacTask javacTask, String fqn )
{
  JavacElements elementUtils = JavacElements.instance( javacTask.getContext() );
  Symbol.ClassSymbol typeElement = elementUtils.getTypeElement( fqn );
  JavacTrees trees = JavacTrees.instance( javacTask.getContext() );
  TreePath path = trees.getPath( typeElement );
  if( path != null )
  {
    return new Pair<>( typeElement, (JCTree.JCCompilationUnit)path.getCompilationUnit() );
  }
  else
  {
    // TreePath is only applicable to a source file;
    // if fqn is not a source file, there is no compilation unit available
    return new Pair<>( typeElement, null );
  }
}
 
开发者ID:manifold-systems,项目名称:manifold,代码行数:18,代码来源:ClassSymbols.java

示例3: process

import com.sun.tools.javac.model.JavacElements; //导入方法依赖的package包/类
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    String expected = processingEnv.getOptions().get("output");
    Set<String> expectedElements = new HashSet<>(Arrays.asList(expected.split(System.getProperty("line.separator"))));
    Context context = ((JavacProcessingEnvironment) processingEnv).getContext();
    Symtab syms = Symtab.instance(context);

    for (Entry<String, String> e : MODULES_TO_CHECK_TO_SAMPLE_CLASS.entrySet()) {
        String module = e.getKey();
        ModuleElement mod = processingEnv.getElementUtils().getModuleElement(module);
        String visible = "visible:" + module + ":" + (mod != null);

        if (!expectedElements.contains(visible)) {
            throw new AssertionError("actual: " + visible + "; expected: " + expected);
        }

        JavacElements javacElements = JavacElements.instance(context);
        ClassSymbol unnamedClass = javacElements.getTypeElement(syms.unnamedModule, e.getValue());
        String unnamed = "cp.CP:" + module + ":" + (unnamedClass != null);

        if (!expectedElements.contains(unnamed)) {
            throw new AssertionError("actual: " + unnamed + "; expected: " + expected);
        }

        ModuleElement automaticMod = processingEnv.getElementUtils().getModuleElement("automatic");
        ClassSymbol automaticClass = javacElements.getTypeElement(automaticMod, e.getValue());
        String automatic = "automatic.Automatic:" + module + ":" + (automaticClass != null);

        if (!expectedElements.contains(automatic)) {
            throw new AssertionError("actual: " + automatic + "; expected: " + expected);
        }
    }

    return false;
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:36,代码来源:AddLimitMods.java

示例4: replaceCastExpression

import com.sun.tools.javac.model.JavacElements; //导入方法依赖的package包/类
private JCExpression replaceCastExpression( JCExpression expression, Type type )
{
  TreeMaker make = _tp.getTreeMaker();
  Symtab symbols = _tp.getSymtab();
  Names names = Names.instance( _tp.getContext() );
  JavacElements elementUtils = JavacElements.instance( _tp.getContext() );
  Symbol.ClassSymbol reflectMethodClassSym = elementUtils.getTypeElement( getClass().getName() );

  Symbol.MethodSymbol makeInterfaceProxyMethod = resolveMethod( expression.pos(), names.fromString( "assignStructuralIdentity" ), reflectMethodClassSym.type,
                                                                List.from( new Type[]{symbols.objectType, symbols.classType} ) );

  JavacElements javacElems = _tp.getElementUtil();
  ArrayList<JCExpression> newArgs = new ArrayList<>();
  newArgs.add( expression );
  JCTree.JCFieldAccess ifaceClassExpr = (JCTree.JCFieldAccess)memberAccess( make, javacElems, type.tsym.getQualifiedName().toString() + ".class" );
  ifaceClassExpr.type = symbols.classType;
  ifaceClassExpr.sym = symbols.classType.tsym;
  assignTypes( ifaceClassExpr.selected, type.tsym );
  newArgs.add( ifaceClassExpr );

  JCTree.JCMethodInvocation makeProxyCall = make.Apply( List.nil(), memberAccess( make, javacElems, ExtensionTransformer.class.getName() + ".assignStructuralIdentity" ), List.from( newArgs ) );
  makeProxyCall.type = symbols.objectType;
  JCTree.JCFieldAccess newMethodSelect = (JCTree.JCFieldAccess)makeProxyCall.getMethodSelect();
  newMethodSelect.sym = makeInterfaceProxyMethod;
  newMethodSelect.type = makeInterfaceProxyMethod.type;
  assignTypes( newMethodSelect.selected, reflectMethodClassSym );

  JCTypeCast castCall = make.TypeCast( symbols.objectType, makeProxyCall );
  castCall.type = symbols.objectType;

  return castCall;

}
 
开发者ID:manifold-systems,项目名称:manifold,代码行数:34,代码来源:ExtensionTransformer.java

示例5: process

import com.sun.tools.javac.model.JavacElements; //导入方法依赖的package包/类
@Override
public void process() {
    fieldsMap.clear();

    JavacElements utils = getEnvironment().getUtils();
    Symbol.ClassSymbol viewByIdType = utils.getTypeElement(ANNOTATION_CLASS_NAME);
    ViewWrapper viewWrapper = new ViewWrapper(utils);
    BindableWrapper bindableWrapper = new BindableWrapper(utils);

    Set<GField> allFields = getEnvironment().getGElementsAnnotatedWith(ViewById.class, GField.class);
    for (GField field : allFields) {
        JCTree.JCAnnotation annotation = field.extractAnnotation(viewByIdType);
        JCTree fieldType = field.getTree().getType();
        JCExpression value = annotation.getArguments().get(0);
        if (value instanceof JCAssign) {
            value = ((JCAssign) value).rhs;
        }
        if (!getEnvironment().getTypes().isSubtype(((Symbol.VarSymbol) field.getElement()).asType(), viewWrapper.getClassSymbol().asType())) {
            getEnvironment().getMessager().printMessage(Diagnostic.Kind.ERROR,
                    "Annotation " + viewByIdType.getSimpleName() + " can be applied only to field with type extended of View",
                    field.getElement());
        }

        field.getGClass().implementInBestParent(bindableWrapper.getClassSymbol(), allFields);

        field.getGClass().overrideMethod(bindableWrapper.getBindMethod(), true)
                .prependCode("this.%s = (%s) $p0.findViewById(%s);", field.getName(), fieldType, value);
        field.getGClass().overrideMethod(bindableWrapper.getUnbindMethod(), true)
                .prependCode("this.%s = null;", field.getName());

        Map<String, GField> classFieldsMap = fieldsMap.get(field.getGClass());
        if (classFieldsMap == null) {
            classFieldsMap = new HashMap<>();
            fieldsMap.put(field.getGClass(), classFieldsMap);
        }
        classFieldsMap.put(value.toString(), field);
    }
}
 
开发者ID:ixkor,项目名称:genaroid,代码行数:39,代码来源:ViewByIdPlugin.java

示例6: replaceStructuralCall

import com.sun.tools.javac.model.JavacElements; //导入方法依赖的package包/类
private JCTree replaceStructuralCall( JCTree.JCMethodInvocation theCall )
{
  JCExpression methodSelect = theCall.getMethodSelect();
  if( methodSelect instanceof JCTree.JCFieldAccess )
  {
    Symtab symbols = _tp.getSymtab();
    Names names = Names.instance( _tp.getContext() );
    JavacElements elementUtils = JavacElements.instance( _tp.getContext() );
    Symbol.ClassSymbol reflectMethodClassSym = elementUtils.getTypeElement( getClass().getName() );
    Symbol.MethodSymbol makeInterfaceProxyMethod = resolveMethod( theCall.pos(), names.fromString( "constructProxy" ), reflectMethodClassSym.type,
                                                                  List.from( new Type[]{symbols.objectType, symbols.classType} ) );

    JCTree.JCFieldAccess m = (JCTree.JCFieldAccess)methodSelect;
    TreeMaker make = _tp.getTreeMaker();
    JavacElements javacElems = _tp.getElementUtil();
    JCExpression thisArg = m.selected;

    ArrayList<JCExpression> newArgs = new ArrayList<>();
    newArgs.add( thisArg );
    JCTree.JCFieldAccess ifaceClassExpr = (JCTree.JCFieldAccess)memberAccess( make, javacElems, thisArg.type.tsym.getQualifiedName().toString() + ".class" );
    ifaceClassExpr.type = symbols.classType;
    ifaceClassExpr.sym = symbols.classType.tsym;
    assignTypes( ifaceClassExpr.selected, thisArg.type.tsym );
    newArgs.add( ifaceClassExpr );

    JCTree.JCMethodInvocation makeProxyCall = make.Apply( List.nil(), memberAccess( make, javacElems, ExtensionTransformer.class.getName() + ".constructProxy" ), List.from( newArgs ) );
    makeProxyCall.setPos( theCall.pos );
    makeProxyCall.type = thisArg.type;
    JCTree.JCFieldAccess newMethodSelect = (JCTree.JCFieldAccess)makeProxyCall.getMethodSelect();
    newMethodSelect.sym = makeInterfaceProxyMethod;
    newMethodSelect.type = makeInterfaceProxyMethod.type;
    assignTypes( newMethodSelect.selected, reflectMethodClassSym );

    JCTypeCast cast = make.TypeCast( thisArg.type, makeProxyCall );
    cast.type = thisArg.type;

    ((JCTree.JCFieldAccess)theCall.meth).selected = cast;
    return theCall;
  }
  return null;
}
 
开发者ID:manifold-systems,项目名称:manifold,代码行数:42,代码来源:ExtensionTransformer.java

示例7: BaseClassWrapper

import com.sun.tools.javac.model.JavacElements; //导入方法依赖的package包/类
public BaseClassWrapper(JavacElements utils, String classFullName) {
    this.utils = utils;
    this.classFullName = classFullName;
    classSymbol = utils.getTypeElement(classFullName);
}
 
开发者ID:ixkor,项目名称:genaroid,代码行数:6,代码来源:BaseClassWrapper.java

示例8: process

import com.sun.tools.javac.model.JavacElements; //导入方法依赖的package包/类
@Override
public void process() {
    JavacElements utils = getEnvironment().getUtils();
    Types types = getEnvironment().getTypes();
    Symbol.ClassSymbol instanceStateType = utils.getTypeElement(ANNOTATION_CLASS_NAME);
    BundleWrapper bundleWrapper = new BundleWrapper(getEnvironment());
    RestorableWrapper restorableWrapper = new RestorableWrapper(utils);

    Set<GField> allFields = getEnvironment().getGElementsAnnotatedWith(InstanceState.class, GField.class);
    for (GField field : allFields) {
        JCTree.JCAnnotation annotation = field.extractAnnotation(instanceStateType);
        Type fieldType = ((Symbol.VarSymbol) field.getElement()).asType();
        Symbol.MethodSymbol putMethod = bundleWrapper.getMethodForType(fieldType, false);
        Symbol.MethodSymbol getMethod = bundleWrapper.getMethodForType(fieldType, true);
        String fieldNameInBundle = "_gen_" + field.getGClass().getName() + "_" + field.getName();

        if (putMethod == null || getMethod == null) {
            getEnvironment().getMessager().printMessage(Diagnostic.Kind.ERROR,
                    "Can't found getter and putter for type of field " + field.getName(),
                    field.getElement());
            continue;
        }

        field.getGClass().implementInBestParent(restorableWrapper.getClassSymbol(), allFields);

        GMethod onSaveInstanceStateMethod = field.getGClass().overrideMethod(restorableWrapper.getSaveInstanceStateMethod(), true);
        onSaveInstanceStateMethod.prependCode("$p0.%s(\"%s\", this.%s);",
                putMethod.getSimpleName(), fieldNameInBundle, field.getName());

        GMethod onCreateMethod = field.getGClass().overrideMethod(restorableWrapper.getRestoreInstanceStateMethod(), true);
        String methodName = getMethod.getSimpleName().toString();
        String template;
        if (methodName.equals("getSerializable")) {
            template = "this.%s = (%s) $p0.%s(\"%s\");";
        } else if (methodName.equals("getParcelableArray")) {
            fieldType = types.elemtype(fieldType);
            template = "this.%s = net.xkor.genaroid.Utils.castParcelableArray(%s.class, $p0.%s(\"%s\"));";
        } else {
            template = "this.%s = $p0.%3$s(\"%4$s\");";
        }
        onCreateMethod.prependCode(template, field.getName(), fieldType, methodName, fieldNameInBundle);
    }
}
 
开发者ID:ixkor,项目名称:genaroid,代码行数:44,代码来源:InstanceStatePlugin.java


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