fixes to regression tests:

now, for me, code works using e44 with maven
  dalvik tests refactored for mobile version with android dev tools
  IDE tests Eclipse metadata fixed to make e44 work for me
  new android entrypoint to fix failure in new droidbench tests
This commit is contained in:
Julian Dolby 2015-03-24 21:51:35 -04:00
parent 1ea7746533
commit 43c37d6d0e
56 changed files with 496 additions and 401 deletions

View File

@ -6,6 +6,7 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.7

View File

@ -4,5 +4,4 @@ Bundle-Name: Data Plug-in
Bundle-SymbolicName: com.ibm.wala.cast.java.test.data
Bundle-Version: 1.3.4.qualifier
Bundle-Vendor: IBM
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.7

View File

@ -17,7 +17,7 @@ import com.ibm.wala.analysis.typeInference.PrimitiveType;
import com.ibm.wala.analysis.typeInference.TypeAbstraction;
import com.ibm.wala.analysis.typeInference.TypeVariable;
import com.ibm.wala.cast.analysis.typeInference.AstTypeInference;
import com.ibm.wala.cast.ir.ssa.AstConstants;
import com.ibm.wala.cast.ir.ssa.CAstBinaryOp;
import com.ibm.wala.cast.java.ssa.AstJavaInstructionVisitor;
import com.ibm.wala.cast.java.ssa.AstJavaInvokeInstruction;
import com.ibm.wala.cast.java.ssa.EnclosingObjectReference;
@ -40,8 +40,8 @@ public class AstJavaTypeInference extends AstTypeInference {
public void visitBinaryOp(SSABinaryOpInstruction instruction) {
if (doPrimitives) {
IBinaryOpInstruction.IOperator op = instruction.getOperator();
if (op == AstConstants.BinaryOp.EQ || op == AstConstants.BinaryOp.NE || op == AstConstants.BinaryOp.LT
|| op == AstConstants.BinaryOp.GE || op == AstConstants.BinaryOp.GT || op == AstConstants.BinaryOp.LE) {
if (op == CAstBinaryOp.EQ || op == CAstBinaryOp.NE || op == CAstBinaryOp.LT
|| op == CAstBinaryOp.GE || op == CAstBinaryOp.GT || op == CAstBinaryOp.LE) {
result = new DeclaredTypeOperator(language.getPrimitive(language.getConstantType(Boolean.TRUE)));
} else {
result = new PrimAndStringOp();

View File

@ -42,7 +42,7 @@ public abstract class AbstractFieldBasedTest extends TestJSCallGraphShape {
protected JSCallGraph runTest(URL url, Object[][] assertions, BuilderType... builderTypes) throws IOException, WalaException, Error, CancelException {
JSCallGraph cg = null;
for(BuilderType builderType : builderTypes) {
ProgressMaster monitor = ProgressMaster.make(new NullProgressMonitor(), 30000, true);
ProgressMaster monitor = ProgressMaster.make(new NullProgressMonitor(), 45000, true);
try {
cg = util.buildCG(url, builderType, monitor, false).fst;
System.err.println(cg);

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestMozillaBugPagesRhino.java"/>
<listEntry value="/com.ibm.wala.cast.js.rhino.test"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.debug.ui.ATTR_CAPTURE_IN_FILE" value="/tmp/rhinojs.out"/>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
@ -14,6 +14,7 @@
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.6"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.ibm.wala.cast.js.test.TestMozillaBugPagesRhino"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.ibm.wala.cast.js.rhino.test"/>

View File

@ -22,7 +22,7 @@
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.ibm.wala.cast.js.test.data/examples-src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
</listAttribute>
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java SE 7/"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/1.7.0 25/"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.ibm.wala.cast.js.rhino.test"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx2048M -verbose:gc -ea"/>

View File

@ -1,4 +1,4 @@
// $Id: drupal.js,v 1.41.2.4 2009/07/21 08:59:10 goba Exp $
// $Id: drupal.js,v 1.41.2.4 2009/07/21 08:59:10 goba Exp $
var Drupal = Drupal || { 'settings': {}, 'behaviors': {}, 'themes': {}, 'locale': {} };

View File

@ -12,5 +12,5 @@ var fs2 = [];
}
})(fs1, fs2);
fs[fs2[2]]();
fs[fs2[3]]();
(fs[fs2[2]])();
(fs[fs2[3]])();

View File

@ -10,10 +10,12 @@
<mapAttribute key="org.eclipse.debug.core.preferred_launchers">
<mapEntry key="[run]" value="org.eclipse.jdt.junit.launchconfig"/>
</mapAttribute>
<stringAttribute key="org.eclipse.debug.ui.ATTR_CAPTURE_IN_FILE" value="/tmp/cg.out"/>
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.ibm.wala.cast.js.test.TestSimpleCallGraphShapeRhino"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.ibm.wala.cast.js.rhino.test"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx256M -Dcom.ibm.wala.tracefile=/tmp/jssimplecg.out -ea"/>

View File

@ -11,7 +11,7 @@
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java SE 7"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/1.7.0 25/"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.ibm.wala.cast.test"/>
</launchConfiguration>

View File

@ -13,23 +13,11 @@ package com.ibm.wala.cast.ir.ssa;
import com.ibm.wala.shrikeBT.IBinaryOpInstruction;
import com.ibm.wala.shrikeBT.IUnaryOpInstruction;
public interface AstConstants {
public enum BinaryOp implements IBinaryOpInstruction.IOperator {
public enum CAstBinaryOp implements IBinaryOpInstruction.IOperator {
CONCAT, EQ, NE, LT, GE, GT, LE, STRICT_EQ, STRICT_NE;
@Override
public String toString() {
return super.toString().toLowerCase();
}
}
public enum UnaryOp implements IUnaryOpInstruction.IOperator {
MINUS, BITNOT, PLUS;
@Override
public String toString() {
return super.toString().toLowerCase();
}
}
}

View File

@ -0,0 +1,24 @@
/******************************************************************************
* Copyright (c) 2002 - 2006 IBM Corporation.
* 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:
* IBM Corporation - initial API and implementation
*****************************************************************************/
package com.ibm.wala.cast.ir.ssa;
import com.ibm.wala.shrikeBT.IBinaryOpInstruction;
import com.ibm.wala.shrikeBT.IUnaryOpInstruction;
public enum CAstUnaryOp implements IUnaryOpInstruction.IOperator {
MINUS, BITNOT, PLUS;
@Override
public String toString() {
return super.toString().toLowerCase();
}
}

View File

@ -23,7 +23,6 @@ import java.util.Set;
import com.ibm.wala.cast.ir.ssa.AssignInstruction;
import com.ibm.wala.cast.ir.ssa.AstAssertInstruction;
import com.ibm.wala.cast.ir.ssa.AstConstants;
import com.ibm.wala.cast.ir.ssa.AstEchoInstruction;
import com.ibm.wala.cast.ir.ssa.AstGlobalRead;
import com.ibm.wala.cast.ir.ssa.AstGlobalWrite;
@ -31,6 +30,8 @@ import com.ibm.wala.cast.ir.ssa.AstIsDefinedInstruction;
import com.ibm.wala.cast.ir.ssa.AstLexicalAccess.Access;
import com.ibm.wala.cast.ir.ssa.AstLexicalRead;
import com.ibm.wala.cast.ir.ssa.AstLexicalWrite;
import com.ibm.wala.cast.ir.ssa.CAstBinaryOp;
import com.ibm.wala.cast.ir.ssa.CAstUnaryOp;
import com.ibm.wala.cast.ir.ssa.EachElementGetInstruction;
import com.ibm.wala.cast.ir.ssa.EachElementHasNextInstruction;
import com.ibm.wala.cast.ir.ssa.SSAConversion;
@ -3018,13 +3019,13 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
protected IUnaryOpInstruction.IOperator translateUnaryOpcode(CAstNode op) {
if (op == CAstOperator.OP_BITNOT)
return AstConstants.UnaryOp.BITNOT;
return CAstUnaryOp.BITNOT;
else if (op == CAstOperator.OP_NOT)
return IUnaryOpInstruction.Operator.NEG;
else if (op == CAstOperator.OP_SUB)
return AstConstants.UnaryOp.MINUS;
return CAstUnaryOp.MINUS;
else if (op == CAstOperator.OP_ADD)
return AstConstants.UnaryOp.PLUS;
return CAstUnaryOp.PLUS;
else
Assertions.UNREACHABLE("cannot translate " + CAstPrinter.print(op));
return null;
@ -3055,23 +3056,23 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
else if (op == CAstOperator.OP_BIT_XOR)
return BinaryOpInstruction.Operator.XOR;
else if (op == CAstOperator.OP_CONCAT)
return AstConstants.BinaryOp.CONCAT;
return CAstBinaryOp.CONCAT;
else if (op == CAstOperator.OP_EQ)
return AstConstants.BinaryOp.EQ;
return CAstBinaryOp.EQ;
else if (op == CAstOperator.OP_STRICT_EQ)
return AstConstants.BinaryOp.STRICT_EQ;
return CAstBinaryOp.STRICT_EQ;
else if (op == CAstOperator.OP_GE)
return AstConstants.BinaryOp.GE;
return CAstBinaryOp.GE;
else if (op == CAstOperator.OP_GT)
return AstConstants.BinaryOp.GT;
return CAstBinaryOp.GT;
else if (op == CAstOperator.OP_LE)
return AstConstants.BinaryOp.LE;
return CAstBinaryOp.LE;
else if (op == CAstOperator.OP_LT)
return AstConstants.BinaryOp.LT;
return CAstBinaryOp.LT;
else if (op == CAstOperator.OP_NE)
return AstConstants.BinaryOp.NE;
return CAstBinaryOp.NE;
else if (op == CAstOperator.OP_STRICT_NE)
return AstConstants.BinaryOp.STRICT_NE;
return CAstBinaryOp.STRICT_NE;
else {
Assertions.UNREACHABLE("cannot translate " + CAstPrinter.print(op));
return null;

View File

@ -9,3 +9,5 @@ org\/openide\/.*
com\/ibm\/crypto\/.*
com\/ibm\/security\/.*
org\/apache\/xerces\/.*
dalvik\/.*
java\/io\/ObjectStreamClass*

View File

@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/ExportTypeHierarchyToXML.java"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
</listAttribute>
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.ibm.wala.examples.drivers.ExportTypeHierarchyToXML"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-classpath c:/temp/testdata/JLex.jar"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.ibm.wala.core.tests"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx500M"/>
</launchConfiguration>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.ibm.wala.core.tests"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.ibm.wala.examples.drivers.ExportTypeHierarchyToXML"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-classpath c:/temp/testdata/JLex.jar"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.ibm.wala.core.tests"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx500M"/>
</launchConfiguration>

View File

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.ibm.wala.core.tests"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=com.ibm.wala.core.tests/src&lt;com.ibm.wala.core.tests.demandpa"/>
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/>
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER&quot; javaProject=&quot;com.ibm.wala.core.tests&quot; path=&quot;1&quot;

View File

@ -24,8 +24,8 @@
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;com.ibm.wala.core.testdata&quot; type=&quot;1&quot;/&gt;&#10;"/>
</listAttribute>
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java SE 7"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/1.7.0 25/"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.ibm.wala.core.tests"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx800M -verbose:gc -Dcom.ibm.wala.util.fixedpoint.impl.verbose=true -XX:-UseSplitVerifier"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx800M -verbose:gc -Dcom.ibm.wala.util.fixedpoint.impl.verbose=true"/>
</launchConfiguration>

View File

@ -75,7 +75,7 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>

View File

@ -3,12 +3,10 @@ package com.ibm.wala.dalvik.test;
import static com.ibm.wala.properties.WalaProperties.ANDROID_RT_JAR;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
@ -61,33 +59,37 @@ public abstract class DalvikTestBase extends DynamicCallGraphTestBase {
}
public static URI[] androidLibs() {
System.err.println(System.getProperty("java.vm.name"));
if ("Dalvik".equals(System.getProperty("java.vm.name"))) {
try {
return new URI[]{
new URL("file:///system/framework/core.jar").toURI(),
new URL("file:///system/framework/framework.jar").toURI(),
new URL("file:///system/framework/framework2.jar").toURI(),
new URL("file:///system/framework/framework3.jar").toURI()
};
} catch (MalformedURLException e) {
assert false : e;
return null;
} catch (URISyntaxException e) {
assert false : e;
return null;
}
List<URI> libs = new ArrayList<URI>();
for(File f : new File("/system/framework/").listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
String name = pathname.getName();
return
(name.startsWith("core") || name.startsWith("framework")) &&
(name.endsWith("jar") || name.endsWith("apk"));
}
}))
{
System.out.println("adding " + f);
libs.add(f.toURI());
}
return libs.toArray(new URI[ libs.size() ]);
} else {
List<URI> libs = new ArrayList<URI>();
try {
for(File lib : new File(walaProperties.getProperty(ANDROID_RT_JAR)).listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith("dex") || name.endsWith("jar");
return name.endsWith("dex") || name.endsWith("jar") || name.endsWith("apk");
}
})) {
System.out.println("adding " + lib);
libs.add(lib.toURI());
}
} catch (Exception e) {
System.out.println("unexpected " + e);
for(String l : WalaProperties.getJ2SEJarFiles()) {
libs.add(new File(l).toURI());
}

View File

@ -15,6 +15,7 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@ -43,7 +44,6 @@ import com.ibm.wala.ipa.callgraph.propagation.cfa.DefaultSSAInterpreter;
import com.ibm.wala.ipa.cha.ClassHierarchy;
import com.ibm.wala.ipa.cha.ClassHierarchyException;
import com.ibm.wala.ipa.cha.IClassHierarchy;
import com.ibm.wala.properties.WalaProperties;
import com.ibm.wala.shrikeBT.analysis.Analyzer.FailureException;
import com.ibm.wala.shrikeCT.InvalidClassFileException;
import com.ibm.wala.ssa.SSAInstruction;
@ -55,7 +55,6 @@ import com.ibm.wala.util.CancelException;
import com.ibm.wala.util.MonitorUtil.IProgressMonitor;
import com.ibm.wala.util.NullProgressMonitor;
import com.ibm.wala.util.Predicate;
import com.ibm.wala.util.WalaException;
import com.ibm.wala.util.collections.FilterIterator;
import com.ibm.wala.util.collections.HashSetFactory;
import com.ibm.wala.util.collections.MapIterator;
@ -99,18 +98,30 @@ public class DalvikCallGraphTestBase extends DalvikTestBase {
run(mainClass.substring(1).replace('/', '.'), "LibraryExclusions.txt", args);
}
public static Pair<CallGraph, PointerAnalysis<InstanceKey>> makeAPKCallGraph(String apkFileName) throws IOException, ClassHierarchyException, IllegalArgumentException, CancelException {
return makeAPKCallGraph(apkFileName, new NullProgressMonitor());
public static Pair<CallGraph, PointerAnalysis<InstanceKey>> makeAPKCallGraph(String apkFile) throws ClassHierarchyException, IllegalArgumentException, IOException, CancelException {
return makeAPKCallGraph(apkFile, androidLibs());
}
public static Pair<CallGraph, PointerAnalysis<InstanceKey>> makeAPKCallGraph(String apkFileName, URI[] androidLibs) throws IOException, ClassHierarchyException, IllegalArgumentException, CancelException {
return makeAPKCallGraph(apkFileName, new NullProgressMonitor(), androidLibs);
}
public static Pair<CallGraph, PointerAnalysis<InstanceKey>> makeAPKCallGraph(String apkFileName, ReflectionOptions options) throws IOException, ClassHierarchyException, IllegalArgumentException, CancelException {
return makeAPKCallGraph(apkFileName, new NullProgressMonitor(), options);
public static Pair<CallGraph, PointerAnalysis<InstanceKey>> makeAPKCallGraph(String apkFileName, ReflectionOptions options) throws IOException, ClassHierarchyException, IllegalArgumentException, CancelException {
return makeAPKCallGraph(apkFileName, new NullProgressMonitor(), options, androidLibs());
}
public static Pair<CallGraph, PointerAnalysis<InstanceKey>> makeAPKCallGraph(String apkFileName, ReflectionOptions options, URI[] androidLibs) throws IOException, ClassHierarchyException, IllegalArgumentException, CancelException {
return makeAPKCallGraph(apkFileName, new NullProgressMonitor(), options, androidLibs);
}
public static Pair<CallGraph, PointerAnalysis<InstanceKey>> makeAPKCallGraph(String apkFileName, IProgressMonitor monitor) throws IOException, ClassHierarchyException, IllegalArgumentException, CancelException {
return makeAPKCallGraph(apkFileName, monitor, ReflectionOptions.NONE);
public static Pair<CallGraph, PointerAnalysis<InstanceKey>> makeAPKCallGraph(String apkFileName, IProgressMonitor monitor, URI[] androidLibs) throws IOException, ClassHierarchyException, IllegalArgumentException, CancelException {
return makeAPKCallGraph(apkFileName, monitor, ReflectionOptions.NONE, androidLibs);
}
public static Pair<CallGraph, PointerAnalysis<InstanceKey>> makeAPKCallGraph(String absolutePath, IProgressMonitor pm, ReflectionOptions none) throws ClassHierarchyException, IllegalArgumentException, IOException, CancelException {
return makeAPKCallGraph(absolutePath, pm, none, androidLibs());
}
@SuppressWarnings("unused")
private static SSAContextInterpreter makeDefaultInterpreter(AnalysisOptions options, AnalysisCache cache) {
return new DefaultSSAInterpreter(options, cache) {
@ -137,13 +148,13 @@ public class DalvikCallGraphTestBase extends DalvikTestBase {
};
}
public static Pair<CallGraph, PointerAnalysis<InstanceKey>> makeAPKCallGraph(String apkFileName, IProgressMonitor monitor, ReflectionOptions policy) throws IOException, ClassHierarchyException, IllegalArgumentException, CancelException {
public static Pair<CallGraph, PointerAnalysis<InstanceKey>> makeAPKCallGraph(String apkFileName, IProgressMonitor monitor, ReflectionOptions policy, URI[] androidLibs) throws IOException, ClassHierarchyException, IllegalArgumentException, CancelException {
AnalysisScope scope =
AndroidAnalysisScope.setUpAndroidAnalysisScope(
new File(apkFileName).toURI(),
"AndroidRegressionExclusions.txt",
CallGraphTestUtil.class.getClassLoader(),
androidLibs());
androidLibs);
final IClassHierarchy cha = ClassHierarchy.make(scope);
@ -199,4 +210,5 @@ public class DalvikCallGraphTestBase extends DalvikTestBase {
return Pair.make(callGraph, ptrAnalysis);
}
}

View File

@ -77,8 +77,9 @@ public abstract class DroidBenchCGTest extends DalvikCallGraphTestBase {
uncalledFunctions.put("VirtualDispatch2.apk", x);
}
private void assertUserCodeReachable(CallGraph cg) throws InvalidClassFileException {
for(Iterator<IClass> clss = cg.getClassHierarchy().getLoader(ClassLoaderReference.Application).iterateAllClasses();
public static Set<IMethod> assertUserCodeReachable(CallGraph cg, Set<MethodReference> uncalled) throws InvalidClassFileException {
Set<IMethod> result = HashSetFactory.make();
for(Iterator<IClass> clss = cg.getClassHierarchy().getLoader(ClassLoaderReference.Application).iterateAllClasses();
clss.hasNext(); )
{
IClass cls = clss.next();
@ -88,12 +89,16 @@ public abstract class DroidBenchCGTest extends DalvikCallGraphTestBase {
if (! cls.getName().toString().startsWith("Landroid") && ! cls.getName().toString().equals("Lde/ecspride/R$styleable")) {
for(IMethod m : cls.getDeclaredMethods()) {
if (!m.isInit() && !m.isAbstract() && !uncalled.contains(m.getReference())) {
Assert.assertFalse(m + "(" + m.getSourcePosition(0) + ") cannot be called in " + apkFile, cg.getNodes(m.getReference()).isEmpty());
System.err.println("found " + m);
if (! cg.getNodes(m.getReference()).isEmpty()) {
System.err.println("found " + m);
} else {
result.add(m);
}
}
}
}
}
return result;
}
private final String apkFile;
@ -110,11 +115,12 @@ public abstract class DroidBenchCGTest extends DalvikCallGraphTestBase {
System.err.println("testing " + apkFile + "...");
Pair<CallGraph,PointerAnalysis<InstanceKey>> x = makeAPKCallGraph(apkFile, ReflectionOptions.ONE_FLOW_TO_CASTS_APPLICATION_GET_METHOD);
//System.err.println(x.fst);
assertUserCodeReachable(x.fst);
Set<IMethod> bad = assertUserCodeReachable(x.fst, uncalled);
Assert.assertTrue(bad + " should be empty", bad.isEmpty());
System.err.println("...success testing " + apkFile);
}
private static final Set<String> skipTests = HashSetFactory.make();
private static final Set<String> skipTests = HashSetFactory.make();
static {
// serialization issues
skipTests.add("ServiceCommunication1.apk");

View File

@ -3,12 +3,12 @@
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry exported="true" kind="lib" path="lib/dexlib-1.3.4-dev.jar"/>
<classpathentry exported="true" kind="lib" path="lib/guava-13.0.1.jar"/>
<classpathentry exported="true" kind="lib" path="lib/commons-cli-1.2.jar"/>
<classpathentry exported="true" kind="lib" path="lib/commons-io-2.4.jar"/>
<classpathentry exported="true" kind="lib" path="lib/logback-classic-1.0.9.jar"/>
<classpathentry exported="true" kind="lib" path="lib/logback-core-1.0.9.jar"/>
<classpathentry exported="true" kind="lib" path="lib/slf4j-api-1.7.2.jar"/>
<classpathentry exported="true" kind="lib" path="lib/guava-13.0.1.jar"/>
<classpathentry kind="lib" path="lib/dexlib-1.3.4-dev.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -52,6 +52,7 @@ import java.io.IOException;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.jar.JarFile;
import org.jf.dexlib.ClassDefItem;
import org.jf.dexlib.DexFile;
@ -61,6 +62,7 @@ import org.slf4j.LoggerFactory;
import com.ibm.wala.classLoader.Module;
import com.ibm.wala.classLoader.ModuleEntry;
import com.ibm.wala.util.io.TemporaryFile;
/**
* A module which is a wrapper around .dex and .apk file.
@ -73,12 +75,35 @@ public class DexFileModule implements Module {
private final DexFile dexfile;
private final Collection<ModuleEntry> entries;
public static DexFileModule make(File f) throws IllegalArgumentException, IOException {
if (f.getName().endsWith("jar")) {
return new DexFileModule(new JarFile(f));
} else {
return new DexFileModule(f);
}
}
private static File tf(JarFile f) {
String name = f.getName();
if (name.indexOf('/') >= 0) {
name = name.substring(name.lastIndexOf('/')+1);
}
File tf = new File(System.getProperty("java.io.tmpdir") + "/" + name + "_classes.dex");
tf.deleteOnExit();
System.err.println("using " + tf);
return tf;
}
private DexFileModule(JarFile f) throws IllegalArgumentException, IOException {
this(TemporaryFile.streamToFile(tf(f), f.getInputStream(f.getEntry("classes.dex"))));
}
/**
* @param f
* the .dex or .apk file
* @throws IllegalArgumentException
*/
public DexFileModule(File f) throws IllegalArgumentException {
private DexFileModule(File f) throws IllegalArgumentException {
try {
dexfile = new DexFile(f);
} catch (IOException e) {

View File

@ -153,7 +153,7 @@ public class WDexClassLoaderImpl extends ClassLoaderImpl {
ModuleEntry entry = (ModuleEntry) it.next();
if (entry instanceof DexModuleEntry) {
result.add(entry);
}
}
}
return result;
}

View File

@ -50,7 +50,7 @@ package com.ibm.wala.dalvik.dex.instructions;
import org.jf.dexlib.Code.Opcode;
import com.ibm.wala.cast.ir.ssa.AstConstants;
import com.ibm.wala.cast.ir.ssa.CAstBinaryOp;
import com.ibm.wala.dalvik.classLoader.DexIMethod;
import com.ibm.wala.dalvik.classLoader.Literal;
import com.ibm.wala.shrikeBT.IBinaryOpInstruction;
@ -90,21 +90,21 @@ public class BinaryLiteralOperation extends Instruction {
switch(op)
{
case CMPL_FLOAT:
return AstConstants.BinaryOp.LT;
return CAstBinaryOp.LT;
case CMPG_FLOAT:
return AstConstants.BinaryOp.GT;
return CAstBinaryOp.GT;
case CMPL_DOUBLE:
return AstConstants.BinaryOp.LT;
return CAstBinaryOp.LT;
case CMPG_DOUBLE:
return AstConstants.BinaryOp.GT;
return CAstBinaryOp.GT;
case CMPL_LONG:
return AstConstants.BinaryOp.LT;
return CAstBinaryOp.LT;
case CMPG_LONG:
return AstConstants.BinaryOp.GT;
return CAstBinaryOp.GT;
case CMPL_INT:
return AstConstants.BinaryOp.LT;
return CAstBinaryOp.LT;
case CMPG_INT:
return AstConstants.BinaryOp.GT;
return CAstBinaryOp.GT;
case ADD_INT:
return IBinaryOpInstruction.Operator.ADD;
case RSUB_INT:

View File

@ -50,7 +50,7 @@ package com.ibm.wala.dalvik.dex.instructions;
import org.jf.dexlib.Code.Opcode;
import com.ibm.wala.cast.ir.ssa.AstConstants;
import com.ibm.wala.cast.ir.ssa.CAstBinaryOp;
import com.ibm.wala.dalvik.classLoader.DexIMethod;
import com.ibm.wala.shrikeBT.IBinaryOpInstruction;
import com.ibm.wala.shrikeBT.IShiftInstruction;
@ -89,21 +89,21 @@ public class BinaryOperation extends Instruction {
switch(op)
{
case CMPL_FLOAT:
return AstConstants.BinaryOp.LT;
return CAstBinaryOp.LT;
case CMPG_FLOAT:
return AstConstants.BinaryOp.GT;
return CAstBinaryOp.GT;
case CMPL_DOUBLE:
return AstConstants.BinaryOp.LT;
return CAstBinaryOp.LT;
case CMPG_DOUBLE:
return AstConstants.BinaryOp.GT;
return CAstBinaryOp.GT;
case CMPL_LONG:
return AstConstants.BinaryOp.LT;
return CAstBinaryOp.LT;
case CMPG_LONG:
return AstConstants.BinaryOp.GT;
return CAstBinaryOp.GT;
case CMPL_INT:
return AstConstants.BinaryOp.LT;
return CAstBinaryOp.LT;
case CMPG_INT:
return AstConstants.BinaryOp.GT;
return CAstBinaryOp.GT;
case ADD_INT:
return IBinaryOpInstruction.Operator.ADD;
case SUB_INT:

View File

@ -50,7 +50,7 @@ package com.ibm.wala.dalvik.dex.instructions;
import org.jf.dexlib.Code.Opcode;
import com.ibm.wala.cast.ir.ssa.AstConstants;
import com.ibm.wala.cast.ir.ssa.CAstUnaryOp;
import com.ibm.wala.dalvik.classLoader.DexIMethod;
import com.ibm.wala.shrikeBT.IUnaryOpInstruction;
import com.ibm.wala.shrikeBT.IUnaryOpInstruction.IOperator;
@ -119,15 +119,15 @@ public class UnaryOperation extends Instruction {
{
// SSA unary ops
case NOT:
return AstConstants.UnaryOp.BITNOT;
return CAstUnaryOp.BITNOT;
case NEGINT:
return IUnaryOpInstruction.Operator.NEG;
case NOTINT:
return AstConstants.UnaryOp.BITNOT;
return CAstUnaryOp.BITNOT;
case NEGLONG:
return IUnaryOpInstruction.Operator.NEG;
case NOTLONG:
return AstConstants.UnaryOp.BITNOT;
return CAstUnaryOp.BITNOT;
case NEGFLOAT:
return IUnaryOpInstruction.Operator.NEG;
case NEGDOUBLE:

View File

@ -89,10 +89,8 @@ public class DexAnalysisScopeReader extends AnalysisScopeReader {
ClassLoaderReference loader = scope.getLoader(AnalysisScope.APPLICATION);
final String path = classPath.getPath();
if (path.endsWith(".jar")) {
scope.addToScope(loader, new JarFile(new File(classPath)));
} else if (path.endsWith(".apk") || path.endsWith(".dex")) {
scope.addToScope(loader, new DexFileModule(new File(classPath)));
if (path.endsWith(".jar") || path.endsWith(".apk") || path.endsWith(".dex")) {
scope.addToScope(loader, DexFileModule.make(new File(classPath)));
} else {
throw new IOException(
"could not determine type of classpath from file extension: "

View File

@ -47,8 +47,9 @@ public class AndroidAnalysisScope {
for(URI al : androidLib) {
try {
scope.addToScope(ClassLoaderReference.Primordial, new DexFileModule(new File(al)));
scope.addToScope(ClassLoaderReference.Primordial, DexFileModule.make(new File(al)));
} catch (Exception e) {
e.printStackTrace();
scope.addToScope(ClassLoaderReference.Primordial, new JarFileModule(new JarFile(new File(al))));
}
}
@ -58,7 +59,7 @@ public class AndroidAnalysisScope {
scope.setLoaderImpl(ClassLoaderReference.Application,
"com.ibm.wala.dalvik.classLoader.WDexClassLoaderImpl");
scope.addToScope(ClassLoaderReference.Application, new DexFileModule(new File(classpath)));
scope.addToScope(ClassLoaderReference.Application, DexFileModule.make(new File(classpath)));
return scope;
}
@ -79,12 +80,11 @@ public class AndroidAnalysisScope {
String[] paths = classPath.split(File.pathSeparator);
for (int i = 0; i < paths.length; i++) {
if (paths[i].endsWith(".jar")) { // handle jar file
scope.addToScope(loader, new JarFile(paths[i]));
} else if (paths[i].endsWith(".apk")
if (paths[i].endsWith(".jar")
|| paths[i].endsWith(".apk")
|| paths[i].endsWith(".dex")) { // Handle android file.
File f = new File(paths[i]);
scope.addToScope(loader, new DexFileModule(f));
scope.addToScope(loader, DexFileModule.make(f));
} else {
File f = new File(paths[i]);
if (f.isDirectory()) { // handle directory FIXME not working

View File

@ -946,6 +946,17 @@ public final class ActivityEP {
}
));
public static final AndroidPossibleEntryPoint onSharedPreferenceChanged = new AndroidPossibleEntryPoint(AndroidComponent.ACTIVITY,
"onSharedPreferenceChanged",
ExecutionOrder.between( // TODO: Find a nice position
new AndroidEntryPoint.IExecutionOrder[] {
onStop
},
new AndroidEntryPoint.IExecutionOrder[] {
onRestart
}
));
/**
* This method is called before pausing
*/
@ -1123,6 +1134,7 @@ public final class ActivityEP {
possibleEntryPoints.add(onUserLeaveHint);
possibleEntryPoints.add(onWindowAttributesChanged);
possibleEntryPoints.add(onWindowFocusChanged);
possibleEntryPoints.add(onSharedPreferenceChanged);
}
}

View File

@ -3,6 +3,6 @@
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="source"/>
<classpathentry kind="src" path="data"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -1,9 +1,10 @@
eclipse.preferences.version=1
instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@ -72,7 +73,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=di
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.6
org.eclipse.jdt.core.compiler.source=1.7
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0

View File

@ -19,7 +19,8 @@ Require-Bundle: com.ibm.wala.cast.java.test;bundle-version="1.0.0",
org.eclipse.jdt.core;bundle-version="3.4.2",
org.junit;bundle-version="4.0.0",
org.eclipse.core.runtime,
org.eclipse.pde.core;bundle-version="3.6.0",
org.eclipse.platform;bundle-version="4.2.2"
org.eclipse.pde.core,
org.eclipse.platform,
org.eclipse.jdt.launching.macosx;resolution:=optional
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.7

View File

@ -3,3 +3,4 @@ source.. = source/,\
output.. = bin/
bin.includes = META-INF/,\
.
jre.compilation.profile = JavaSE-1.7

File diff suppressed because one or more lines are too long

View File

@ -9,9 +9,9 @@
<version>1.3.4-SNAPSHOT</version>
</parent>
<artifactId>com.ibm.wala.ide.jdt.test</artifactId>
<packaging>eclipse-test-plugin</packaging>
<profiles>
<profile>
<id>macosx</id>

View File

@ -1,6 +1,7 @@
eclipse.preferences.version=1
instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.7

View File

@ -16,8 +16,9 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.core.resources,
org.eclipse.jdt.core,
org.eclipse.pde.core,
org.eclipse.ui.ide;bundle-version="3.8.2",
org.eclipse.jdt.launching;bundle-version="3.6.101"
org.eclipse.ui.ide,
org.eclipse.jdt.launching,
org.eclipse.jdt
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Export-Package: com.ibm.wala.cast.java.client,

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -1,9 +1,10 @@
eclipse.preferences.version=1
instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@ -72,7 +73,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=di
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.6
org.eclipse.jdt.core.compiler.source=1.7
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0

View File

@ -19,6 +19,6 @@ Require-Bundle: com.ibm.wala.core;bundle-version="1.1.3",
org.eclipse.pde.core;bundle-version="3.8.1",
org.eclipse.equinox.common;bundle-version="3.6.100",
org.eclipse.core.runtime;bundle-version="3.8.0"
Bundle-ActivationPolicy: lazy
Bundle-Activator: com.ibm.wala.ide.jsdt.tests.Activator
Export-Package: com.ibm.wala.ide.jsdt.tests
Bundle-RequiredExecutionEnvironment: JavaSE-1.7

View File

@ -14,7 +14,7 @@
<booleanAttribute key="includeOptional" value="true"/>
<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.ibm.wala.ide.jsdt.tests/src/com/ibm/wala/ide/jsdt/tests/WLProjectWebScopeTest.java"/>
<listEntry value="/com.ibm.wala.worklight/src/com/ibm/wala/worklight/test/WLProjectWebScopeTest.java"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
@ -24,9 +24,9 @@
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.ibm.wala.ide.jsdt.tests.WLProjectWebScopeTest"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.ibm.wala.worklight.test.WLProjectWebScopeTest"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.ibm.wala.ide.jsdt.tests"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.ibm.wala.worklight"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -XX:MaxPermSize=512m -Xmx2048m -ea -Xdock:icon=../Resources/Eclipse.icns -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts"/>
<stringAttribute key="pde.version" value="3.3"/>

View File

@ -27,4 +27,16 @@
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<reuseForks>false</reuseForks>
<forkCount>1</forkCount>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -68,7 +68,7 @@ public abstract class AbstractJSProjectScopeTest {
return JavaScriptEclipseProjectPath.make(p, Collections.<Pair<String,Plugin>>emptySet());
}
@Ignore("works for me on luna, but ignored for now to avoid breaking juno")
@Ignore("works for me on Eclipse Luna, but I cannot make it work with maven")
@Test
public void testParsing() throws IOException, CoreException {
Set<ModuleEntry> mes = JsdtUtil.getJavaScriptCodeFromProject(project.projectName);

View File

@ -2,6 +2,6 @@
<classpath>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="source"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -1,9 +1,10 @@
eclipse.preferences.version=1
instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@ -72,7 +73,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=di
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.6
org.eclipse.jdt.core.compiler.source=1.7
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0

View File

@ -22,6 +22,7 @@ Require-Bundle: org.eclipse.core.runtime,
org.eclipse.pde.core;bundle-version="3.8.1"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Import-Package: org.eclipse.wst.jsdt.internal.corext.callhierarchy
Export-Package: com.ibm.wala.cast.js.client,
com.ibm.wala.ide.jsdt,
com.ibm.wala.ide.util

View File

@ -54,6 +54,7 @@ import com.ibm.wala.ide.util.HeadlessUtil.EclipseCompiler;
import com.ibm.wala.ide.util.HeadlessUtil.Parser;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.util.collections.HashSetFactory;
import com.ibm.wala.util.collections.Pair;
import com.ibm.wala.util.functions.Function;
import com.ibm.wala.util.graph.Graph;
import com.ibm.wala.util.graph.impl.SlowSparseNumberedGraph;
@ -76,7 +77,7 @@ public class JsdtUtil {
public static Set<ModuleEntry> getJavaScriptCodeFromProject(String project) throws IOException, CoreException {
IJavaScriptProject p = JavaScriptHeadlessUtil.getJavaScriptProjectFromWorkspace(project);
JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory());
AnalysisScope s = JavaScriptEclipseProjectPath.make(p, Collections.EMPTY_SET).toAnalysisScope(new CAstAnalysisScope(JSCallGraphUtil.makeLoaders(), Collections.singleton(JavaScriptLoader.JS)));
AnalysisScope s = JavaScriptEclipseProjectPath.make(p, Collections.<Pair<String,Plugin>>emptySet()).toAnalysisScope(new CAstAnalysisScope(JSCallGraphUtil.makeLoaders(), Collections.singleton(JavaScriptLoader.JS)));
List<Module> modules = s.getModules(JavaScriptTypes.jsLoader);
Set<ModuleEntry> mes = HashSetFactory.make();

View File

@ -6,6 +6,7 @@
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
</listAttribute>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.ibm.wala.examples.drivers.SWTCallGraph"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-appJar ${resource_loc:/com.ibm.wala.core.testdata/JLex.jar}"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.ibm.wala.ide.tests"/>

View File

@ -15,7 +15,9 @@ Require-Bundle: com.ibm.wala.core,
org.eclipse.core.resources,
org.eclipse.core.runtime,
org.eclipse.jdt.core,
org.eclipse.ui.ide;bundle-version="3.8.2"
org.eclipse.ui.ide,
org.eclipse.jdt,
org.eclipse.jdt.launching
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Export-Package: com.ibm.wala.ide.classloader,

View File

@ -201,6 +201,7 @@ public abstract class EclipseProjectPath<E, P> {
if (!model.isInSync() || model.isDisposed()) {
model.load();
}
BundleDescription bd = model.getBundleDescription();
if (bd == null) {

View File

@ -97,7 +97,7 @@ public class AnnotationsReader extends AttributeReader {
@Override
public String toString() {
return val.toString();
return String.valueOf(val);
}
}

View File

@ -10,6 +10,7 @@
*******************************************************************************/
package com.ibm.wala.util.functions;
/**
*/
public interface Function<X,Y> {

View File

@ -224,6 +224,7 @@ public final class BitVectorIntSet implements MutableIntSet {
@Override
public boolean hasNext() {
assert populationCount == bitVector.populationCount();
return count < populationCount;
}

436
pom.xml
View File

@ -1,218 +1,230 @@
<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ibm.wala</groupId>
<artifactId>WALA</artifactId>
<version>1.3.4-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<project-version>1.3.4-SNAPSHOT</project-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<build-alias>b000</build-alias>
<tycho-version>0.19.0</tycho-version>
<tycho.scmUrl>scm:git:ssh://github.com:wala/WALA.git</tycho.scmUrl>
</properties>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ibm.wala</groupId>
<artifactId>WALA</artifactId>
<version>1.3.4-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<project-version>1.3.4-SNAPSHOT</project-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<build-alias>b000</build-alias>
<tycho-version>0.19.0</tycho-version>
<tycho.scmUrl>scm:git:ssh://github.com:wala/WALA.git</tycho.scmUrl>
</properties>
<modules>
<module>targets</module>
<modules>
<module>targets</module>
<module>com.ibm.wala-feature</module>
<module>com.ibm.wala.core</module>
<module>com.ibm.wala.shrike</module>
<module>com.ibm.wala.util</module>
<module>com.ibm.wala.core.testdata</module>
<module>com.ibm.wala.core.tests</module>
<module>com.ibm.wala.cast</module>
<module>com.ibm.wala.cast.test</module>
<module>com.ibm.wala.cast.java</module>
<module>com.ibm.wala.cast.java.test</module>
<module>com.ibm.wala.cast.java.test.data</module>
<module>com.ibm.wala.ide-feature</module>
<module>com.ibm.wala.ide</module>
<module>com.ibm.wala.ide.tests</module>
<module>com.ibm.wala.ide.jdt</module>
<module>com.ibm.wala.ide.jdt.test</module>
<module>com.ibm.wala.cast.js</module>
<module>com.ibm.wala.cast.js.html.nu_validator</module>
<module>com.ibm.wala.cast.js.test</module>
<module>com.ibm.wala.cast.js.test.data</module>
<module>com.ibm.wala.cast.js.rhino</module>
<module>com.ibm.wala.cast.js.rhino.test</module>
<module>com.ibm.wala.ide.jsdt</module>
<module>com.ibm.wala.ide.jsdt.tests</module>
<module>com.ibm.wala.dalvik</module>
<module>com.ibm.wala.dalvik.test</module>
<module>com.ibm.wala.scandroid</module>
<module>com.ibm.wala.cast.java.polyglot</module>
<module>com.ibm.wala.cast.java.polyglot.test</module>
<module>com.ibm.wala-repository</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho-version}</version>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<target>
<artifact>
<groupId>com.ibm.wala.target</groupId>
<artifactId>e44</artifactId>
<version>${project-version}</version>
</artifact>
</target>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-compiler-plugin</artifactId>
<version>${tycho-version}</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<compilerArgument>-err:-forbidden</compilerArgument>
<compilerArguments>
<properties>${project.basedir}/.settings/org.eclipse.jdt.core.prefs</properties>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-source-plugin</artifactId>
<version>${tycho-version}</version>
<executions>
<execution>
<id>attach-source</id>
<phase>process-classes</phase>
<goals>
<goal>plugin-source</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-packaging-plugin</artifactId>
<version>${tycho-version}</version>
<configuration>
<format>'v'yyyyMMdd-HHmm'-${build-alias}'</format>
<archiveSite>false</archiveSite>
<sourceReferences>
<generate>true</generate>
</sourceReferences>
</configuration>
<dependencies>
<dependency>
<groupId>org.eclipse.tycho.extras</groupId>
<artifactId>tycho-sourceref-jgit</artifactId>
<version>${tycho-version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-surefire-plugin</artifactId>
<version>${tycho-version}</version>
<configuration>
<module>com.ibm.wala-feature</module>
<module>com.ibm.wala.core</module>
<module>com.ibm.wala.shrike</module>
<module>com.ibm.wala.util</module>
<module>com.ibm.wala.core.testdata</module>
<module>com.ibm.wala.core.tests</module>
<module>com.ibm.wala.dalvik</module>
<module>com.ibm.wala.dalvik.test</module>
<module>com.ibm.wala.scandroid</module>
<module>com.ibm.wala.cast</module>
<module>com.ibm.wala.cast.test</module>
<module>com.ibm.wala.cast.java</module>
<module>com.ibm.wala.cast.java.test</module>
<module>com.ibm.wala.cast.java.test.data</module>
<module>com.ibm.wala.cast.java.polyglot</module>
<module>com.ibm.wala.cast.java.polyglot.test</module>
<module>com.ibm.wala.cast.js</module>
<module>com.ibm.wala.cast.js.html.nu_validator</module>
<module>com.ibm.wala.cast.js.test</module>
<module>com.ibm.wala.cast.js.test.data</module>
<module>com.ibm.wala.cast.js.rhino</module>
<module>com.ibm.wala.cast.js.rhino.test</module>
<module>com.ibm.wala.ide-feature</module>
<module>com.ibm.wala.ide</module>
<module>com.ibm.wala.ide.tests</module>
<module>com.ibm.wala.ide.jdt</module>
<module>com.ibm.wala.ide.jsdt</module>
<module>com.ibm.wala.ide.jsdt.tests</module>
<module>com.ibm.wala.ide.jdt.test</module>
<module>com.ibm.wala-repository</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho-version}</version>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<target>
<artifact>
<groupId>com.ibm.wala.target</groupId>
<artifactId>e42</artifactId>
<version>${project-version}</version>
</artifact>
</target>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-compiler-plugin</artifactId>
<version>${tycho-version}</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<compilerArgument>-err:-forbidden</compilerArgument>
<compilerArguments>
<properties>${project.basedir}/.settings/org.eclipse.jdt.core.prefs</properties>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-source-plugin</artifactId>
<version>${tycho-version}</version>
<executions>
<execution>
<id>attach-source</id>
<phase>process-classes</phase>
<goals>
<goal>plugin-source</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-packaging-plugin</artifactId>
<version>${tycho-version}</version>
<configuration>
<format>'v'yyyyMMdd-HHmm'-${build-alias}'</format>
<archiveSite>false</archiveSite>
<sourceReferences>
<generate>true</generate>
</sourceReferences>
</configuration>
<dependencies>
<dependency>
<groupId>org.eclipse.tycho.extras</groupId>
<artifactId>tycho-sourceref-jgit</artifactId>
<version>${tycho-version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-surefire-plugin</artifactId>
<version>${tycho-version}</version>
<configuration>
<useuiharness>false</useuiharness>
<useuithread>false</useuithread>
<providerHint>junit47</providerHint>
<argLine>${tycho.test.jvmArgs}</argLine>
<includes>
<include>**/Test*.java</include>
<include>**/*Test.java</include>
<include>**/*TestCase.java</include>
<include>**/*Tests.java</include>
</includes>
</configuration>
</plugin>
<!-- The tycho-source-feature-plugin needs to be place before the tycho-p2-plugin, as both plugins' goals bind to the same phase -->
<plugin>
<groupId>org.eclipse.tycho.extras</groupId>
<artifactId>tycho-source-feature-plugin</artifactId>
<version>${tycho-version}</version>
<executions>
<execution>
<id>generate-source-feature</id>
<goals>
<goal>source-feature</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-plugin</artifactId>
<version>${tycho-version}</version>
<executions>
<execution>
<!-- Don't attach (default) metadata before the "generate-source-feature" execution. -->
<id>default-p2-metadata-default</id>
<configuration>
<attachP2Metadata>false</attachP2Metadata>
</configuration>
</execution>
<execution>
<!-- Do attach metadata after the "generate-source-feature" execution. -->
<id>attach-p2-metadata</id>
<phase>package</phase>
<goals>
<goal>p2-metadata</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-director-plugin</artifactId>
<version>${tycho-version}</version>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-repository-plugin</artifactId>
<version>${tycho-version}</version>
<configuration>
<includeAllDependencies>false</includeAllDependencies>
</configuration>
</plugin>
<plugin>
<groupId>com.googlecode.maven-download-plugin</groupId>
<artifactId>maven-download-plugin</artifactId>
<version>1.0.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
</plugin>
</plugins>
</build>
<pluginRepositories>
<pluginRepository>
<id>sonatype-public-repository</id>
<url>https://oss.sonatype.org/content/groups/public</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<type>eclipse-plugin</type>
<artifactId>org.eclipse.osgi.compatibility.state</artifactId>
<version>0.0.0</version>
</dependency>
</dependencies>
<useuiharness>false</useuiharness>
<useuithread>false</useuithread>
<providerHint>junit47</providerHint>
<argLine>${tycho.test.jvmArgs}</argLine>
<includes>
<include>**/Test*.java</include>
<include>**/*Test.java</include>
<include>**/*TestCase.java</include>
<include>**/*Tests.java</include>
</includes>
</configuration>
</plugin>
<!-- The tycho-source-feature-plugin needs to be place before the tycho-p2-plugin, as both plugins' goals bind to the same phase -->
<plugin>
<groupId>org.eclipse.tycho.extras</groupId>
<artifactId>tycho-source-feature-plugin</artifactId>
<version>${tycho-version}</version>
<executions>
<execution>
<id>generate-source-feature</id>
<goals>
<goal>source-feature</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-plugin</artifactId>
<version>${tycho-version}</version>
<executions>
<execution>
<!-- Don't attach (default) metadata before the "generate-source-feature" execution. -->
<id>default-p2-metadata-default</id>
<configuration>
<attachP2Metadata>false</attachP2Metadata>
</configuration>
</execution>
<execution>
<!-- Do attach metadata after the "generate-source-feature" execution. -->
<id>attach-p2-metadata</id>
<phase>package</phase>
<goals>
<goal>p2-metadata</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-director-plugin</artifactId>
<version>${tycho-version}</version>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-repository-plugin</artifactId>
<version>${tycho-version}</version>
<configuration>
<includeAllDependencies>true</includeAllDependencies>
</configuration>
</plugin>
<plugin>
<groupId>com.googlecode.maven-download-plugin</groupId>
<artifactId>maven-download-plugin</artifactId>
<version>1.0.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
</plugin>
</plugins>
</build>
<pluginRepositories>
<pluginRepository>
<id>sonatype-public-repository</id>
<url>https://oss.sonatype.org/content/groups/public</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</pluginRepository>
</pluginRepositories>
</project>

View File

@ -1,30 +1,16 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde version="3.8"?><target name="WALA Eclipse Luna Target Platform" sequenceNumber="130">
<locations>
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.e4.rcp.feature.group" version="0.0.0"/>
<unit id="org.eclipse.ecf.core.feature.feature.group" version="0.0.0"/>
<unit id="org.eclipse.ecf.core.ssl.feature.feature.group" version="0.0.0"/>
<unit id="org.eclipse.ecf.filetransfer.feature.feature.group" version="0.0.0"/>
<unit id="org.eclipse.ecf.filetransfer.httpclient4.feature.feature.group" version="0.0.0"/>
<unit id="org.eclipse.ecf.filetransfer.httpclient4.ssl.feature.feature.group" version="0.0.0"/>
<unit id="org.eclipse.ecf.filetransfer.ssl.feature.feature.group" version="0.0.0"/>
<unit id="org.eclipse.emf.common.feature.group" version="0.0.0"/>
<unit id="org.eclipse.emf.ecore.feature.group" version="0.0.0"/>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.emf.sdk.feature.group" version="0.0.0"/>
<unit id="org.eclipse.equinox.p2.core.feature.feature.group" version="0.0.0"/>
<unit id="org.eclipse.equinox.p2.extras.feature.feature.group" version="0.0.0"/>
<unit id="org.eclipse.equinox.p2.rcp.feature.feature.group" version="0.0.0"/>
<unit id="org.eclipse.equinox.p2.user.ui.feature.group" version="0.0.0"/>
<unit id="org.eclipse.help.feature.group" version="0.0.0"/>
<unit id="org.eclipse.jdt.feature.group" version="0.0.0"/>
<unit id="org.eclipse.jdt.source.feature.group" version="0.0.0"/>
<unit id="org.eclipse.pde.feature.group" version="0.0.0"/>
<unit id="org.eclipse.platform.feature.group" version="0.0.0"/>
<unit id="org.eclipse.rcp.feature.group" version="0.0.0"/>
<unit id="org.eclipse.sdk.ide" version="0.0.0"/>
<unit id="org.eclipse.wst.jsdt.feature.feature.group" version="0.0.0"/>
<unit id="org.eclipse.wst.web_ui.feature.feature.group" version="0.0.0"/>
<unit id="org.eclipse.wst.jsdt.feature.feature.group" version="0.0.0"/>
<unit id="org.eclipse.wst.jsdt.ui" version="0.0.0"/>
<unit id="org.eclipse.sdk.ide" version="0.0.0"/>
<unit id="org.eclipse.jdt.source.feature.group" version="0.0.0"/>
<unit id="org.eclipse.jdt.feature.group" version="0.0.0"/>
<unit id="org.eclipse.osgi" version="0.0.0"/>
<unit id="org.eclipse.e4.rcp.feature.group" version="0.0.0"/>
<repository location="http://download.eclipse.org/releases/luna"/>
</location>
</locations>