summaryrefslogtreecommitdiffstats
path: root/jack
diff options
context:
space:
mode:
authorYohann Roussel <yroussel@google.com>2014-04-15 16:03:14 +0200
committerYohann Roussel <yroussel@google.com>2015-02-03 11:44:41 +0100
commit4e6f092260688daeab0d55223cc4c2ea091ce287 (patch)
tree69249ba733948225ec22db310b5a76301bd1816f /jack
parent891e26ba9d55d1cbc6b0bd37289dd9e7db70b5ed (diff)
downloadtoolchain_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')
-rw-r--r--jack/prebuilts/core-stubs-mini.jackbin480628 -> 480756 bytes
-rw-r--r--jack/prebuilts/core-stubs-mini.jarbin203869 -> 203869 bytes
-rw-r--r--jack/src/com/android/jack/Jack.java2
-rw-r--r--jack/src/com/android/jack/ir/impl/EcjSourceTypeLoader.java5
-rw-r--r--jack/src/com/android/jack/jayce/FullPackageLoader.java3
-rw-r--r--jack/src/com/android/jack/jayce/JayceClassOrInterfaceLoader.java46
-rw-r--r--jack/src/com/android/jack/jayce/StructurePackageLoader.java3
-rw-r--r--jack/src/com/android/jack/jayce/TypePackageLoader.java37
-rw-r--r--jack/src/com/android/jack/jayce/v0002/io/JayceInternalReaderImpl.java14
-rw-r--r--jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationType.java22
-rw-r--r--jack/src/com/android/jack/jayce/v0002/nodes/NClassType.java28
-rw-r--r--jack/src/com/android/jack/jayce/v0002/nodes/NEnumType.java112
-rw-r--r--jack/src/com/android/jack/jayce/v0002/nodes/NInterfaceType.java22
-rw-r--r--jack/src/com/android/jack/load/AbtractClassOrInterfaceLoader.java5
-rw-r--r--jack/src/com/android/jack/load/ClassOrInterfaceLoader.java2
15 files changed, 189 insertions, 112 deletions
diff --git a/jack/prebuilts/core-stubs-mini.jack b/jack/prebuilts/core-stubs-mini.jack
index 2b018f50..f8a09603 100644
--- a/jack/prebuilts/core-stubs-mini.jack
+++ b/jack/prebuilts/core-stubs-mini.jack
Binary files differ
diff --git a/jack/prebuilts/core-stubs-mini.jar b/jack/prebuilts/core-stubs-mini.jar
index d47b47e3..cfdfeeee 100644
--- a/jack/prebuilts/core-stubs-mini.jar
+++ b/jack/prebuilts/core-stubs-mini.jar
Binary files differ
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);
}