123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- /* *******************************************************************
- * Copyright (c) 2005 Contributors
- * All rights reserved.
- * This program and the accompanying materials are made available
- * under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Andy Clement promoted member type from AjState
- * ******************************************************************/
- package org.aspectj.ajdt.internal.core.builder;
-
- import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
- import org.aspectj.org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
- import org.aspectj.org.eclipse.jdt.internal.compiler.env.IBinaryAnnotation;
- import org.aspectj.org.eclipse.jdt.internal.compiler.env.IBinaryField;
- import org.aspectj.org.eclipse.jdt.internal.compiler.env.IBinaryMethod;
- import org.aspectj.org.eclipse.jdt.internal.compiler.env.IBinaryNestedType;
- import org.aspectj.org.eclipse.jdt.internal.compiler.env.IBinaryType;
-
- /**
- * Used to determine if a type has structurally changed during incremental compilation. At the end of compilation we create one of
- * these objects using the bytes for the class about to be woven. On a subsequent incremental compile we compare the new form of the
- * class with a previously stored CompactTypeStructureRepresentation instance. A structural change will indicate we need to do
- * recompile other dependent types.
- */
- public class CompactTypeStructureRepresentation implements IBinaryType {
- static char[][] NoInterface = CharOperation.NO_CHAR_CHAR;
- static IBinaryNestedType[] NoNestedType = new IBinaryNestedType[0];
- static IBinaryField[] NoField = new IBinaryField[0];
- static IBinaryMethod[] NoMethod = new IBinaryMethod[0];
-
- // this is the core state for comparison
- char[] className;
- int modifiers;
- char[] genericSignature;
- char[] superclassName;
- char[][] interfaces;
-
- char[] enclosingMethod;
-
- char[][][] missingTypeNames;
-
- // this is the extra state that enables us to be an IBinaryType
- char[] enclosingTypeName;
- boolean isLocal, isAnonymous, isMember;
- char[] sourceFileName;
- char[] fileName;
- char[] sourceName;
- long tagBits;
- boolean isBinaryType;
- IBinaryField[] binFields;
- IBinaryMethod[] binMethods;
- IBinaryNestedType[] memberTypes;
- IBinaryAnnotation[] annotations;
-
-
- public CompactTypeStructureRepresentation(ClassFileReader cfr, boolean isAspect) {
-
- this.enclosingTypeName = cfr.getEnclosingTypeName();
- this.isLocal = cfr.isLocal();
- this.isAnonymous = cfr.isAnonymous();
- this.isMember = cfr.isMember();
- this.sourceFileName = cfr.sourceFileName();
- this.fileName = cfr.getFileName();
- this.missingTypeNames = cfr.getMissingTypeNames();
- this.tagBits = cfr.getTagBits();
- this.enclosingMethod = cfr.getEnclosingMethod();
- this.isBinaryType = cfr.isBinaryType();
- this.binFields = cfr.getFields();
- if (binFields == null) {
- binFields = NoField;
- }
- this.binMethods = cfr.getMethods();
- if (binMethods == null) {
- binMethods = NoMethod;
- }
- // If we are an aspect we (for now) need to grab even the malformed inner type info as it
- // may be there because it refers to an ITD'd innertype. This needs to be improved - perhaps
- // using a real attribute against which memberTypes can be compared to see which are just
- // references and which were real declarations
- this.memberTypes = cfr.getMemberTypes(isAspect);
- this.annotations = cfr.getAnnotations();
- this.sourceName = cfr.getSourceName();
- this.className = cfr.getName(); // slashes...
- this.modifiers = cfr.getModifiers();
- this.genericSignature = cfr.getGenericSignature();
- // if (this.genericSignature.length == 0) {
- // this.genericSignature = null;
- // }
- this.superclassName = cfr.getSuperclassName(); // slashes...
- interfaces = cfr.getInterfaceNames();
-
- }
-
- public char[][][] getMissingTypeNames() {
- return missingTypeNames;
- }
-
- public char[] getEnclosingTypeName() {
- return enclosingTypeName;
- }
-
- public int getModifiers() {
- return modifiers;
- }
-
- public char[] getGenericSignature() {
- return genericSignature;
- }
-
- public char[] getEnclosingMethod() {
- return enclosingMethod;
- }
-
- public char[][] getInterfaceNames() {
- return interfaces;
- }
-
- public boolean isAnonymous() {
- return isAnonymous;
- }
-
- public char[] sourceFileName() {
- return sourceFileName;
- }
-
- public boolean isLocal() {
- return isLocal;
- }
-
- public boolean isMember() {
- return isMember;
- }
-
- public char[] getSuperclassName() {
- return superclassName;
- }
-
- public char[] getFileName() {
- return fileName;
- }
-
- public char[] getName() {
- return className;
- }
-
- public long getTagBits() {
- return tagBits;
- }
-
- public boolean isBinaryType() {
- return isBinaryType;
- }
-
- public IBinaryField[] getFields() {
- return binFields;
- }
-
- public IBinaryMethod[] getMethods() {
- return binMethods;
- }
-
- public IBinaryNestedType[] getMemberTypes() {
- return memberTypes;
- }
-
- public IBinaryAnnotation[] getAnnotations() {
- return annotations;
- }
-
- public char[] getSourceName() {
- return sourceName;
- }
-
- }
|