diff options
author | Yohann Roussel <yroussel@google.com> | 2014-04-15 16:03:14 +0200 |
---|---|---|
committer | Yohann Roussel <yroussel@google.com> | 2015-02-03 11:44:41 +0100 |
commit | 4e6f092260688daeab0d55223cc4c2ea091ce287 (patch) | |
tree | 69249ba733948225ec22db310b5a76301bd1816f /jack | |
parent | 891e26ba9d55d1cbc6b0bd37289dd9e7db70b5ed (diff) | |
download | toolchain_jack-4e6f092260688daeab0d55223cc4c2ea091ce287.tar.gz toolchain_jack-4e6f092260688daeab0d55223cc4c2ea091ce287.tar.bz2 toolchain_jack-4e6f092260688daeab0d55223cc4c2ea091ce287.zip |
Read only the start of jack file to create JDCOI.
Change-Id: I3d7fa4da1e1cdb0a4435276d3a38baf79bb17881
Diffstat (limited to 'jack')
15 files changed, 189 insertions, 112 deletions
diff --git a/jack/prebuilts/core-stubs-mini.jack b/jack/prebuilts/core-stubs-mini.jack Binary files differindex 2b018f50..f8a09603 100644 --- a/jack/prebuilts/core-stubs-mini.jack +++ b/jack/prebuilts/core-stubs-mini.jack diff --git a/jack/prebuilts/core-stubs-mini.jar b/jack/prebuilts/core-stubs-mini.jar Binary files differindex d47b47e3..cfdfeeee 100644 --- a/jack/prebuilts/core-stubs-mini.jar +++ b/jack/prebuilts/core-stubs-mini.jar diff --git a/jack/src/com/android/jack/Jack.java b/jack/src/com/android/jack/Jack.java index 86a03760..049bcb2f 100644 --- a/jack/src/com/android/jack/Jack.java +++ b/jack/src/com/android/jack/Jack.java @@ -349,7 +349,7 @@ public abstract class Jack { .addArgType(InputJackLibrary.class) .addArgType(JPhantomLookup.class) .bypassAccessibility() - .addDefaultValue("structure"); + .addDefaultValue("type"); @Nonnull public static final BooleanPropertyId STRICT_CLASSPATH = BooleanPropertyId.create( diff --git a/jack/src/com/android/jack/ir/impl/EcjSourceTypeLoader.java b/jack/src/com/android/jack/ir/impl/EcjSourceTypeLoader.java index c147fdd0..92ff403e 100644 --- a/jack/src/com/android/jack/ir/impl/EcjSourceTypeLoader.java +++ b/jack/src/com/android/jack/ir/impl/EcjSourceTypeLoader.java @@ -412,6 +412,11 @@ public class EcjSourceTypeLoader implements ClassOrInterfaceLoader { } } + @Override + public void ensureSourceInfo(@Nonnull JDefinedClassOrInterface loaded) { + // done at creation + } + private boolean isLoaded(@Nonnull Scope range) { return (loadStatus & range.getMask()) != 0; } diff --git a/jack/src/com/android/jack/jayce/FullPackageLoader.java b/jack/src/com/android/jack/jayce/FullPackageLoader.java index 7625af14..50f68bdf 100644 --- a/jack/src/com/android/jack/jayce/FullPackageLoader.java +++ b/jack/src/com/android/jack/jayce/FullPackageLoader.java @@ -25,7 +25,8 @@ import com.android.sched.vfs.VPath; import javax.annotation.Nonnull; -@ImplementationName(iface = JaycePackageLoader.class, name = "full") +@ImplementationName(iface = JaycePackageLoader.class, name = "full", description = +"always read full information") class FullPackageLoader extends JaycePackageLoader { public FullPackageLoader(@Nonnull InputJackLibrary inputJackLibrary, diff --git a/jack/src/com/android/jack/jayce/JayceClassOrInterfaceLoader.java b/jack/src/com/android/jack/jayce/JayceClassOrInterfaceLoader.java index f2a63ff8..18262698 100644 --- a/jack/src/com/android/jack/jayce/JayceClassOrInterfaceLoader.java +++ b/jack/src/com/android/jack/jayce/JayceClassOrInterfaceLoader.java @@ -23,6 +23,7 @@ import com.android.jack.ir.ast.JDefinedAnnotation; import com.android.jack.ir.ast.JDefinedClassOrInterface; import com.android.jack.ir.ast.JPackage; import com.android.jack.ir.ast.JSession; +import com.android.jack.ir.formatter.TypePackageAndMethodFormatter; import com.android.jack.library.HasInputLibrary; import com.android.jack.library.InputJackLibrary; import com.android.jack.library.InputLibrary; @@ -64,6 +65,11 @@ public class JayceClassOrInterfaceLoader extends AbtractClassOrInterfaceLoader i HasInputLibrary { @Nonnull + private static final StatisticId<Counter> NNODE_MINI_LOAD = new StatisticId< + Counter>("jayce.type.load", "Jayce file partial load", + CounterImpl.class, Counter.class); + + @Nonnull private static final StatisticId<Percent> NNODE_RELOAD = new StatisticId< Percent>("jayce.reload", "Jayce file reload versus total jayce file load", PercentImpl.class, Percent.class); @@ -155,14 +161,11 @@ public class JayceClassOrInterfaceLoader extends AbtractClassOrInterfaceLoader i @Nonnull JDefinedClassOrInterface load() throws LibraryFormatException, LibraryIOException { - DeclaredTypeNode type = getNNode(NodeLevel.TYPES); - String expectedSignature = Jack.getLookupFormatter().getName(enclosingPackage, simpleName); - if (!type.getSignature().equals(expectedSignature)) { - logger.log(Level.SEVERE, "Library " + inputJackLibrary.getLocation().getDescription() - + " is invalid: wrong type in '" + source + "', found '" + type.getSignature() - + "' while expecting '" + expectedSignature + "'"); - throw new LibraryFormatException(inputJackLibrary.getLocation()); + if (defaultLoadLevel == NodeLevel.TYPES) { + tracer.getStatistic(NNODE_MINI_LOAD).incValue(); } + DeclaredTypeNode type = getNNode(NodeLevel.TYPES); + assert checkName(type.getSignature()); JDefinedClassOrInterface jType = type.create(enclosingPackage, this); return jType; } @@ -186,10 +189,7 @@ public class JayceClassOrInterfaceLoader extends AbtractClassOrInterfaceLoader i InputStream in = null; try { in = new BufferedInputStream(source.openRead()); - NodeLevel loadLevel = defaultLoadLevel; - if (!loadLevel.keep(minimumLevel)) { - loadLevel = minimumLevel; - } + NodeLevel loadLevel = getLevelForLoading(minimumLevel); type = JayceReaderFactory.get(inputJackLibrary, in).readType(loadLevel); nnode = new SoftReference<DeclaredTypeNode>(type); } catch (IOException e) { @@ -253,4 +253,28 @@ public class JayceClassOrInterfaceLoader extends AbtractClassOrInterfaceLoader i public InputLibrary getInputLibrary() { return inputJackLibrary; } + + private boolean checkName(@Nonnull String signature) { + TypePackageAndMethodFormatter lookupFormatter = Jack.getLookupFormatter(); + String expectedSignature = lookupFormatter.getName(enclosingPackage, simpleName); + if (!signature.equals(expectedSignature)) { + throw new AssertionError("Wrong type in '" + source + "', found '" + + signature + "' while expecting '" + expectedSignature + "'"); + } + return true; + } + + /** + * Get the appropriate {@link NodeLevel} for loading a NNode according to the default load level + * and the required data. + * @param requiredData level of data required. + */ + @Nonnull + private NodeLevel getLevelForLoading(@Nonnull NodeLevel requiredData) { + NodeLevel loadLevel = defaultLoadLevel; + if (!loadLevel.keep(requiredData)) { + loadLevel = requiredData; + } + return loadLevel; + } } diff --git a/jack/src/com/android/jack/jayce/StructurePackageLoader.java b/jack/src/com/android/jack/jayce/StructurePackageLoader.java index ae0276c1..1ef1e0a2 100644 --- a/jack/src/com/android/jack/jayce/StructurePackageLoader.java +++ b/jack/src/com/android/jack/jayce/StructurePackageLoader.java @@ -25,7 +25,8 @@ import com.android.sched.vfs.VPath; import javax.annotation.Nonnull; -@ImplementationName(iface = JaycePackageLoader.class, name = "structure") +@ImplementationName(iface = JaycePackageLoader.class, name = "structure", description = +"start by always reading structure information (ie members, annotations, markers etc)") class StructurePackageLoader extends JaycePackageLoader { public StructurePackageLoader(@Nonnull InputJackLibrary inputJackLibrary, diff --git a/jack/src/com/android/jack/jayce/TypePackageLoader.java b/jack/src/com/android/jack/jayce/TypePackageLoader.java new file mode 100644 index 00000000..fc8b91d6 --- /dev/null +++ b/jack/src/com/android/jack/jayce/TypePackageLoader.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.jack.jayce; + +import com.android.jack.library.FileType; +import com.android.jack.library.FileTypeDoesNotExistException; +import com.android.jack.library.InputJackLibrary; +import com.android.jack.lookup.JPhantomLookup; +import com.android.sched.util.codec.ImplementationName; +import com.android.sched.vfs.VPath; + +import javax.annotation.Nonnull; + +@ImplementationName(iface = JaycePackageLoader.class, name = "type", description = +"start by only reading type and name information") +class TypePackageLoader extends JaycePackageLoader { + + public TypePackageLoader(@Nonnull InputJackLibrary inputJackLibrary, + @Nonnull JPhantomLookup lookup) throws FileTypeDoesNotExistException { + super(inputJackLibrary, inputJackLibrary.getDir(FileType.JAYCE, VPath.ROOT), lookup, + NodeLevel.TYPES); + } +} diff --git a/jack/src/com/android/jack/jayce/v0002/io/JayceInternalReaderImpl.java b/jack/src/com/android/jack/jayce/v0002/io/JayceInternalReaderImpl.java index 0871c691..76602f21 100644 --- a/jack/src/com/android/jack/jayce/v0002/io/JayceInternalReaderImpl.java +++ b/jack/src/com/android/jack/jayce/v0002/io/JayceInternalReaderImpl.java @@ -217,7 +217,7 @@ public class JayceInternalReaderImpl implements JayceInternalReader { + nodeClass.getSimpleName() + " was expected."); } - if (node instanceof HasSourceInfo) { + if (nodeLevel != NodeLevel.TYPES && node instanceof HasSourceInfo) { NSourceInfo sourceInfo = new NSourceInfo(); sourceInfo.fileName = fileName; sourceInfo.startLine = startLine; @@ -226,11 +226,15 @@ public class JayceInternalReaderImpl implements JayceInternalReader { if (node instanceof HasCatchBlockIds) { ((HasCatchBlockIds) node).setCatchBlockIds(new ArrayList<String>(currentCatchBlockList)); } + /* readContent can stop in the middle of the node data when nodeLevel is NodeLevel.TYPES + * meaning we can't read anything after and we have to skip source info. + */ node.readContent(this); - readSourceInfoEnd(node); - assert !(node instanceof NMethod) || currentCatchBlockList.isEmpty(); - tokenizer.readClose(); - + if (nodeLevel != NodeLevel.TYPES) { + readSourceInfoEnd(node); + assert !(node instanceof NMethod) || currentCatchBlockList.isEmpty(); + tokenizer.readClose(); + } if (nodeLevel.keep(token.getNodeLevel())) { if (statistic != null) { statistic.addFalse(); diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationType.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationType.java index 99312064..57f27ffd 100644 --- a/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationType.java +++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationType.java @@ -79,14 +79,11 @@ public class NAnnotationType extends NInterfaceType { public JDefinedAnnotation create(@Nonnull JPackage enclosingPackage, @Nonnull JayceClassOrInterfaceLoader loader) { assert signature != null; - assert sourceInfo != null; assert retentionPolicy != null; String binaryName = NamingTools.getClassBinaryNameFromDescriptor(signature); String simpleName = NamingTools.getSimpleClassNameFromBinaryName(binaryName); - SourceInfo jSourceInfo = sourceInfo.exportAsJast( - new ExportSession(loader.getLookup(), enclosingPackage.getSession(), NodeLevel.STRUCTURE)); JDefinedAnnotation jInterfaceType = - new JDefinedAnnotation(jSourceInfo, simpleName, modifiers, enclosingPackage, loader); + new JDefinedAnnotation(SourceInfo.UNKNOWN, simpleName, modifiers, enclosingPackage, loader); jInterfaceType.setRetentionPolicy(retentionPolicy); return jInterfaceType; } @@ -101,6 +98,7 @@ public class NAnnotationType extends NInterfaceType { ExportSession exportSession = new ExportSession(loader.getLookup(), loading.getSession(), NodeLevel.STRUCTURE); exportSession.setCurrentType(jInterfaceType); + loading.setSourceInfo(sourceInfo.exportAsJast(exportSession)); for (String superInterface : superInterfaces) { jInterfaceType.addImplements( exportSession.getLookup().getInterface(superInterface)); @@ -150,13 +148,15 @@ public class NAnnotationType extends NInterfaceType { retentionPolicy = in.readRetentionPolicyEnum(); modifiers = in.readInt(); signature = in.readId(); - superInterfaces = in.readIds(); - enclosingType = in.readId(); - inners = in.readIds(); - fields = in.readNodes(NField.class); - methods = in.readNodes(NMethod.class); - annotations = in.readNodes(NAnnotationLiteral.class); - markers = in.readNodes(NMarker.class); + if (level != NodeLevel.TYPES) { + superInterfaces = in.readIds(); + enclosingType = in.readId(); + inners = in.readIds(); + fields = in.readNodes(NField.class); + methods = in.readNodes(NMethod.class); + annotations = in.readNodes(NAnnotationLiteral.class); + markers = in.readNodes(NMarker.class); + } } @Nonnull diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NClassType.java b/jack/src/com/android/jack/jayce/v0002/nodes/NClassType.java index 50997dea..62bdf144 100644 --- a/jack/src/com/android/jack/jayce/v0002/nodes/NClassType.java +++ b/jack/src/com/android/jack/jayce/v0002/nodes/NClassType.java @@ -114,13 +114,10 @@ public class NClassType extends NDeclaredType { public JDefinedClass create(@Nonnull JPackage enclosingPackage, @Nonnull JayceClassOrInterfaceLoader loader) { assert signature != null; - assert sourceInfo != null; String binaryName = NamingTools.getClassBinaryNameFromDescriptor(signature); String simpleName = NamingTools.getSimpleClassNameFromBinaryName(binaryName); - SourceInfo jSourceInfo = sourceInfo.exportAsJast( - new ExportSession(loader.getLookup(), enclosingPackage.getSession(), NodeLevel.STRUCTURE)); JDefinedClass jClassType = - new JDefinedClass(jSourceInfo, simpleName, modifiers, enclosingPackage, loader); + new JDefinedClass(SourceInfo.UNKNOWN, simpleName, modifiers, enclosingPackage, loader); return jClassType; } @@ -134,6 +131,7 @@ public class NClassType extends NDeclaredType { ExportSession exportSession = new ExportSession(loader.getLookup(), loading.getSession(), NodeLevel.STRUCTURE); exportSession.setCurrentType(jClassType); + loading.setSourceInfo(sourceInfo.exportAsJast(exportSession)); if (superClass != null) { jClassType.setSuperClass(exportSession.getLookup().getClass(superClass)); } @@ -203,16 +201,18 @@ public class NClassType extends NDeclaredType { level = in.getNodeLevel(); modifiers = in.readInt(); signature = in.readId(); - superClass = in.readId(); - superInterfaces = in.readIds(); - enclosingType = in.readId(); - enclosingMethodClass = in.readId(); - enclosingMethod = in.readId(); - inners = in.readIds(); - fields = in.readNodes(NField.class); - methods = in.readNodes(NMethod.class); - annotations = in.readNodes(NAnnotationLiteral.class); - markers = in.readNodes(NMarker.class); + if (level != NodeLevel.TYPES) { + superClass = in.readId(); + superInterfaces = in.readIds(); + enclosingType = in.readId(); + enclosingMethodClass = in.readId(); + enclosingMethod = in.readId(); + inners = in.readIds(); + fields = in.readNodes(NField.class); + methods = in.readNodes(NMethod.class); + annotations = in.readNodes(NAnnotationLiteral.class); + markers = in.readNodes(NMarker.class); + } } @Nonnull diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NEnumType.java b/jack/src/com/android/jack/jayce/v0002/nodes/NEnumType.java index d89f5b0a..371f1c10 100644 --- a/jack/src/com/android/jack/jayce/v0002/nodes/NEnumType.java +++ b/jack/src/com/android/jack/jayce/v0002/nodes/NEnumType.java @@ -72,20 +72,19 @@ public class NEnumType extends NClassType { public JDefinedEnum exportAsJast(@Nonnull ExportSession exportSession) { throw new UnsupportedOperationException(); } + @Override @Nonnull public JDefinedEnum create(@Nonnull JPackage enclosingPackage, @Nonnull JayceClassOrInterfaceLoader loader) { - assert sourceInfo != null; assert signature != null; String binaryName = NamingTools.getClassBinaryNameFromDescriptor(signature); String simpleName = NamingTools.getSimpleClassNameFromBinaryName(binaryName); - SourceInfo jSourceInfo = sourceInfo.exportAsJast( - new ExportSession(loader.getLookup(), enclosingPackage.getSession(), NodeLevel.STRUCTURE)); JDefinedEnum jEnumType = - new JDefinedEnum(jSourceInfo, simpleName, modifiers, enclosingPackage, loader); + new JDefinedEnum(SourceInfo.UNKNOWN, simpleName, modifiers, enclosingPackage, loader); return jEnumType; } + @Override public void updateToStructure(@Nonnull JDefinedClassOrInterface loading, @Nonnull JayceClassOrInterfaceLoader loader) throws JTypeLookupException, @@ -96,51 +95,48 @@ public class NEnumType extends NClassType { ExportSession exportSession = new ExportSession(loader.getLookup(), loading.getSession(), NodeLevel.STRUCTURE); exportSession.setCurrentType(jEnumType); - try { - exportSession.setCurrentType(jEnumType); - if (superClass != null) { - jEnumType.setSuperClass(exportSession.getLookup().getClass(superClass)); - } - for (String superInterface : superInterfaces) { - jEnumType.addImplements(exportSession.getLookup().getInterface(superInterface)); - } - if (enclosingType != null) { - jEnumType.setEnclosingType( - (JClassOrInterface) exportSession.getLookup().getType(enclosingType)); - } - if (enclosingMethodClass != null) { - assert enclosingMethod != null; - JClass enclosingMethodJClass = - exportSession.getLookup().getClass(enclosingMethodClass); - if (enclosingMethodJClass instanceof JDefinedClass) { - try { - jEnumType.setEnclosingMethod( - exportSession.getDeclaredMethod((JDefinedClass) enclosingMethodJClass, - enclosingMethod)); - } catch (JMethodLookupException e) { - // Method does not longer exists but anonymous already exists, could be trigger by - // build tricky mechanism, skip it to go ahead - } - } - } - for (String memberType : inners) { - jEnumType.addMemberType( - (JClassOrInterface) exportSession.getLookup().getType(memberType)); - } - for (NField field : fields) { - JField jField = field.exportAsJast(exportSession); - jEnumType.addField(jField); - } - for (NMethod method : methods) { - JMethod jMethod = method.exportAsJast(exportSession, loader); - jEnumType.addMethod(jMethod); - } - for (NAnnotationLiteral annotation : annotations) { - jEnumType.addAnnotation(annotation.exportAsJast(exportSession)); + loading.setSourceInfo(sourceInfo.exportAsJast(exportSession)); + + if (superClass != null) { + jEnumType.setSuperClass(exportSession.getLookup().getClass(superClass)); + } + for (String superInterface : superInterfaces) { + jEnumType.addImplements(exportSession.getLookup().getInterface(superInterface)); + } + if (enclosingType != null) { + jEnumType.setEnclosingType( + (JClassOrInterface) exportSession.getLookup().getType(enclosingType)); + } + if (enclosingMethodClass != null) { + assert enclosingMethod != null; + JClass enclosingMethodJClass = + exportSession.getLookup().getClass(enclosingMethodClass); + if (enclosingMethodJClass instanceof JDefinedClass) { + try { + jEnumType.setEnclosingMethod( + exportSession.getDeclaredMethod((JDefinedClass) enclosingMethodJClass, + enclosingMethod)); + } catch (JMethodLookupException e) { + // Method does not longer exists but anonymous already exists, could be trigger by + // build tricky mechanism, skip it to go ahead } - } finally { - exportSession.setCurrentType(null); } + } + for (String memberType : inners) { + jEnumType.addMemberType( + (JClassOrInterface) exportSession.getLookup().getType(memberType)); + } + for (NField field : fields) { + JField jField = field.exportAsJast(exportSession); + jEnumType.addField(jField); + } + for (NMethod method : methods) { + JMethod jMethod = method.exportAsJast(exportSession, loader); + jEnumType.addMethod(jMethod); + } + for (NAnnotationLiteral annotation : annotations) { + jEnumType.addAnnotation(annotation.exportAsJast(exportSession)); + } for (NMarker marker : markers) { jEnumType.addMarker(marker.exportAsJast(exportSession)); } @@ -169,16 +165,18 @@ public class NEnumType extends NClassType { level = in.getNodeLevel(); modifiers = in.readInt(); signature = in.readId(); - superClass = in.readId(); - superInterfaces = in.readIds(); - enclosingType = in.readId(); - enclosingMethodClass = in.readId(); - enclosingMethod = in.readId(); - inners = in.readIds(); - fields = in.readNodes(NField.class); - methods = in.readNodes(NMethod.class); - annotations = in.readNodes(NAnnotationLiteral.class); - markers = in.readNodes(NMarker.class); + if (level != NodeLevel.TYPES) { + superClass = in.readId(); + superInterfaces = in.readIds(); + enclosingType = in.readId(); + enclosingMethodClass = in.readId(); + enclosingMethod = in.readId(); + inners = in.readIds(); + fields = in.readNodes(NField.class); + methods = in.readNodes(NMethod.class); + annotations = in.readNodes(NAnnotationLiteral.class); + markers = in.readNodes(NMarker.class); + } } diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NInterfaceType.java b/jack/src/com/android/jack/jayce/v0002/nodes/NInterfaceType.java index 9b8ca0bc..e853f049 100644 --- a/jack/src/com/android/jack/jayce/v0002/nodes/NInterfaceType.java +++ b/jack/src/com/android/jack/jayce/v0002/nodes/NInterfaceType.java @@ -100,14 +100,11 @@ public class NInterfaceType extends NDeclaredType { @Nonnull public JDefinedInterface create(@Nonnull JPackage enclosingPackage, @Nonnull JayceClassOrInterfaceLoader loader) { - assert sourceInfo != null; assert signature != null; String binaryName = NamingTools.getClassBinaryNameFromDescriptor(signature); String simpleName = NamingTools.getSimpleClassNameFromBinaryName(binaryName); - SourceInfo jSourceInfo = sourceInfo.exportAsJast( - new ExportSession(loader.getLookup(), enclosingPackage.getSession(), NodeLevel.STRUCTURE)); JDefinedInterface jInterfaceType = - new JDefinedInterface(jSourceInfo, simpleName, modifiers, enclosingPackage, loader); + new JDefinedInterface(SourceInfo.UNKNOWN, simpleName, modifiers, enclosingPackage, loader); return jInterfaceType; } @@ -121,6 +118,7 @@ public class NInterfaceType extends NDeclaredType { ExportSession exportSession = new ExportSession(loader.getLookup(), loading.getSession(), NodeLevel.STRUCTURE); exportSession.setCurrentType(jInterfaceType); + loading.setSourceInfo(sourceInfo.exportAsJast(exportSession)); for (String superInterface : superInterfaces) { jInterfaceType.addImplements( exportSession.getLookup().getInterface(superInterface)); @@ -170,13 +168,15 @@ public class NInterfaceType extends NDeclaredType { level = in.getNodeLevel(); modifiers = in.readInt(); signature = in.readId(); - superInterfaces = in.readIds(); - enclosingType = in.readId(); - inners = in.readIds(); - fields = in.readNodes(NField.class); - methods = in.readNodes(NMethod.class); - annotations = in.readNodes(NAnnotationLiteral.class); - markers = in.readNodes(NMarker.class); + if (level != NodeLevel.TYPES) { + superInterfaces = in.readIds(); + enclosingType = in.readId(); + inners = in.readIds(); + fields = in.readNodes(NField.class); + methods = in.readNodes(NMethod.class); + annotations = in.readNodes(NAnnotationLiteral.class); + markers = in.readNodes(NMarker.class); + } } @Nonnull diff --git a/jack/src/com/android/jack/load/AbtractClassOrInterfaceLoader.java b/jack/src/com/android/jack/load/AbtractClassOrInterfaceLoader.java index 0e845846..6105b4a5 100644 --- a/jack/src/com/android/jack/load/AbtractClassOrInterfaceLoader.java +++ b/jack/src/com/android/jack/load/AbtractClassOrInterfaceLoader.java @@ -98,5 +98,10 @@ public abstract class AbtractClassOrInterfaceLoader implements ClassOrInterfaceL ensureAll(loaded); } + @Override + public void ensureSourceInfo(@Nonnull JDefinedClassOrInterface loaded) { + ensureAll(loaded); + } + protected abstract void ensureAll(@Nonnull JDefinedClassOrInterface loaded); } diff --git a/jack/src/com/android/jack/load/ClassOrInterfaceLoader.java b/jack/src/com/android/jack/load/ClassOrInterfaceLoader.java index 16601b91..c00bdb75 100644 --- a/jack/src/com/android/jack/load/ClassOrInterfaceLoader.java +++ b/jack/src/com/android/jack/load/ClassOrInterfaceLoader.java @@ -68,6 +68,8 @@ public interface ClassOrInterfaceLoader { public void ensureRetentionPolicy(@Nonnull JDefinedAnnotation loaded); + public void ensureSourceInfo(@Nonnull JDefinedClassOrInterface loaded); + @Nonnull public Location getLocation(@Nonnull JDefinedClassOrInterface loaded); } |