Package org.aspectj.ajdt.internal.compiler.lookup

Examples of org.aspectj.ajdt.internal.compiler.lookup.EclipseFactory


      }});
  }
 
  // PTWIMPL Generate getInstance method
  private void generatePerTypeWithinGetInstanceMethod(ClassFile classFile) {
      final EclipseFactory world = EclipseFactory.fromScopeLookupEnvironment(this.scope);
      generateMethod(classFile, AjcMemberMaker.perTypeWithinGetInstance(world.fromBinding(binding)),
      new BodyGenerator() {
        public void generate(CodeStream codeStream) {
          ExceptionLabel exc = new ExceptionLabel(codeStream,world.makeTypeBinding(UnresolvedType.JAVA_LANG_EXCEPTION));
          exc.placeStart();
          codeStream.aload_0();
          codeStream.ldc(NameMangler.perTypeWithinLocalAspectOf(typeX));
          codeStream.aconst_null();
          codeStream.invokevirtual(
              new MethodBinding(
                  0,
                  "getDeclaredMethod".toCharArray(),
                  world.makeTypeBinding(UnresolvedType.forSignature("Ljava/lang/reflect/Method;")), // return type
                   new TypeBinding[]{world.makeTypeBinding(UnresolvedType.forSignature("Ljava/lang/String;")),
                                 world.makeTypeBinding(UnresolvedType.forSignature("[Ljava/lang/Class;"))},
                  new ReferenceBinding[0],
                  (ReferenceBinding)world.makeTypeBinding(UnresolvedType.JAVA_LANG_CLASS)));
          codeStream.astore_1();
          codeStream.aload_1();
          codeStream.aconst_null();
          codeStream.aconst_null();
          codeStream.invokevirtual(
              new MethodBinding(
                  0,
                  "invoke".toCharArray(),
                  world.makeTypeBinding(UnresolvedType.OBJECT),
                  new TypeBinding[]{world.makeTypeBinding(UnresolvedType.OBJECT),world.makeTypeBinding(UnresolvedType.forSignature("[Ljava/lang/Object;"))},
                  new ReferenceBinding[0],
                  (ReferenceBinding)world.makeTypeBinding(UnresolvedType.JAVA_LANG_REFLECT_METHOD)));
          codeStream.checkcast(world.makeTypeBinding(typeX));
          codeStream.astore_2();
          codeStream.aload_2();
          exc.placeEnd();
          codeStream.areturn();
          exc.place();
View Full Code Here


          codeStream.areturn();
        }});
    }
 
  private void generatePerTypeWithinCreateAspectInstanceMethod(ClassFile classFile) {
    final EclipseFactory world = EclipseFactory.fromScopeLookupEnvironment(this.scope);
    generateMethod(classFile, AjcMemberMaker.perTypeWithinCreateAspectInstance(world.fromBinding(binding)),
    new BodyGenerator() {
      public void generate(CodeStream codeStream) {
       
        codeStream.new_(world.makeTypeBinding(typeX));
        codeStream.dup();
        codeStream.invokespecial(new MethodBinding(0, "<init>".toCharArray(),
            BaseTypes.VoidBinding, new TypeBinding[0],
            new ReferenceBinding[0], binding));
        codeStream.astore_1();
        codeStream.aload_1();
        codeStream.aload_0();
        codeStream.putfield(world.makeFieldBinding(AjcMemberMaker.perTypeWithinWithinTypeField(typeX,typeX)));
        codeStream.aload_1();
        codeStream.areturn();
      }});
  }
View Full Code Here

  }
 

   
  private void generatePerSingletonAspectOfMethod(ClassFile classFile) {
    final EclipseFactory world = EclipseFactory.fromScopeLookupEnvironment(this.scope);
    generateMethod(classFile, aspectOfMethod, new BodyGenerator() {
      public void generate(CodeStream codeStream) {
        // Old style aspectOf() method which confused decompilers
//        // body starts here
//        codeStream.getstatic(world.makeFieldBinding(AjcMemberMaker.perSingletonField(
//            typeX)));
//        Label isNull = new Label(codeStream);
//        codeStream.dup();
//        codeStream.ifnull(isNull);
//        codeStream.areturn();
//        isNull.place();
//       
//        codeStream.incrStackSize(+1);  // the dup trick above confuses the stack counter
//        codeStream.new_(world.makeTypeBinding(AjcMemberMaker.NO_ASPECT_BOUND_EXCEPTION));
//        codeStream.dup();
//        codeStream.ldc(typeX.getNameAsIdentifier());
//        codeStream.getstatic(initFailureField);
//        codeStream.invokespecial(world.makeMethodBindingForCall(
//          AjcMemberMaker.noAspectBoundExceptionInitWithCause()
//        ));
//        codeStream.athrow();
//        // body ends here

        // The stuff below generates code that looks like this:
        /*
         * if (ajc$perSingletonInstance == null)
         *   throw new NoAspectBoundException("A", ajc$initFailureCause);
         * else
         *   return ajc$perSingletonInstance;
         */
                // body starts here (see end of each line for what it is doing!)
        FieldBinding fb = world.makeFieldBinding(AjcMemberMaker.perSingletonField(typeX));
        codeStream.getstatic(fb);                                                              // GETSTATIC
        Label isNonNull = new Label(codeStream);
        codeStream.ifnonnull(isNonNull);                                                       // IFNONNULL
        codeStream.new_(world.makeTypeBinding(AjcMemberMaker.NO_ASPECT_BOUND_EXCEPTION));      // NEW
        codeStream.dup();                                                                      // DUP
        codeStream.ldc(typeX.getNameAsIdentifier());                                           // LDC
        codeStream.getstatic(initFailureField);                                                // GETSTATIC
        codeStream.invokespecial(world.makeMethodBindingForCall(
                  AjcMemberMaker.noAspectBoundExceptionInitWithCause()));            // INVOKESPECIAL
        codeStream.athrow();                                                                   // ATHROW
        isNonNull.place();
        codeStream.getstatic(fb);                                                              // GETSTATIC
        codeStream.areturn();                                                                  // ARETURN
View Full Code Here

        // body ends here
      }});
  }
 
  private void generatePerSingletonHasAspectMethod(ClassFile classFile) {
    final EclipseFactory world = EclipseFactory.fromScopeLookupEnvironment(this.scope);
    generateMethod(classFile, hasAspectMethod, new BodyGenerator() {
      public void generate(CodeStream codeStream) {
        // body starts here
        codeStream.getstatic(world.makeFieldBinding(AjcMemberMaker.perSingletonField(
            typeX)));
        Label isNull = new Label(codeStream);
        codeStream.ifnull(isNull);
        codeStream.iconst_1();
        codeStream.ireturn();
View Full Code Here

 
 
  private void generatePerSingletonAjcClinitMethod(
    ClassFile classFile)
  {
    final EclipseFactory world = EclipseFactory.fromScopeLookupEnvironment(this.scope);
    generateMethod(classFile, world.makeMethodBinding(AjcMemberMaker.ajcPostClinitMethod(
        world.fromBinding(binding))),
    new BodyGenerator() {
      public void generate(CodeStream codeStream) {
        // body starts here
        codeStream.new_(binding);
        codeStream.dup();
        codeStream.invokespecial(
          new MethodBinding(0, "<init>".toCharArray(),
            BaseTypes.VoidBinding, new TypeBinding[0],
            new ReferenceBinding[0], binding));
         
        codeStream.putstatic(
          world.makeFieldBinding(
                AjcMemberMaker.perSingletonField(
                  typeX)));
          codeStream.return_();
        // body ends here
      }});
View Full Code Here

      }
    }
 

  private void buildPerClause(ClassScope scope) {
    EclipseFactory world = EclipseFactory.fromScopeLookupEnvironment(scope);
   
    if (perClause == null) {
      PerClause.Kind kind = lookupPerClauseKind(binding.superclass);
      if (kind == null) {
        perClause = new PerSingleton();
      } else {
        perClause = new PerFromSuper(kind);
      }
    }
   
    aspectAttribute = new AjAttribute.Aspect(perClause);
   
    if (ignoreFurtherInvestigation) return; //???
   
   
    if (!isAbstract()) {
      if (perClause.getKind() == PerClause.SINGLETON) {
        aspectOfMethod = AjcMemberMaker.perSingletonAspectOfMethod(typeX);
        hasAspectMethod = AjcMemberMaker.perSingletonHasAspectMethod(typeX);   
      } else if (perClause.getKind() == PerClause.PERCFLOW) {
        aspectOfMethod = AjcMemberMaker.perCflowAspectOfMethod(typeX);
        hasAspectMethod = AjcMemberMaker.perCflowHasAspectMethod(typeX);   
      } else if (perClause.getKind() == PerClause.PEROBJECT) {
        aspectOfMethod = AjcMemberMaker.perObjectAspectOfMethod(typeX);
        hasAspectMethod = AjcMemberMaker.perObjectHasAspectMethod(typeX);
      } else if (perClause.getKind() == PerClause.PERTYPEWITHIN) {
          // PTWIMPL Use these variants of aspectOf()/hasAspect()
        aspectOfMethod  = AjcMemberMaker.perTypeWithinAspectOfMethod(typeX,world.getWorld().isInJava5Mode());
        hasAspectMethod = AjcMemberMaker.perTypeWithinHasAspectMethod(typeX,world.getWorld().isInJava5Mode());
      } else {
        throw new RuntimeException("bad per clause: " + perClause)
      }
     
      binding.addMethod(world.makeMethodBinding(aspectOfMethod));
      binding.addMethod(world.makeMethodBinding(hasAspectMethod));
    }
    resolvePerClause(); //XXX might be too soon for some error checking
  }
View Full Code Here

            }
        }       
    }
   
    private ResolvedMember getPointcutDeclaration(ReferencePointcut rp, MethodDeclaration declaration) {
      EclipseFactory factory = ((AjLookupEnvironment)declaration.scope.environment()).factory;
    World world = factory.getWorld();
    UnresolvedType onType = rp.onType;
    if (onType == null) {
      if (declaration.binding != null) {
          Member member = factory.makeResolvedMember(declaration.binding);
        onType = member.getDeclaringType();
      } else {
        return null;
      }
    }
View Full Code Here

  protected void genBytecodeInfo(MethodDeclaration methodDeclaration, IProgramElement peNode) {
    if (methodDeclaration.binding != null) {
      String memberName = "";
      String memberBytecodeSignature = "";
      try {
          EclipseFactory factory = ((AjLookupEnvironment)methodDeclaration.scope.environment()).factory;
        Member member = factory.makeResolvedMember(methodDeclaration.binding);
        memberName = member.getName();
        memberBytecodeSignature = member.getSignature();
      } catch (BCException bce) {  // bad type name
        memberName = "<undefined>";
      } catch (NullPointerException npe) {
View Full Code Here

    // Fix to enable us to anchor things from ctor nodes
    if (constructorDeclaration.binding != null) {
      String memberName = "";
      String memberBytecodeSignature = "";
      try {
          EclipseFactory factory = ((AjLookupEnvironment)constructorDeclaration.scope.environment()).factory;
        Member member = factory.makeResolvedMember(constructorDeclaration.binding);
        memberName = member.getName();
        memberBytecodeSignature = member.getSignature();
      } catch (BCException bce) {  // bad type name
        memberName = "<undefined>";
      } catch (NullPointerException npe) {
View Full Code Here

TOP

Related Classes of org.aspectj.ajdt.internal.compiler.lookup.EclipseFactory

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.