-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
WIP #7 - Implemented dummy visitor and related test
- Loading branch information
1 parent
7ecf961
commit d86f600
Showing
5 changed files
with
294 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,33 +1,46 @@ | ||
package icc; | ||
|
||
import java.util.HashSet; | ||
import java.util.Set; | ||
|
||
import com.github.javaparser.ast.CompilationUnit; | ||
|
||
import icc.data.ICCLinkFindingResults; | ||
import icc.visitors.ActivityVisitor; | ||
import icc.visitors.ContentResolverVisitor; | ||
import icc.visitors.ScopeAwareVisitor; | ||
import icc.visitors.ServiceVisitor; | ||
import icc.visitors.StaticBroadcastVisitor; | ||
import icc.visitors.SymbolTableVisitor; | ||
|
||
import com.github.javaparser.ast.CompilationUnit; | ||
/** | ||
* This entity is the main entry-point for the ICC analysis. It is responsible | ||
* for detecting ICC links according to a given compilation unit and a set of | ||
* visitors. | ||
*/ | ||
public class ICCLinkFinder { | ||
/** | ||
* Finds inter-component communication links for a compilation unit. | ||
* | ||
* @param cu | ||
* The given compilation unit | ||
* @return Analysis results represented as a {@link ICCLinkFindingResults} | ||
*/ | ||
public static ICCLinkFindingResults findICCLinks(CompilationUnit cu) { | ||
ICCLinkFindingResults results = new ICCLinkFindingResults(); | ||
|
||
Set<ScopeAwareVisitor> visitors = new HashSet<>(); | ||
visitors.add(new SymbolTableVisitor(results)); | ||
visitors.add(new ActivityVisitor(results)); | ||
visitors.add(new ServiceVisitor(results)); | ||
visitors.add(new StaticBroadcastVisitor(results)); | ||
visitors.add(new ContentResolverVisitor(results)); | ||
|
||
public class ICCLinkFinder | ||
{ | ||
public static ICCLinkFindingResults findICCLinks(CompilationUnit cu) | ||
{ | ||
ICCLinkFindingResults results = new ICCLinkFindingResults(); | ||
|
||
SymbolTableVisitor sTVisitor = new SymbolTableVisitor(results); | ||
sTVisitor.visit(cu, null); | ||
|
||
ActivityVisitor activityVisitor = new ActivityVisitor(results); | ||
activityVisitor.visit(cu, null); | ||
|
||
ServiceVisitor serviceVisitor = new ServiceVisitor(results); | ||
serviceVisitor.visit(cu, null); | ||
for (ScopeAwareVisitor visitor : visitors) { | ||
visitor.visit(cu, null); | ||
} | ||
results.accessStats(); | ||
|
||
StaticBroadcastVisitor staticBroadcastVisitor = new StaticBroadcastVisitor(results); | ||
staticBroadcastVisitor.visit(cu, null); | ||
|
||
results.accessStats(); | ||
|
||
return results; | ||
} | ||
return results; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package icc.visitors; | ||
|
||
import java.util.List; | ||
|
||
import com.github.javaparser.ast.expr.Expression; | ||
import com.github.javaparser.ast.expr.MethodCallExpr; | ||
|
||
import icc.data.ICCLinkFindingResults; | ||
|
||
public class ContentResolverVisitor extends BaseVisitor { | ||
|
||
public ContentResolverVisitor(ICCLinkFindingResults data) { | ||
super(data); | ||
} | ||
|
||
@Override | ||
public void visit(MethodCallExpr n, Object arg) { | ||
super.visit(n, arg); | ||
String calleeName = n.getName(); | ||
if ("query".equals(calleeName)) { | ||
List<Expression> calleeArguments = n.getArgs(); | ||
System.out.println(calleeArguments); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
./TracingPowerManager.java | ||
./MessageHeader.java | ||
./InsertableHtmlContent.java | ||
./MimeBodyPart.java | ||
./CheckBoxListPreference.java | ||
./K9AccountReceptor.java | ||
./Folder.java | ||
./Apg.java | ||
./AutoSyncSdk4.java | ||
./AccountSetupAccountType.java | ||
./MediaScannerNotifier.java | ||
./Message.java | ||
./ToggleScrollView.java | ||
./TrustedSocketFactory.java | ||
./EmailReceivedIntent.java | ||
./ActivityListener.java | ||
./ManageIdentities.java | ||
./CountingOutputStream.java | ||
./ContactsSdk3_4.java | ||
./MimeHeader.java | ||
./Prefs.java | ||
./PgpData.java | ||
./Part.java | ||
./AccountSetupIncoming.java | ||
./SizeFormatter.java | ||
./MessageDateComparator.java | ||
./BodyPart.java | ||
./ColorPickerDialog.java | ||
./Base64.java | ||
./Address.java | ||
./UnavailableStorageException.java | ||
./MessageRetrievalListener.java | ||
./LauncherShortcuts.java | ||
./EditIdentity.java | ||
./IAutoSync.java | ||
./BaseAccount.java | ||
./FontSizes.java | ||
./MessageReference.java | ||
./K9RemoteControl.java | ||
./AttachmentProvider.java | ||
./PushReceiver.java | ||
./FontSizeSettings.java | ||
./Body.java | ||
./MailService.java | ||
./SleepService.java | ||
./WebDavStore.java | ||
./Transport.java | ||
./Flag.java | ||
./Utility.java | ||
./EOLConvertingOutputStream.java | ||
./FolderInfoHolder.java | ||
./AttachmentView.java | ||
./BootReceiver.java | ||
./FolderSettings.java | ||
./WebDavTransport.java | ||
./RemoteControlService.java | ||
./MimeUtility.java | ||
./Store.java | ||
./SmtpTransport.java | ||
./MessageWebView.java | ||
./ColorPickerBox.java | ||
./K9.java | ||
./UnavailableAccountException.java | ||
./Contacts.java | ||
./Editor.java | ||
./CoreReceiver.java | ||
./ShutdownReceiver.java | ||
./SpinnerHelper.java | ||
./PeekableInputStream.java | ||
./AuthenticationFailedException.java | ||
./AccountReceiver.java | ||
./None.java | ||
./BinaryTempFileBody.java | ||
./ImapStore.java | ||
./PushService.java | ||
./ImapSettings.java | ||
./LocalStore.java | ||
./SpinnerOption.java | ||
./Regex.java | ||
./TextBody.java | ||
./Pop3Store.java | ||
./FolderList.java | ||
./ColorChip.java | ||
./EmmaInstrumentation.java | ||
./ContactsSdk5.java | ||
./Iso2022JpToShiftJisInputStream.java | ||
./K9PreferenceActivity.java | ||
./AutoSyncSdk3.java | ||
./AccountSetupNames.java | ||
./MessagingListener.java | ||
./PollService.java | ||
./Identity.java | ||
./FetchProfile.java | ||
./StorageGoneReceiver.java | ||
./Account.java | ||
./Accounts.java | ||
./AccountSetupCheckSettings.java | ||
./Preferences.java | ||
./ContactsSdk5p.java | ||
./AccountSetupOutgoing.java | ||
./MessagingException.java | ||
./StorageReceiver.java | ||
./AccountSetupBasics.java | ||
./K9ListActivity.java | ||
./SearchAccount.java | ||
./ChooseIdentity.java | ||
./Base64OutputStream.java | ||
./LineWrapOutputStream.java | ||
./ChooseAccount.java | ||
./AccountSetupOptions.java | ||
./NotificationSetting.java | ||
./FinishListener.java | ||
./Pusher.java | ||
./MessageView.java | ||
./CertificateValidationException.java | ||
./ImapResponseParser.java | ||
./LockableDatabase.java | ||
./AccessibleWebView.java | ||
./Search.java | ||
./DecoderUtil.java | ||
./AccessibleEmailContentActivity.java | ||
./RemoteControlReceiver.java | ||
./AutoSyncHelper.java | ||
./MimeMultipart.java | ||
./MessagingController.java | ||
./TimePickerPreference.java | ||
./AccountSetupComposition.java | ||
./EmailAddressAdapter.java | ||
./TrustManagerFactory.java | ||
./Storage.java | ||
./K9Activity.java | ||
./DateFormatter.java | ||
./K9ExpandableListActivity.java | ||
./EmailAddressValidator.java | ||
./MessagingControllerPushReceiver.java | ||
./StatusOutputStream.java | ||
./MessageRemovalListener.java | ||
./ChooseFolder.java | ||
./MessageList.java | ||
./CoreService.java | ||
./SearchModifier.java | ||
./MessageProvider.java | ||
./MessageInfoHolder.java | ||
./StorageManager.java | ||
./DomainNameChecker.java | ||
./MessageHelper.java | ||
./Multipart.java | ||
./FolderListFilter.java | ||
./SmtpDataStuffing.java | ||
./SMSInstrumentedReceiver.java | ||
./AutoSyncSdk5.java | ||
./MessageCompose.java | ||
./AccountStats.java | ||
./FixedLengthInputStream.java | ||
./HtmlConverter.java | ||
./AccountSettings.java | ||
./CryptoProvider.java | ||
./ProgressListener.java | ||
./InstrumentedActivity.java | ||
./MimeMessage.java | ||
./SearchSpecification.java |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package icc.visitors; | ||
|
||
import static org.junit.Assert.fail; | ||
|
||
import org.junit.Test; | ||
|
||
import com.github.javaparser.ast.CompilationUnit; | ||
|
||
import icc.data.ICCLinkFindingResults; | ||
|
||
public class ContentResolverVisitorTest { | ||
|
||
private static final CompilationUnit compilationUnit = Utils.generateCompilationUnit("Apg.java", | ||
"test-data/k9/src"); | ||
|
||
@Test | ||
public void test() { | ||
ICCLinkFindingResults r = new ICCLinkFindingResults(); | ||
ContentResolverVisitor visitor = new ContentResolverVisitor(r); | ||
visitor.visit(compilationUnit, null); | ||
fail("Not yet implemented"); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package icc.visitors; | ||
|
||
import java.io.File; | ||
import java.io.FileInputStream; | ||
import java.io.FileNotFoundException; | ||
|
||
import com.github.javaparser.JavaParser; | ||
import com.github.javaparser.ParseException; | ||
import com.github.javaparser.ast.CompilationUnit; | ||
|
||
public class Utils { | ||
|
||
// TODO: This could be really reused in the main function. | ||
|
||
/** | ||
* Generates a {@link CompilationUnit} based on the given file and its | ||
* relative parent path. | ||
* <p> | ||
* Example: <blockquote> | ||
* <code>CompilationUnit cu = generateCompilationUnit("Apg.java", "test-data/k9/src");</code> | ||
* </blockquote> | ||
* <p> | ||
* A Runtime Exception will halt the execution if: | ||
* <ol> | ||
* <li>file is not well-formed (ie can't be correctly parsed) or</li> | ||
* <li>file doesn't exists due to unreachable path</li> | ||
* </ol> | ||
* | ||
* @param fileName | ||
* The file name | ||
* @param parentDir | ||
* Relative path to the source code | ||
* @return A parsed compilation unit. | ||
* | ||
*/ | ||
public static CompilationUnit generateCompilationUnit(String fileName, String parentDir) { | ||
CompilationUnit compilationUnit = null; | ||
try { | ||
FileInputStream toBeParsed = new FileInputStream(new File(parentDir, fileName)); | ||
compilationUnit = JavaParser.parse(toBeParsed); | ||
|
||
} catch (FileNotFoundException e) { | ||
throw new RuntimeException(String.format("File \"%s/%s\" couldn't be found!", parentDir, fileName)); | ||
} catch (ParseException e) { | ||
throw new RuntimeException(String.format("File named \"%s\" is not well-formed!", fileName)); | ||
} | ||
return compilationUnit; | ||
} | ||
} |